return(0); } d=a[k*n+k]; for (j=k+1;j<=n-1;j++) { p=k*n+j; a[p]=a[p]/d; } b[k]=b[k]/d; for (i=k+1;i<=n-1;i++) { for (j=k+1;j<=n-1;j++) { p=i*n+j; a[p]=a[p]-a[i*n+k]*a[k*n+j]; } b[i]=b[i]-a[i*n+k]*b[k]; } } d=a[(n-1)*n+n-1]; if (fabs(d)+1.0==1.0) { free(js); printf("fail\n"); return(0); } x[n-1]=b[n-1]/d; for (i=n-2;i>=0;i--) { t=0.0; for (j=i+1;j<=n-1;j++) { t=t+a[i*n+j]*x[j]; } x[i]=b[i]-t; } js[n-1]=n-1; for (k=n-1;k>=0;k--) { if (js[k]!=k) { t=x[k]; x[k]=x[js[k]]; x[js[k]]=t; } } free(js);
//复系数方程组的全选主元高斯消去法 //ar-n*n存放复系数矩阵的实部,要被破坏 //ai-n*n存放复系数矩阵的虚部,要被破坏 //n-方程组的阶数 //br-存放方程组右端复常数向量的实部,返回时存放解向量的实部 //bi-存放方程组右端复常数向量的虚部,返回时存放解向量的虚部 //返回值0表示系数矩阵奇异 int cbcgaus(double ar[],double ai[],int n,double br[],double bi[]) { int *js,l,k,i,j,is,u,v; double p,q,s,d; js=malloc(n*sizeof(int)); for (k=0;k<=n-2;k++) { d=0.0; for (i=k;i<=n-1;i++) { for (j=k;j<=n-1;j++) { u=i*n+j; p=ar[u]*ar[u]+ai[u]*ai[u]; if (p>d) { d=p; js[k]=j; is=i; } } } if (d+1.0==1.0) {
上一篇:浙江台州互联网行业浅析--问题篇
下一篇:数值计算程序大放送-特征值和特征向量
|