void matiteration(pp,mm,xx,zz,nn,ch,itnu,ii,d0) //矩阵迭代法求矩阵的特征值和特征向量; <BR>int nn,*itnu,ii; <BR>double *pp,*mm,*xx,*zz,*ch,*d0; <BR> {double *y,*z1,*a,*b,*mp,*mp1,*d,*d1; <BR> int i; <BR> z1=calloc(nn,4); <BR> d=matmpl(pp,nn,nn,mm,nn); <BR> mp=calloc(nn*nn,4); <BR> d1=calloc(nn*nn,4); <BR> for(i=0;i<nn;i++) <BR> {*(z1+i)=*(zz+i); <BR> } <BR>for(i=0;i<nn*nn;i++) <BR> {*(d1+i)=*(d0+i); <BR> } <BR> *itnu=1; <BR> if(ii!=0) <BR> {a=matmpl(xx,1,nn,mm,nn); <BR> mp1=matmpl(a,1,nn,xx,1); <BR> b=matmpl(xx,nn,1,xx,nn); <BR> mp=matmpl(b,nn,nn,mm,nn); <BR> for(i=0;i<nn*nn;i++) <BR> {*(mp+i)=*(mp+i)/(*mp1); <BR> } <BR> d1=matsub(d1,mp,nn); <BR> for(i=0;i<nn*nn;i++) <BR> {*(d0+i)=*(d1+i); <BR> } <BR><BR> d=matmpl(d,nn,nn,d0,nn); <BR> } <BR>lab1: y=matmpl(d,nn,nn,z1,1); <BR> for(i=0;i<nn;i++) <BR> { *(zz+i)=*(y+i)/(*(y+nn-1)); <BR> } <BR> for(i=0;i<nn;i++) <BR> { if(fabs(fabs(*(z1+i))-fabs(*(zz+i)))>0.00001) <BR> { for(i=0;i<nn;i++) <BR> {*(z1+i)=*(zz+i); <BR> } <BR> *itnu=*itnu+1; <BR> goto lab1; <BR> } <BR> } <BR> *ch=(double)fabs(*(y+nn-1)); <BR> } <BR> |