
#include <iostream>
#include <stdio.h>
#define N 3
double A[N][N] = {
{ 1.0, 2.0, 8.0 },
{ 4.0, 3.0, 2.0 },
{ 1.0, 4.0, 2.0 },
};
double b[N] = { 4.0, 12.0, 4.0 };
#define N 3
void solve(double A[N][N], double b[N]) {
}
int main() {
//(2)-(1)* A[0][0] / A[0][0]
A[1][1] = A[1][1] - A[0][1] * A[1][0] / A[0][0];
printf("過程の計算でのA[1][1]は%f\n", A[1][1]);
A[1][2] = A[1][2] - A[0][2] * A[1][0] / A[0][0];
printf("過程の計算でのA[1][2]は%f\n", A[1][2]);
b[1] = b[1] - b[0] * A[1][0] / A[0][0];
printf("過程の計算でのb[1]は%f\n", b[1]);
//(3)-(1) * A[2][0] / A[0][0]
A[2][1] = A[2][1] - A[0][1] * A[2][0] / A[0][0];
printf("過程の計算でのA[2][1]は%f\n", A[2][1]);
A[2][2] = A[2][2] - A[0][2] * A[2][0] / A[0][0];
printf("過程の計算でのA[2][2]は%f\n", A[2][2]);
b[2] = b[2] - b[0] * A[2][0] / A[0][0];
printf("過程の計算でのb[2]は%f\n", b[2]);
//(3)'-(2)' * A[2][1] / A[1][1]
A[2][2] = A[2][2] - A[1][2] * A[2][1] / A[1][1];
printf("過程の計算でのA[2][2]は%f\n", A[2][2]);
b[2] = b[2] - b[1] * A[2][1] / A[1][1];
printf("過程の計算でのb[2]は%f\n", b[2]);
//変数x2の係数が1の時のb[2]に入る数字が変数x2の解となるため。
b[2] = b[2] / A[2][2];
printf("b[2]は%f\n", b[2]);
//変数x1の係数が1の時のb[1]に入る数字が変数x1の解となるため。
b[1] = (b[1] - A[1][2] * b[2]) / A[1][1];
printf("b[1]は%f\n", b[1]);
//変数x2の係数が1の時のb[2]に入る数字が変数x2の解となるため。
b[0] = (b[0] - A[0][2] * b[2] - A[0][1] * b[1]) / A[0][0];
printf("b[0]は%f\n", b[0]);
for (int k = 0; k < 3; k++) {
printf("b[%d]はb[%d] = %fである\n",k, k, b[k]);
}
return 0;
}
のプログラムは連立方程式を解くプログラムです。一から作りました。
以上のプログラムの
//(2)-(1)* A[0][0] / A[0][0]
A[1][1] = A[1][1] - A[0][1] * A[1][0] / A[0][0];
printf("過程の計算でのA[1][1]は%f\n", A[1][1]);
A[1][2] = A[1][2] - A[0][2] * A[1][0] / A[0][0];
printf("過程の計算でのA[1][2]は%f\n", A[1][2]);
b[1] = b[1] - b[0] * A[1][0] / A[0][0];
printf("過程の計算でのb[1]は%f\n", b[1]);
//(3)-(1) * A[2][0] / A[0][0]
A[2][1] = A[2][1] - A[0][1] * A[2][0] / A[0][0];
printf("過程の計算でのA[2][1]は%f\n", A[2][1]);
A[2][2] = A[2][2] - A[0][2] * A[2][0] / A[0][0];
printf("過程の計算でのA[2][2]は%f\n", A[2][2]);
b[2] = b[2] - b[0] * A[2][0] / A[0][0];
printf("過程の計算でのb[2]は%f\n", b[2]);
//(3)'-(2)' * A[2][1] / A[1][1]
A[2][2] = A[2][2] - A[1][2] * A[2][1] / A[1][1];
printf("過程の計算でのA[2][2]は%f\n", A[2][2]);
b[2] = b[2] - b[1] * A[2][1] / A[1][1];
printf("過程の計算でのb[2]は%f\n", b[2]);
の部分をfor文を用いて改良してNの数字が変数であっても解が導けるように改良したいのですが、どうすれば良いでしょうか?
No.2
- 回答日時:
>改良したいのですが、どうすれば良いでしょうか?
ここで質問せずに、
プログラミングやアルゴリズムの勉強をする
でしょうか。
勉強も、
人に聞いて答えを出す
のではなく
自分で考えて、プログラミングして、コンピュータに入力してエラーメッセージをたくさん出して、「なぜ動かない」「どこが悪いのだろう」と自問自答して何時間も何日も、何か月も何年も悩む
こと、お勧めします。
No.1
- 回答日時:
結局最初の質問に戻って
// 前進消去
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;
}
}
// 後退代入
for (i = N - 1; i >= 0; i--) {
d = a[i][N];
for (j = i + 1; j < N; j++)
d -= a[i][j] * a[j][N];
a[i][N] = d / a[i][i];
}
これを書き換えれば良いのです。
ひとつの行列として処理していたものを
行列+列べクトルとして処理を書き換えるだけ。
// 前進消去
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;
b[i] -= b[k]*d;
}
}
// 後退代入
for (i = N - 1; i >= 0; i--) {
d = b[i];
for (j = i + 1; j < N; j++)
d -= a[i][j] * b[j];
b[i] = d / a[i][i];
}
ピボッティングしてないから
実用性は無いことに注意。
この処理自体、Nが定数か変数かは
関係無い。配列a、bの作り方次第で
Nは可変にできます。
http://tondol.hatenablog.jp/entry/20090713/12474 …
配列a,bの作り方次第で可変出来るとは知りませんでした。
for文を使えば可変出来ると思っていました。
どうもありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SJIS→UTF-8の文字コード変換
-
Visual Sutdio 2017 でのC言語...
-
コンパイルエラーについて
-
C言語のプログラムについて
-
c言語で2000年以降カレンダーを...
-
C言語
-
UnixでC言語を学習中(初心者で...
-
printf で二進表示を行いたい。
-
小数点切捨て表示
-
unsigned int型について
-
16bitのパラレル送信がうまくい...
-
学校の課題で
-
4の倍数を論理演算で表す。。
-
defineで定数が置き換えられな...
-
strcmp
-
プログラミング教えてください
-
wsprintfの書式制御文字列につ...
-
縦の棒グラフ
-
Cプログラムについて
-
[緊急]bcc developerについての...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンパイルエラーについて
-
printf で二進表示を行いたい。
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
コマンドラインに出力した文字...
-
strcmp
-
cshの文字列操作(0埋め)
-
printfの出力内の文字をdefine...
-
テキストカーソル位置の取得
-
アドレスの比較について
-
コマンドプロンプトがすぐ消える
-
Visual Sutdio 2017 でのC言語...
-
defineで定数が置き換えられな...
-
10個出力で改行したいのですが...
-
ifなんですが
-
c言語で2000年以降カレンダーを...
-
WM_CLOSEで閉じれないウィンド...
-
%P と %X の違い
-
Cプログラムについて
-
三角形の判別
おすすめ情報