for (j=0;j<=m-1;j++) { u=i*m+j; v=k*m+j; d[u]=d[u]-t*d[v]; } for (j=1;j<=il-1;j++) { u=i*il+j; v=k*il+j; b[u-1]=b[u]-t*b[v]; } u=i*il+il-1; b[u]=0.0; } if (ls!=(n-1)) { ls=ls+1; } } p=b[(n-1)*il]; if (fabs(p)+1.0==1.0) { printf("fail\n"); return(0); } for (j=0;j<=m-1;j++) { 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*il+j; is=(i+j)*m+k; d[u]=d[u]-b[v]*d[is]; } } if (ls!=(il-1)) ls=ls+1; } return(2); }
//求解对称方程组的分解法 //a n*n数组,存放方程组的系数矩阵(应为对称矩阵) //n 方程组的阶数 //m 方程组右端常数向量的个数 //c n*m 存放方程组右端的m组常数向量;返回时存放方程组的m组解向量 //返回值小于0表示程序工作失败,大于0表示正常返回 int cgldl(double a[],int n,int m,double c[]) { int i,j,l,k,u,v,w,k1,k2,k3; double p; if (fabs(a[0])+1.0==1.0) { printf("fail\n"); return(-2); } for (i=1; i<=n-1; i++) { u=i*n; a[u]=a[u]/a[0]; } for (i=1; i<=n-2; i++) { u=i*n+i; for (j=1; j<=i; j++) { v=i*n+j-1; l=(j-1)*n+j-1; a[u]=a[u]-a[v]*a[v]*a[l]; } p=a[u]; if (fabs(p)+1.0==1.0) { printf("fail\n");
上一篇:浙江台州互联网行业浅析--问题篇
下一篇:数值计算程序大放送-特征值和特征向量
|