aj6249 发表于 2005-4-24 22:33

(求助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&lt;n-2;++j)
{// 最开始的for 循环
       for(i=0;i&lt;n;++i)//初始化u[]全为零
     u=0.0;</P>
<P>
      sum=0.0;
   for(i=j+1;i&lt;n;++i)//实现a
      {
       k=i*n+j;
    sum+=a*a;
   }
      asum=sqrt(sum);</P>
<P>      for(i=j+1;i&lt;n;++i)
   {
   
    if(i==j+1)
     u=a+(a&gt;0 ? 1.0:-1.0)*asum;
    else
     u=a;
   }
      </P>
<P>
   sum=0.0;  //实现P
   for(i=0;i&lt;n;++i)
    sum+=(u*u);</P>
<P>   for(i=0;i&lt;n;++i)
   {for(k=0;k&lt;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&lt;n;i++) //实现最后的矩阵相乘
        for(v=0;v&lt;n;v++)
  {  c=0.0;
   for(k=0;k&lt;n;k++)
    c+=p*a;
  }</P>
<P>
     for(i=0;i&lt;n;i++)
   for(v=0;v&lt;n;v++)
   {
    a=0.0;
    for(k=0;k&lt;n;k++)
     a+=c*p;
   }</P>
<P>
}//最开始的for的结束的大括号
return;
  }</P>

<P>自己写的运行总是错误</P>

水木年华zzu 发表于 2009-1-20 23:24

我已经把源代码发在计算数学板块了,你自己找下
页: [1]
查看完整版本: (求助C语言实现Householder变换一般实矩阵为上Hessenberg矩阵的算法)