資源簡介
矩陣QR分解的實現,采用的householder算法,親測可用。
代碼片段和文件信息
??#include?“math.h“
??#include?“stdio.h“
??int?maqr(amnq)
??int?mn;
??double?a[]q[];
??{?int?ijklnnpjj;
????double?ualphawt;
????if?(m ??????{?printf(“fail\n“);?return(0);}
????for?(i=0;?i<=m-1;?i++)
????for?(j=0;?j<=m-1;?j++)
??????{?l=i*m+j;?q[l]=0.0;
????????if?(i==j)?q[l]=1.0;
??????}
????nn=n;
????if?(m==n)?nn=m-1;
????for?(k=0;?k<=nn-1;?k++)
??????{?u=0.0;?l=k*n+k;
????????for?(i=k;?i<=m-1;?i++)
??????????{?w=fabs(a[i*n+k]);
????????????if?(w>u)?u=w;
??????????}
????????alpha=0.0;
????????for?(i=k;?i<=m-1;?i++)
??????????{?t=a[i*n+k]/u;?alpha=alpha+t*t;}
????????if?(a[l]>0.0)?u=-u;
????????alpha=u*sqrt(alpha);
????????if?(fabs(alpha)+1.0==1.0)
??????????{?printf(“fail\n“);?return(0);}
????????u=sqrt(2.0*alpha*(alpha-a[l]));
????????if?((u+1.0)!=1.0)
??????????{?a[l]=(a[l]-alpha)/u;
????????????for?(i=k+1;?i<=m-1;?i++)
??????????????{?p=i*n+k;?a[p]=a[p]/u;}
????????????for?(j=0;?j<=m-1;?j++)
??????????????{?t=0.0;
????????????????for?(jj=k;?jj<=m-1;?jj++)
??????????????????t=t+a[jj*n+k]*q[jj*m+j];
????????????????for?(i=k;?i<=m-1;?i++)
??????????????????{?p=i*m+j;?q[p]=q[p]-2.0*t*a[i*n+k];}
???
- 上一篇:Visual C++實現的FFT變換
- 下一篇:仿射加密現代密碼學
評論
共有 條評論