资源简介
矩阵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变换
- 下一篇:仿射加密现代密码学
评论
共有 条评论