そこでdo文用いたプログラムを作成したのですが上手くいきません。具体的にいうと試しにdo文を二回まわして得られるた答えと一回だけまわして得たベクトルrをもう一度読み込ませて再び一回だけまわした(これで理論的には二回まわしたのと同じだと思われます)答えが異なってしまいます。ちなみに一回ずつまわすと正しい答えが得られます。
長々と書いてしまいましたが要はdo文を用いて一気に処理しようとすると値がおかしくなってしまうのですがどんな原因が考えられるでしょうか?というのが質問内容です。プログラム全体は200行以上あるので全部は載せられないのですが、憶測、推測的なことで構わないので何卒アドバイスよろしくお願いします。
一応プログラムの一部(do文の部分)も載せておきます。
do{ for(i=1;i<=n;i++) v[1]=r/sqrt(innerproduct(1,n,r,r)); printf("%f\n",sqrt(innerproduct(1,n,r,r))); printf("v1="); for(i=1;i<=n;i++) printf("%f\t",v[1]); printf("\n"); printf("\n"); printf("%d\n",2); for(j=1;j<=k;j++) { mv(n,j,j,a,v,w); for(i=1;i<=j;i++){ h[j]=naiseki(n,i,j,v,w); for(l=1;l<=n;l++){ w[[/url][j]-=h[j]*v[[/url];}} h[j+1][j]=sqrt(naiseki(n,j,j,w,w)); if(h[j+1][j]==0) break; for(l=1;l<=n;l++)v[[/url][j+1]=w[[/url][j]/h[j+1][j]; printf("v%d=",j+1); for(l=1;l<=n;l++) printf("%f\t",v[[/url][j+1]); printf("\n");} printf("w=\n"); for(i=1;i<=n;i++){ for(j=1;j<=n;j++)printf("%f\t",a[j]); printf("\n"); } for(i=1;i<=k+1;i++){ for(j=1;j<=k;j++)if(i>j+1)h[j]=0; else if(i==j) h[j]=h[j]-1;} printf("HNEW=\n"); for(i=1;i<=k+1;i++){ for(j=1;j<=k;j++)printf("%f\t",h[i][j]); printf("\n"); } ==================================================================================================== 中略 この部分で新しくベクトルrを作ります ===================================================================================================== kaisu++; if(kaisu==2) break; }while(tokuiti>=eps);