(求助C语言实现Householder变换一般实矩阵为上Hessenberg矩阵的算法)
<P># include "math.h"#include"stdio.h"</P>
<P> void strp(a,p,c, n,u)
int n;
double a[],p[],c[],u[];
{
int i,j,k,v;
double sum,asum;
for(j=0;j<n-2;++j)
{// 最开始的for 循环
for(i=0;i<n;++i)//初始化u[]全为零
u=0.0;</P>
<P>
sum=0.0;
for(i=j+1;i<n;++i)//实现a
{
k=i*n+j;
sum+=a*a;
}
asum=sqrt(sum);</P>
<P> for(i=j+1;i<n;++i)
{
if(i==j+1)
u=a+(a>0 ? 1.0:-1.0)*asum;
else
u=a;
}
</P>
<P>
sum=0.0; //实现P
for(i=0;i<n;++i)
sum+=(u*u);</P>
<P> for(i=0;i<n;++i)
{for(k=0;k<n;++k)
{p=(i==k?1.0:0.0)+((-2.0)*u*u)/sum;
printf("%13.7e ",p);}
printf("\n");}</P>
<P>
for(i=0;i<n;i++) //实现最后的矩阵相乘
for(v=0;v<n;v++)
{ c=0.0;
for(k=0;k<n;k++)
c+=p*a;
}</P>
<P>
for(i=0;i<n;i++)
for(v=0;v<n;v++)
{
a=0.0;
for(k=0;k<n;k++)
a+=c*p;
}</P>
<P>
}//最开始的for的结束的大括号
return;
}</P>
<P>自己写的运行总是错误</P> 我已经把源代码发在计算数学板块了,你自己找下
页:
[1]