教えてください
Posted: 2011年7月21日(木) 01:15
ガウスの消去法のプログラミングをつくりました。
実行結果に
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
このような表示をするには、どのようにすればよいですか?
間違っているところや直すとよくなるなどアドバイスなどありましたらお願いします。
また、数値解析の方法でやろうと思いましたが、うまくいきませんでした。
この方法の場合は、下記のプログラムとどのように違ってくるんでしょうか?
実行結果に
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]={0}, tf[10]={0};
// 答えをストアする変数(グローバル変数)
float tu[10]={0};
// 方程式サイズ
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();
int i,j;
for(i=1; i<=3; i++){
for(j=1;j<=3;j++){
printf("%5.3f \n", tk[i][j]);
}
}
//後退代入
solver();
//結果の出力
//int i,j;
for(i=1; i<=3; i++){
for(j=1;j<=3;j++){
printf("%5.3f \n", tk[i][j]);
}
}
for(i=1; i<=3; i++){
printf("%5.3f \n", tu[i]);
}
return 0;
}
void decomp(void){
int i,j,k;
float sum1,sum2;
for(i=1;i<=nn;i++){
sum1=tk[i][i];
tf[i]=tf[i]/sum1;
for(j=1;j<=nn;j++){
tk[i][j]=tk[i][j]/sum1;
}
for(j=i+1;j<=nn;j++){
sum2=tk[j][i];
tf[j]=tf[j]-tf[i]*sum2;
for(k=1;k<=nn;k++){
tk[j][k]=tk[j][k]-tk[i][k]*sum2;
}
}
}
}
void solver(void){
int i,j,k;
float sum;
for(i=1;i<=nn;i++){
for(j=i-1;j>=1;j--){
sum=tk[j][i];
tf[j]=tf[j]-tf[i]*sum;
for(k=0;k<=nn;k++){
tk[j][k]=tk[j][k]-tk[i][k]*sum;
}
}
}
for(i=1;i<=nn;i++){
tu[i]=tf[i];
}
}