ガウスの消去法のプログラムのつくりかた
Posted: 2011年7月18日(月) 04:07
課題でこのようなものがでました。
1.課題で与えられたガウスの消去法のプログラムを完成し提出しなさい.
2.最終的にできあがる係数マトリックス tk[10][10]の内容を行1~3,列1~3の範囲でプリントアウトして,対角成分が1,左下の3角形の係数がゼロになっているか確認しなさい.なっていない場合はその理由を考察しなさい.
(なっていなくても間違いではないが,なぜ?)
とりあえず、解だけ出るプログラムを作ろうとしましたが、実行すると0が出てきてしまいます。どこが間違っているか教えてください。
また、実行結果に
0.0 0.0 0.0 0.0
0.0 1.0 3.0 14.0
0.0 0.0 1.0 3.0
0.0 0.0 0.0 1.0
このような表示がされるようになるのかも教えてください。
1.課題で与えられたガウスの消去法のプログラムを完成し提出しなさい.
2.最終的にできあがる係数マトリックス tk[10][10]の内容を行1~3,列1~3の範囲でプリントアウトして,対角成分が1,左下の3角形の係数がゼロになっているか確認しなさい.なっていない場合はその理由を考察しなさい.
(なっていなくても間違いではないが,なぜ?)
とりあえず、解だけ出るプログラムを作ろうとしましたが、実行すると0が出てきてしまいます。どこが間違っているか教えてください。
また、実行結果に
0.0 0.0 0.0 0.0
0.0 1.0 3.0 14.0
0.0 0.0 1.0 3.0
0.0 0.0 0.0 1.0
このような表示がされるようになるのかも教えてください。
#include "stdafx.h"
// 関数のプロトタイプ宣言
void decomp(void);
void solver(void);
// 係数マトリックス,右辺(グローバル変数,余裕を見て10の大きさ)
float tk[10][10], tf[10];
// 答えをストアする変数(グローバル変数)
float tu[10];
// 方程式サイズ
int nn=3;
//====メインプログラム====//
int _tmain(int argc, _TCHAR* argv[])
{
//係数マトリックス代入
tk[1][1]=2.0f; tk[1][2]=6.0f; tk[1][3]=23.0f;
tk[2][1]=3.0f; tk[2][2]=4.0f; tk[2][3]=27.0f;
tk[3][1]=4.0f; tk[3][2]=14.0f; tk[3][3]=60.0f;
// 右辺
tf[1]=34;
tf[2]=66;
tf[3]=68;
//連立方程式の呼び出し
decomp();
//後退代入
solver();
//結果の出力
int i;
for(i=1; i<=3; i++){
printf("%5.3f \n", tu[i]);
}
return 0;
}
void decomp(){
int i,j,k,n;
i=0;
j=0;
k=0;
n=1;
for( j = i+1; j < n; j++ ){
tk[i][j] /= tk[i][i];
}
tf[i] /= tk[i][i];
for( k = i+1; k < n; k++ ){
for( j = i+1; j < n; j++ ){
tk[k][j] -= tk[i][j] * tk[k][i];
}
tf[k] -= tf[i] * tk[k][i];
}
}
void solver(){
int i,j,n;
i=0;
j=0;
n=1;
for( i = n-1; i >= 0; i-- ){
for( j = i+1; j < n; j++ ){
tf[i] -= tk[i][j] * tf[j];
}
}
}