#include<stdio.h>
main()
{int i,n=20,x1=3;
float y1,y2,y3,y4,h,y5,y6,y7,y8,z1,z2,z3,z4,z5,z6;
double u[21],v[21],w[21];
y1=0.508;
y2=1.5e7;
y3=2.1e3;
y4=1.0e6;
h=2.5;
y5=1.0e6;
y6=0.02;
y7=210e9;
y8=5.0e6;
z1=1+(y5*h*h)/(y6*y7);
z2=-3-(y5*h*h)/(y6*y7);
z3=(y8*h*h)/(y6*y7);
z4=(y4*h*h*h)/(y6*y7);
z5=1+(y5+y3*(x1+n*h))*h*h/(y6*y7);
z6=-3-(y5+y3*(x1+n*h))*h*h/(y6*y7);
for (i=0;i<21;i++)
{ u[i]=6.0+(y5+y3*(x1+i*h))*h*h/(y6*y7);
v[i]=-4.0-2.0*(y5+y3*(x1+i*h))*h*h/(y6*y7)+0.9*y2*h*h*h*h*(1.0+y1)*i*h/(y6*y7);
w[i]=1.0+(y5+y3*(x1+i*h))*h*h/(y6*y7);
}
double b[25][5]={{0.0,0.0,1.0,-2.0,1.0},{0.0,-1.0,3.0,z2,z1},{1.0,-4.0,u[0],v[0],w[0]},{1.0,-4.0,u[1],v[1],w[1]}, {1.0,-4.0,u[2],v[2],w[2]},
{1.0,-4.0,u[3],v[3],w[3]}, {1.0,-4.0,u[4],v[4],w[4]}, {1.0,-4.0,u[5],v[5],w[5]}, {1.0,-4.0,u[6],v[6],w[6]}, {1.0,-4.0,u[7],v[7],w[7]},
{1.0,-4.0,u[8],v[8],w[8]}, {1.0,-4.0,u[9],v[9],w[9]}, {1.0,-4.0,u[10],v[10],w[10]}, {1.0,-4.0,u[11],v[11],w[11]}, {1.0,-4.0,u[12],v[12],w[12]},
{1.0,-4.0,u[13],v[13],w[13]}, {1.0,-4.0,u[14],v[14],w[14]},{1.0,-4.0,u[15],v[15],w[15]}, {1.0,-4.0,u[16],v[16],w[16]}, {1.0,-4.0,u[17],v[17],w[17]},
{1.0,-4.0,u[18],v[18],w[18]}, {1.0,-4.0,u[19],v[19],w[19]}, {1.0,-4.0,u[20],v[20],w[20]}, {0.0,-1.0,3.0,z6,z5}, {0.0,0.0,1.0,-2.0,1.0}}
double d[25][1]= {{z3},{z4},{0.0},{0.0},
{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},
{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},
{0.0},{0.0},{0.0},{0.0},{0.0}}
if(band(25,2,5,1,b,d)>0)
{
for(i=0;i<=24;i++)
{
printf("x(%d)=%13.7e\n",i,d[i][0]);
}
}
}
int band(int n,int h,int ih,int m,double b[],double d[])
{int ls,k,i,j,is,u,v;
double p,t;
if(ih!=(2*h+1)) /*带宽与半带宽不匹配,错误返回*/
{printf("fail \n");return(-2); }
ls=h;
for(k=0;k<=n-2;k++)
{p=0.0;
for(i=k;i<=ls;i++)/*列选主元*/
{t=fabs(b[i*ih]);
if(t>p) {p=t;is=i; }
}
if(p+1.0==1.0) /*方程组系数矩阵奇异,错误返回*/
{printf("fail \n");return(0); }
for(j=0;j<=m-1;j++)/* m组常数向量行交换*/
{u=k*m+j;v=is*m+j;t=d[u];d[u]=d[v];d[v]=t; }
for(j=0 ;j<=ih-1 ;j++)/*系数矩阵归一化*/
{u=k*ih+j;v=is*ih+j;t=b[u];b[u]=b[v] ;b[v]=t ; }
for(j=0;j<=m-1;j++)/*m组常数向量归一化 */
{u=k*m+j; d[u]=d[u]/b[k*ih]; }
for(j=1 ;j<=ih-1 ;j++)/*系数矩阵归一化*/
{u=k*ih+j; b[u] =b[u]/b[k*ih] ; }
for(i=k+1;i<=ls;i++)
{t=b[i*ih];
for(j=0;j<=m-1;j++)/*m组常数向量消元*/
{u=i*m+j;v=k*m+j; d[u]=d[u]-t*d[v]; }
for(j=1;j<=ih-1;j++)/*系数矩阵消元,且左移一列*/
{u=i*ih+j;v=k*ih+j; b[u-1]=b[u]-t*b[v]; }
u=i*ih+ih-1;b[u]=0.0; }
if(ls!=(n-1)) ls=ls+1; }
p=b[(n-1)*ih];
if(fabs(p)+1.0==1.0) /*方程组系数矩阵奇异,错误返回*/
{printf("fail \n");return(0); }
for(j=0;j<=m-1;j++)/*计算m组解向量中的最后一个分量*/
{u=(n-1)*m+j;d[u]=d[u]/p; }
ls=1;
for(i=n-2;i>=0;i--)
{for(k=0;k<=m-1;k++)
{u=i*m+k;
for(j=1;j<=ls;j++)
{v=i*ih+j;is=(i+j)*m+k; d[u]=d[u]- b[v]*d[is]; }}
if(ls!=(ih-1)) ls=ls+1; }
return(2);}/*正常返回*/
12 个解决方案
#1
这两个double b[25][5]={{0.0,0.0,1.0,-2.0,1.0},{0.0,-1.0,3.0,z2,z1},{1.0,-4.0,u[0],v[0],w[0]},{1.0,-4.0,u[1],v[1],w[1]}, {1.0,-4.0,u[2],v[2],w[2]},
{1.0,-4.0,u[3],v[3],w[3]}, {1.0,-4.0,u[4],v[4],w[4]}, {1.0,-4.0,u[5],v[5],w[5]}, {1.0,-4.0,u[6],v[6],w[6]}, {1.0,-4.0,u[7],v[7],w[7]},
{1.0,-4.0,u[8],v[8],w[8]}, {1.0,-4.0,u[9],v[9],w[9]}, {1.0,-4.0,u[10],v[10],w[10]}, {1.0,-4.0,u[11],v[11],w[11]}, {1.0,-4.0,u[12],v[12],w[12]},
{1.0,-4.0,u[13],v[13],w[13]}, {1.0,-4.0,u[14],v[14],w[14]},{1.0,-4.0,u[15],v[15],w[15]}, {1.0,-4.0,u[16],v[16],w[16]}, {1.0,-4.0,u[17],v[17],w[17]},
{1.0,-4.0,u[18],v[18],w[18]}, {1.0,-4.0,u[19],v[19],w[19]}, {1.0,-4.0,u[20],v[20],w[20]}, {0.0,-1.0,3.0,z6,z5}, {0.0,0.0,1.0,-2.0,1.0}} ;
double d[25][1]= {{z3},{z4},{0.0},{0.0},
{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},
{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},
{0.0},{0.0},{0.0},{0.0},{0.0}} ;后面都少了个;
{1.0,-4.0,u[3],v[3],w[3]}, {1.0,-4.0,u[4],v[4],w[4]}, {1.0,-4.0,u[5],v[5],w[5]}, {1.0,-4.0,u[6],v[6],w[6]}, {1.0,-4.0,u[7],v[7],w[7]},
{1.0,-4.0,u[8],v[8],w[8]}, {1.0,-4.0,u[9],v[9],w[9]}, {1.0,-4.0,u[10],v[10],w[10]}, {1.0,-4.0,u[11],v[11],w[11]}, {1.0,-4.0,u[12],v[12],w[12]},
{1.0,-4.0,u[13],v[13],w[13]}, {1.0,-4.0,u[14],v[14],w[14]},{1.0,-4.0,u[15],v[15],w[15]}, {1.0,-4.0,u[16],v[16],w[16]}, {1.0,-4.0,u[17],v[17],w[17]},
{1.0,-4.0,u[18],v[18],w[18]}, {1.0,-4.0,u[19],v[19],w[19]}, {1.0,-4.0,u[20],v[20],w[20]}, {0.0,-1.0,3.0,z6,z5}, {0.0,0.0,1.0,-2.0,1.0}} ;
double d[25][1]= {{z3},{z4},{0.0},{0.0},
{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},
{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},
{0.0},{0.0},{0.0},{0.0},{0.0}} ;后面都少了个;
#2
是25行啊,没有少奥,请您仔细给我看看,到底哪里出问题了?多谢。
#3
结尾要有分号
#4
少了个;
#5
好多错。。。建议楼主在写的时候,写一小段就测试一小段,不要写得老长老长的再改。。。
#6
加上;号之后错误更多了,if(band(25,2,5,1,b,d)>0)中的b,d未在main函数中定义
#7
5楼的大侠多指导一下,我学过好几年没有用,下载还是菜鸟级别,
#8
我遇到类似问题都是用
“每次用/*...*/临时注释掉代码的不同部分再编译看出错信息”方法最终找到真正的语法出错位置的。
#9
在main前声明下函数int band(int n,int h,int ih,int m,double b[][5],double d[][1]) ;
把实现的那部分也给改成这样子的。。。
int band(int n,int h,int ih,int m,double b[][5],double d[][1])
{
}
#10
初始化语法好像不能用来赋值,改成下面:
#include <stdio.h>
int band(int n,int h,int ih,int m,double b[],double d[]) {
int ls,k,i,j,is,u,v;
double p,t;
if (ih!=(2*h+1)) {/*带宽与半带宽不匹配,错误返回*/
printf("fail \n");
return(-2);
}
ls=h;
for (k=0;k<=n-2;k++) {
p=0.0;
for (i=k;i<=ls;i++) {/*列选主元*/
t=fabs(b[i*ih]);
if (t>p) {
p=t;
is=i;
}
}
if (p+1.0==1.0) {/*方程组系数矩阵奇异,错误返回*/
printf("fail \n");
return(0);
}
for (j=0;j<=m-1;j++) {/* m组常数向量行交换*/
u=k*m+j;
v=is*m+j;
t=d[u];d[u]=d[v];d[v]=t;
}
for (j=0;j<=ih-1;j++) {/*系数矩阵归一化*/
u=k*ih+j;
v=is*ih+j;
t=b[u];b[u]=b[v];b[v]=t;
}
for (j=0;j<=m-1;j++) {/*m组常数向量归一化 */
u=k*m+j;
d[u]=d[u]/b[k*ih];
}
for (j=1;j<=ih-1;j++) {/*系数矩阵归一化*/
u=k*ih+j;
b[u]=b[u]/b[k*ih];
}
for (i=k+1;i<=ls;i++) {
t=b[i*ih];
for (j=0;j<=m-1;j++) {/*m组常数向量消元*/
u=i*m+j;
v=k*m+j;
d[u]=d[u]-t*d[v];
}
for (j=1;j<=ih-1;j++) {/*系数矩阵消元,且左移一列*/
u=i*ih+j;
v=k*ih+j;
b[u-1]=b[u]-t*b[v];
}
u=i*ih+ih-1;
b[u]=0.0;
}
if (ls!=(n-1)) ls=ls+1;
}
p=b[(n-1)*ih];
if (fabs(p)<=0.000001) {/*方程组系数矩阵奇异,错误返回*/
printf("fail \n");
return(0);
}
for (j=0;j<=m-1;j++) {/*计算m组解向量中的最后一个分量*/
u=(n-1)*m+j;
d[u]=d[u]/p;
}
ls=1;
for (i=n-2;i>=0;i--) {
for (k=0;k<=m-1;k++) {
u=i*m+k;
for (j=1;j<=ls;j++) {
v=i*ih+j;
is=(i+j)*m+k;
d[u]=d[u]-b[v]*d[is];
}
}
if (ls!=(ih-1)) ls=ls+1;
}
return(2);
}/*正常返回*/
main() {
int i,n=20,x1=3;
float y1,y2,y3,y4,h,y5,y6,y7,y8,z1,z2,z3,z4,z5,z6;
double u[21],v[21],w[21];
double b[25][5]={
{0.0, 0.0, 1.0, -2.0, 1.0},
{0.0, -1.0, 3.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{0.0, -1.0, 3.0, 0.0, 0.0},
{0.0, 0.0, 1.0, -2.0, 1.0},
};
double d[25][1]={
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
};
y1=0.508;
y2=1.5e7;
y3=2.1e3;
y4=1.0e6;
h =2.5;
y5=1.0e6;
y6=0.02;
y7=210e9;
y8=5.0e6;
z1=1 +(y5*h*h)/(y6*y7);
z2=-3 -(y5*h*h)/(y6*y7);
z3= (y8*h*h)/(y6*y7);
z4= (y4*h*h*h)/(y6*y7);
z5=1 +(y5+y3*(x1+n*h))*h*h/(y6*y7);
z6=-3-(y5+y3*(x1+n*h))*h*h/(y6*y7);
for (i=0;i<21;i++) {
u[i]=6.0 +(y5+y3*(x1+i*h))*h*h/(y6*y7);
v[i]=-4.0-2.0*(y5+y3*(x1+i*h))*h*h/(y6*y7)+0.9*y2*h*h*h*h*(1.0+y1)*i*h/(y6*y7);
w[i]=1.0 +(y5+y3*(x1+i*h))*h*h/(y6*y7);
}
b[1][3]=z2;
b[1][4]=z1;
for (i=0;i<21;i++) {
b[2+i][2]=u[i];
b[2+i][2]=v[i];
b[2+i][2]=w[i];
}
b[23][3]=z6;
b[23][4]=z5;
d[0][0]=z3;
d[1][0]=z4;
if (band(25,2,5,1,b,d)>0) {
for (i=0;i<=24;i++) {
printf("x(%d)=%13.7e\n",i,d[i][0]);
}
}
}
#11
楼主对比一下你的和我的代码,书写格式要尽量清晰啊!
#12
还有
照顾到浮点运算的精度,不能
if(fabs(p)+1.0==1.0) /*方程组系数矩阵奇异,错误返回*/
而要
if (fabs(p)<=0.000001) {/*方程组系数矩阵奇异,错误返回*/
另外
用fabs要在开头加
#include <math.h>
吧
照顾到浮点运算的精度,不能
if(fabs(p)+1.0==1.0) /*方程组系数矩阵奇异,错误返回*/
而要
if (fabs(p)<=0.000001) {/*方程组系数矩阵奇异,错误返回*/
另外
用fabs要在开头加
#include <math.h>
吧
#1
这两个double b[25][5]={{0.0,0.0,1.0,-2.0,1.0},{0.0,-1.0,3.0,z2,z1},{1.0,-4.0,u[0],v[0],w[0]},{1.0,-4.0,u[1],v[1],w[1]}, {1.0,-4.0,u[2],v[2],w[2]},
{1.0,-4.0,u[3],v[3],w[3]}, {1.0,-4.0,u[4],v[4],w[4]}, {1.0,-4.0,u[5],v[5],w[5]}, {1.0,-4.0,u[6],v[6],w[6]}, {1.0,-4.0,u[7],v[7],w[7]},
{1.0,-4.0,u[8],v[8],w[8]}, {1.0,-4.0,u[9],v[9],w[9]}, {1.0,-4.0,u[10],v[10],w[10]}, {1.0,-4.0,u[11],v[11],w[11]}, {1.0,-4.0,u[12],v[12],w[12]},
{1.0,-4.0,u[13],v[13],w[13]}, {1.0,-4.0,u[14],v[14],w[14]},{1.0,-4.0,u[15],v[15],w[15]}, {1.0,-4.0,u[16],v[16],w[16]}, {1.0,-4.0,u[17],v[17],w[17]},
{1.0,-4.0,u[18],v[18],w[18]}, {1.0,-4.0,u[19],v[19],w[19]}, {1.0,-4.0,u[20],v[20],w[20]}, {0.0,-1.0,3.0,z6,z5}, {0.0,0.0,1.0,-2.0,1.0}} ;
double d[25][1]= {{z3},{z4},{0.0},{0.0},
{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},
{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},
{0.0},{0.0},{0.0},{0.0},{0.0}} ;后面都少了个;
{1.0,-4.0,u[3],v[3],w[3]}, {1.0,-4.0,u[4],v[4],w[4]}, {1.0,-4.0,u[5],v[5],w[5]}, {1.0,-4.0,u[6],v[6],w[6]}, {1.0,-4.0,u[7],v[7],w[7]},
{1.0,-4.0,u[8],v[8],w[8]}, {1.0,-4.0,u[9],v[9],w[9]}, {1.0,-4.0,u[10],v[10],w[10]}, {1.0,-4.0,u[11],v[11],w[11]}, {1.0,-4.0,u[12],v[12],w[12]},
{1.0,-4.0,u[13],v[13],w[13]}, {1.0,-4.0,u[14],v[14],w[14]},{1.0,-4.0,u[15],v[15],w[15]}, {1.0,-4.0,u[16],v[16],w[16]}, {1.0,-4.0,u[17],v[17],w[17]},
{1.0,-4.0,u[18],v[18],w[18]}, {1.0,-4.0,u[19],v[19],w[19]}, {1.0,-4.0,u[20],v[20],w[20]}, {0.0,-1.0,3.0,z6,z5}, {0.0,0.0,1.0,-2.0,1.0}} ;
double d[25][1]= {{z3},{z4},{0.0},{0.0},
{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},
{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},{0.0},
{0.0},{0.0},{0.0},{0.0},{0.0}} ;后面都少了个;
#2
是25行啊,没有少奥,请您仔细给我看看,到底哪里出问题了?多谢。
#3
结尾要有分号
#4
少了个;
#5
好多错。。。建议楼主在写的时候,写一小段就测试一小段,不要写得老长老长的再改。。。
#6
加上;号之后错误更多了,if(band(25,2,5,1,b,d)>0)中的b,d未在main函数中定义
#7
5楼的大侠多指导一下,我学过好几年没有用,下载还是菜鸟级别,
#8
我遇到类似问题都是用
“每次用/*...*/临时注释掉代码的不同部分再编译看出错信息”方法最终找到真正的语法出错位置的。
#9
在main前声明下函数int band(int n,int h,int ih,int m,double b[][5],double d[][1]) ;
把实现的那部分也给改成这样子的。。。
int band(int n,int h,int ih,int m,double b[][5],double d[][1])
{
}
#10
初始化语法好像不能用来赋值,改成下面:
#include <stdio.h>
int band(int n,int h,int ih,int m,double b[],double d[]) {
int ls,k,i,j,is,u,v;
double p,t;
if (ih!=(2*h+1)) {/*带宽与半带宽不匹配,错误返回*/
printf("fail \n");
return(-2);
}
ls=h;
for (k=0;k<=n-2;k++) {
p=0.0;
for (i=k;i<=ls;i++) {/*列选主元*/
t=fabs(b[i*ih]);
if (t>p) {
p=t;
is=i;
}
}
if (p+1.0==1.0) {/*方程组系数矩阵奇异,错误返回*/
printf("fail \n");
return(0);
}
for (j=0;j<=m-1;j++) {/* m组常数向量行交换*/
u=k*m+j;
v=is*m+j;
t=d[u];d[u]=d[v];d[v]=t;
}
for (j=0;j<=ih-1;j++) {/*系数矩阵归一化*/
u=k*ih+j;
v=is*ih+j;
t=b[u];b[u]=b[v];b[v]=t;
}
for (j=0;j<=m-1;j++) {/*m组常数向量归一化 */
u=k*m+j;
d[u]=d[u]/b[k*ih];
}
for (j=1;j<=ih-1;j++) {/*系数矩阵归一化*/
u=k*ih+j;
b[u]=b[u]/b[k*ih];
}
for (i=k+1;i<=ls;i++) {
t=b[i*ih];
for (j=0;j<=m-1;j++) {/*m组常数向量消元*/
u=i*m+j;
v=k*m+j;
d[u]=d[u]-t*d[v];
}
for (j=1;j<=ih-1;j++) {/*系数矩阵消元,且左移一列*/
u=i*ih+j;
v=k*ih+j;
b[u-1]=b[u]-t*b[v];
}
u=i*ih+ih-1;
b[u]=0.0;
}
if (ls!=(n-1)) ls=ls+1;
}
p=b[(n-1)*ih];
if (fabs(p)<=0.000001) {/*方程组系数矩阵奇异,错误返回*/
printf("fail \n");
return(0);
}
for (j=0;j<=m-1;j++) {/*计算m组解向量中的最后一个分量*/
u=(n-1)*m+j;
d[u]=d[u]/p;
}
ls=1;
for (i=n-2;i>=0;i--) {
for (k=0;k<=m-1;k++) {
u=i*m+k;
for (j=1;j<=ls;j++) {
v=i*ih+j;
is=(i+j)*m+k;
d[u]=d[u]-b[v]*d[is];
}
}
if (ls!=(ih-1)) ls=ls+1;
}
return(2);
}/*正常返回*/
main() {
int i,n=20,x1=3;
float y1,y2,y3,y4,h,y5,y6,y7,y8,z1,z2,z3,z4,z5,z6;
double u[21],v[21],w[21];
double b[25][5]={
{0.0, 0.0, 1.0, -2.0, 1.0},
{0.0, -1.0, 3.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{1.0, -4.0, 0.0, 0.0, 0.0},
{0.0, -1.0, 3.0, 0.0, 0.0},
{0.0, 0.0, 1.0, -2.0, 1.0},
};
double d[25][1]={
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
{0.0},
};
y1=0.508;
y2=1.5e7;
y3=2.1e3;
y4=1.0e6;
h =2.5;
y5=1.0e6;
y6=0.02;
y7=210e9;
y8=5.0e6;
z1=1 +(y5*h*h)/(y6*y7);
z2=-3 -(y5*h*h)/(y6*y7);
z3= (y8*h*h)/(y6*y7);
z4= (y4*h*h*h)/(y6*y7);
z5=1 +(y5+y3*(x1+n*h))*h*h/(y6*y7);
z6=-3-(y5+y3*(x1+n*h))*h*h/(y6*y7);
for (i=0;i<21;i++) {
u[i]=6.0 +(y5+y3*(x1+i*h))*h*h/(y6*y7);
v[i]=-4.0-2.0*(y5+y3*(x1+i*h))*h*h/(y6*y7)+0.9*y2*h*h*h*h*(1.0+y1)*i*h/(y6*y7);
w[i]=1.0 +(y5+y3*(x1+i*h))*h*h/(y6*y7);
}
b[1][3]=z2;
b[1][4]=z1;
for (i=0;i<21;i++) {
b[2+i][2]=u[i];
b[2+i][2]=v[i];
b[2+i][2]=w[i];
}
b[23][3]=z6;
b[23][4]=z5;
d[0][0]=z3;
d[1][0]=z4;
if (band(25,2,5,1,b,d)>0) {
for (i=0;i<=24;i++) {
printf("x(%d)=%13.7e\n",i,d[i][0]);
}
}
}
#11
楼主对比一下你的和我的代码,书写格式要尽量清晰啊!
#12
还有
照顾到浮点运算的精度,不能
if(fabs(p)+1.0==1.0) /*方程组系数矩阵奇异,错误返回*/
而要
if (fabs(p)<=0.000001) {/*方程组系数矩阵奇异,错误返回*/
另外
用fabs要在开头加
#include <math.h>
吧
照顾到浮点运算的精度,不能
if(fabs(p)+1.0==1.0) /*方程组系数矩阵奇异,错误返回*/
而要
if (fabs(p)<=0.000001) {/*方程组系数矩阵奇异,错误返回*/
另外
用fabs要在开头加
#include <math.h>
吧