内容发布更新时间 : 2025/6/20 16:09:09星期一 下面是文章的全部内容请认真阅读。
/*求beta2*/ beta2=0; for(i=1;i<=n;i++) { beta2+=y[i]*u[i]; } }while(fabs((beta2-beta1)/beta2) > 1e-12 || k==1); free(u); return beta2; }
/*------------------------------------------------------ ***函数名:fanmifa(double **a,int r,int s,int n,double *y) ***功 能:计算矩阵A按模最大的特征值和对应的特征向量 ***参 数:矩阵A,y为所求特征值对应的特征向量
***返回值:double型特征值
***说 明:~~针对带状存储的矩阵~~ ~~使用的是2范数~~ by lidezheng 日期:2013-10-18
------------------------------------------------------*/ double fanmifa(double **a,int r,int s,int n,double *y) { double beta1,beta2,max; int k,i; double *u; u=(double *)malloc((n+1)*sizeof(double)); /*选取非零向量u*/ for(i=1;i<=n;i++) { u[i]=1; /***--->###这里要讨论初始向量对解的影响###<---***/ } /*反幂法迭代*/ k=0; beta2=0; do{ k++; beta1=beta2; max=0; for(i=1;i<=n;i++)/*求出向量u的2范数*/ { max+=pow((*(u+i)),2); } max=sqrt(max); /*求y(k-1)*/ for(i=1;i<=n;i++) { y[i]=u[i]/max; } /*求Uk,调用LU方法*/ if(LU(a,y,r,s,n,u) == 0)/****注意a,y,u的下标******/ { printf(\调用LU计算方程组出错,ERROR!\\n\); exit(0); } /*求beta2*/ beta2=0;
for(i=1;i<=n;i++) { beta2+=y[i]*u[i]; } }while(fabs((beta2-beta1)/beta2) > 1e-12 || k==1); free(u); return 1/beta2; }
/*------------------------------------------------------
***函数名:LU(double **A,double *B,int r,int s,int n,double *x) ***功 能:Doolittle分解法,解线性方程组 ***参 数:~~解带状存储的矩阵~~
***返回值:0-失败,1-成功 ***说 明:~~针对带状矩阵~~ by lidezheng 日期:2013-10-18 修改:2013-10-19
------------------------------------------------------*/ int LU(double **A,double *B,int r,int s,int n,double *x) { int k,i,j,t,up,down; double temp,**c,*b; c=dmatrix(r+s+1,n); b=(double *)malloc((n+1)*sizeof(double)); /