こちらのプログラム
/*********************************************
* 連立方程式の解法 ( ガウスの消去法 )
*********************************************/
#include <iostream> // for cout
#include <stdio.h> // for printf()
// 元の数定義
#define N 4 // 3
using namespace std;
/*
* 計算クラス
*/
class Calc
{
double a[N][N + 1];
// 各種変数
double d; // ダミー
int i, j, k; // LOOP インデックス
public:
// 連立方程式を解く(ガウスの消去法)
void calcGaussElimination();
};
/*
* 連立方程式を解く(ガウスの消去法)
*/
void Calc::calcGaussElimination()
{
// 係数
static double a[N][N + 1] = {
//{ 2.0, -3.0, 1.0, 5.0},
//{ 1.0, 1.0, -1.0, 2.0},
//{ 3.0, 5.0, -7.0, 0.0}
{ 1.0, -2.0, 3.0, -4.0, 5.0 },
{ -2.0, 5.0, 8.0, -3.0, 9.0 },
{ 5.0, 4.0, 7.0, 1.0, -1.0 },
{ 9.0, 7.0, 3.0, 5.0, 4.0 }
};
// 元の連立方程式をコンソール出力
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
printf("%+fx%d ", a[i][j], j + 1);
printf("= %+fです\n", a[i][N]);
}
// 前進消去
for (k = 0; k < N - 1; k++) {
for (i = k + 1; i < N; i++) {
d = a[i][k] / a[k][k];
for (j = k + 1; j <= N; j++)
a[i][j] -= a[k][j] * d;
printf("%f=a[%d][%d] /a[%d][%d]である\n ", d,i,k,k,k);
printf("[k]=%dである\n", k);
printf("a[%d][%d]=a[%d][%d]-a[%d][%d]*%lfである\n", i, j, i, j, k, j, d);
}
}
// 後退代入
for (i = N - 1; i >= 0; i--) {
d = a[i][N];
printf("%f = a[%d][%d]となる\n", d, i, N);
for (j = i + 1; j < N; j++)
d -= a[i][j] * a[j][N];
printf("%f -= a[%d][%d] * a[%d][%d]となる\n", d, i,j,j, N);
a[i][N] = d / a[i][i];
printf("a[%d][%d] = %f / a[%d][%d]となる\n", i, N,d,i,i);
}
// 結果出力
for (k = 0; k < N; k++)
printf("x%d = %f\n", k + 1, a[k][N]);
}
/*
* メイン処理
*/
int main()
{
try
{
// 計算クラスインスタンス化
Calc objCalc;
// 連立方程式を解く(ガウスの消去法)
objCalc.calcGaussElimination();
}
catch (...) {
cout << "例外発生!" << endl;
return -1;
}
// 正常終了
return 0;
}
をprintf関数を用いてどのような過程の計算をしているのかを表示しました。
しかし、見れたのは良かったのですが、何をやっているのか正しく整理できませんでした。
以下が結果なのですが、以下の行列での計算過程をわかりやすく行列の計算過程と書いていただけないでしょうか?
どうかよろしくお願いいたします。
+1.000000x1 -2.000000x2 +3.000000x3 -4.000000x4 = +5.000000です
-2.000000x1 +5.000000x2 +8.000000x3 -3.000000x4 = +9.000000です
+5.000000x1 +4.000000x2 +7.000000x3 +1.000000x4 = -1.000000です
+9.000000x1 +7.000000x2 +3.000000x3 +5.000000x4 = +4.000000です
-2.000000=a[1][0] /a[0][0]である
[k]=0である
a[1][5]=a[1][5]-a[0][5]*-2.000000である
5.000000=a[2][0] /a[0][0]である
[k]=0である
a[2][5]=a[2][5]-a[0][5]*5.000000である
9.000000=a[3][0] /a[0][0]である
[k]=0である
a[3][5]=a[3][5]-a[0][5]*9.000000である
14.000000=a[2][1] /a[1][1]である
[k]=1である
a[2][5]=a[2][5]-a[1][5]*14.000000である
25.000000=a[3][1] /a[1][1]である
[k]=1である
a[3][5]=a[3][5]-a[1][5]*25.000000である
1.833333=a[3][2] /a[2][2]である
[k]=2である
a[3][5]=a[3][5]-a[2][5]*1.833333である
19.333333 = a[3][4]となる
19.333333 -= a[3][4] * a[4][4]となる
a[3][4] = 19.333333 / a[3][3]となる
-292.000000 = a[2][4]となる
408.000000 -= a[2][4] * a[4][4]となる
a[2][4] = 408.000000 / a[2][2]となる
19.000000 = a[1][4]となる
3.000000 -= a[1][4] * a[4][4]となる
a[1][4] = 3.000000 / a[1][1]となる
5.000000 = a[0][4]となる
1.000000 -= a[0][4] * a[4][4]となる
a[0][4] = 1.000000 / a[0][0]となる
x1 = 1.000000
x2 = 3.000000
x3 = -2.000000
x4 = -4.000000
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
eのマイナス無限大乗
-
分数の計算で分子が0になったら...
-
映画を1.3倍速で見た時の時間計...
-
1/6n(n+1)(2n+1)+1/2n(n+1) の...
-
30パーセントオフで371円だった...
-
「割る」と「割りかえす」の違い
-
積分のエクセル計算式を教えて...
-
普及率の計算方法について
-
二項定理の応用計算について。
-
ポパイの計算って?
-
中学生の数学を習う順番に並べ...
-
(x^2-x+1)^10の展開式におけるx...
-
2の12乗、32乗・・・とい...
-
10進法で時間の計算で30分が0.5...
-
プール計算って何ですか?
-
二分探索木のパターン数
-
一個当たり15秒の製品を1時間で...
-
公共工事の現場管理費率(%)...
-
洗剤の価格がわかりません。
-
簡単な計算方法を教えてください
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
30パーセントオフで371円だった...
-
公共工事の現場管理費率(%)...
-
「割る」と「割りかえす」の違い
-
eのマイナス無限大乗
-
中学生の数学を習う順番に並べ...
-
10進法で時間の計算で30分が0.5...
-
楕円の円周の長さの計算の仕方...
-
計算手順について
-
袋のサイズから容量を計算する方法
-
面積から辺の長さを出す計算式
-
2割負担の計算。
-
プール計算って何ですか?
-
一個当たり15秒の製品を1時間で...
-
金利の計算方法を教えてくださ...
-
クリストッフェル記号
-
分数の計算で分子が0になったら...
-
ラプラス変換に関して
-
半径の計算方法を教えてください。
-
映画を1.3倍速で見た時の時間計...
-
積分のエクセル計算式を教えて...
おすすめ情報