プロが教えるわが家の防犯対策術!

for (i = N - 1; i >= 0; i--) {
a[i][N] = a[i][N] / a[i][i]; //d = a[2][3] / a[2][2]
for (j = i + 1; j < N; j++)
a[i][N] = a[i][N] - a[i][j] * a[i][N] / a[i][i];
のi=1,N=3,j=2の時、計算結果が-6.6666...となるのですが、
答えでは-0.444444となります。
d=a[1][3]/a[1][1]によりd=4とでます。
4-a[1][2]*a[1][3]/a[1][1]により-20/3= -6.6666...とでました。
計算過程のどこが間違ったのでしょうか?
載せて頂きました画像のように式が出来ると思うのですが、合っているでしょうか?

また、計算結果が出るまでの過程が知りたいので配列に実数をいれて解説していただけないでしょうか?

全体のプログラムは以下の通りです。
#include <iostream>
#include <stdio.h>

// 元の数定義
#define N 3 // 3

using namespace std;

//double a[N][N+1];
// 係数
static double a[N][N + 1] = {
{ 1.0, 2.0, 8.0, 4.0},
{ 4.0, 3.0, 2.0, 12.0},
{ 1.0, 4.0, 2.0, 4.0},
};


int main()
{
double d;
int i;
int j;

for (i = N - 1; i >= 0; i--) {

d = a[i][N] / a[i][i]; //d = a[2][3] / a[2][2]
for (j = i + 1; j < N; j++)
a[i][N] = d - a[i][j] * a[i][N] / a[i][i];
printf("%f\n", a[i][N]);

}



for (i = N - 1; i >= 0; i--) {

a[i][N] = a[i][N] / a[i][i]; //d = a[2][3] / a[2][2]
for (j = i + 1; j < N; j++)
a[i][N] = a[i][N] - a[i][j] * a[i][N] / a[i][i];
printf("%f\n", a[i][N]);

}

return 0;
}

実行結果
4.000000
-4.000000
36.000000
2.000000
-0.444444
252.000000

i=1,N=3,j=2の時、計算結果が-6.6666...となるのですが、
答えでは-0.444444となります。
d=a[1][3]/a[1][1]によりd=4とでます。
4-a[1][2]*a[1][3]/a[1][1]により-20/3= -6.6666...とでました。と書きましたが、誤りがありました。
4-(24/3)より4-8=-4となりますが、実際の答えは-0.444444と出てきました。
プログラムの過程の処理が理解できていないのだと思います。

「for (i = N - 1; i >=」の質問画像

A 回答 (3件)

4行目。

一ヶ所jがiに変わってます。
今までのあなたの質問と見比べましょう。
    • good
    • 0

しかし、上三角化(前進消去)無しで、


後退代入らしき処理が2回って・・・

質問する前にプログラムを整理した方が
良いでしょう。
    • good
    • 0

>a[i][N] = a[i][N] - a[i][j] * a[i][N] / a[i][i];


a[i][N] = a[i][N] - a[i][j] * a[j][N] / a[i][i];
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!