ページ 1 / 1
行列を三角化するプログラムで、うまくいきません。
Posted: 2010年12月02日(木) 16:11
by Ten
下のようなプログラムを作ったのですがうまくいきません、どこがおかしいのか教えてください。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i,j,k;
double x,y,r,p,b;
double martrix[3][4];
srand((unsigned)time(NULL));
for(i=0;i<=3;i++){
for(j=0;j<=4;j++)
x= rand()%21;
y= x/10 -1;
martrix[j]=y;
}
for(k=0;k<=3;k++){
for(j=0;j<=k;i++){
for(i=0;i<=3;i++){
r=martrix[k]/martrix[k][k];
p=martrix[j]/r*martrix[k][j];
b=martrix[3]/r*martrix[k][3];
martrix[j]=p;
martrix[3]=b;
}
}
}
return 0;
}
Re: 行列を三角化するプログラムで、うまくいきません。
Posted: 2010年12月02日(木) 16:23
by bitter_fox
コード:
srand((unsigned)time(NULL));
for(i=0;i<=3;i++)
{
for(j=0;j<=4;j++)
x= rand()%21;
y= x/10 -1;
martrix[i][j]=y;
}
問題点1:二重目のforが単文のforになっている。
問題点2:i<=3などにした場合、配列の範囲外を参照することになる。
以上の二つです。
それから、フォーラムルールに従った投稿を心がけてください、でないと解答がつかない場合がありますよ。
Re: 行列を三角化するプログラムで、うまくいきません。
Posted: 2010年12月02日(木) 21:38
by Ten
ありがとうございます。
それと、
for(k=0;k<=3;k++){
for(j=0;j<=k;i++){
for(i=0;i<=3;i++){
r=martrix[k]/martrix[k][k];
p=martrix[j]/r*martrix[k][j];
b=martrix[3]/r*martrix[k][3];
martrix[j]=p;
martrix[3]=b;
}
}
}
の部分もおかしいと思うのですが、そこはどうなのでしようか?
Re: 行列を三角化するプログラムで、うまくいきません。
Posted: 2010年12月02日(木) 21:46
by softya(ソフト屋)
マルチポストしていませんか?
http://detail.chiebukuro.yahoo.co.jp/qa ... 1351388313
規約違反ですので、フォーラムルールの再確認をお願いします。
相互リンクをすれば、規約上OKです。
Re: 行列を三角化するプログラムで、うまくいきません。
Posted: 2010年12月02日(木) 22:36
by パコネコ
ちなみに何を持って失敗となされたのでしょうか?
printfなどのプログラムの確認も最後に必要だと思うのですが…
コード:
for(k=0;k<3;k++){
for(i=0;i<4;i++){
printf("martrix[%d][%d]=%lf\t",k,i,martrixt[k][i]);
}
printf("\n");
}
例えばこんな感じ?
===
あれ?L(エル)が1(イチ)に見える・・・
Re: 行列を三角化するプログラムで、うまくいきません。
Posted: 2010年12月02日(木) 22:40
by パコネコ
ごめんなさい。
よく見たらバグありました。
コード:
for(k=0;k<=3;k++){
for(j=0;j<=k;i++){
for(i=0;i<=3;i++){
r=martrix[i][k]/martrix[k][k];
p=martrix[i][j]/r*martrix[k][j];
b=martrix[i][3]/r*martrix[k][3];
martrix[i][j]=p;
martrix[i][3]=b;
}
}
}
martrix[3][4]
に対して、iの値が最大いくつになったのかみてみればわかるかもしれません。
Re: 行列を三角化するプログラムで、うまくいきません。
Posted: 2010年12月03日(金) 13:33
by さかまき
for(j=0;j<=k;i++){
ここもね