ガウスの消去法を用いたC言語のプログラムについて
現在あらかじめ与えられた連立方程式をガウスの消去法を用いて、
求めるというプログラムをC言語で作っています。
しかし学校ではまだ行列のやっておらず、
ガウスの消去法についても説明があやふやでした。
一応プログラムは出来たのですが明らかに無駄が多すぎて困っています。
与えられた方程式は下記の通りです。
2x + 3y + 4z = 20
3x - 2y + 5z = 14
5x + 4y - 7z = -8
プログラムは以下の通りです。
#include <stdio.h>
int main(void){
double a[3][3] = {{2, 3, 4}, //(1)
{3, -2, 5}, //(2)
{5, 4, -7}}; //(3)
double b[3] = {20, 14, -8};
double x = 0;
double y = 0;
double z = 0;
int i;
//前進消去
//(1)÷2 ・・・(1)'
for(i = 0; i < 3; i++){
a[0][i] = a[0][i] / 2;
}
b[0] = b[0] / 2;
//(2)-(1)'×3 ・・・(2)'
for(i = 0; i < 3; i++){
a[1][i] = a[1][i] - a[0][i] * 3;
}
b[1] = b[1] - b[0] * 3;
//(3)-(1)'×5 ・・・(3)'
for(i = 0; i < 3; i++){
a[2][i] = a[2][i] - a[0][i] * 5;
}
b[2] = b[1] - b[0] * 5;
//(2)'÷6.5 ・・・(2)''
for(i = 0; i < 3; i++){
a[1][i] = a[1][i] / 6.5;
}
b[1] = b[1] / 6.5;
//(2)''×3.5 + (3) ・・・(3)''
for(i = 0; i < 3; i++){
a[2][i] = a[2][i] + a[1][i] * 3.5;
}
b[2] = b[2] + b[1] * 3.5;
//(3)''÷3.53846でzを求める
z = b[2] / a[2][1];
//後退代入
//(2)''にzを代入してyを求める
a[1][1] = a[1][1] * z;
y = b[1] - a[1][1];
//(1)'にyとzを代入してxを求める
a[0][1] = a[0][1] * y;
a[0][2] = a[0][2] * z;
x = b[0] - a[0][1] - a[0][2];
printf("\n x = %f \n y = %f \n z = %f \n", x, y, z);
return 0;
}
制作はvc++を用いています。
ここからどうやって短くしていけばよいかがわかりせん。
アドバイスや指摘があればお願いいたします。
補足
何もひらめきません。 手詰まりました。 何かヒントください