#include <stdio.h>
//_連立方程式に表示
void printEqs(
double a[3][3], //_係数行列
double b[3]) //_右辺ベクトル
{
int i,j;
printf("(a)[3][3],{b}[3])\n"); for( i=0;i<3;i++ ) {
for( j=0;j<3;j++ ) {
}
}
//_3元1次連立方程式のガウス消去
int gausselim(
double a[3][3], //_係数行列
double b[3]) //_右辺ベクトル→解
{
double Akk; //_ピボット要素の保存値
double Aik; //_ピボット列要素の保存値
int k; //_ピボットインデクス
int i; //_行インデクス
int j; //_列インデクス
int n=3; //_方程式の数
//_前進消去(k)
for( k=0;k<n;k++ ) {
Akk = a[k][k];
//_デバッグ表示開始
printEqs(a,b);
printf("pivot=a[%d][%d]=%f\n",k
,k
,Akk
); //_デバッグ表示終了
if( Akk == 0 ) return -1;
//_ピボット行正規化
for( j=k;j<n;j++ ) a[k][j] /= Akk;
b[k] /= Akk;
//_非ピボット行消去
for( i=k+1;i<n;i++ ) {
Aik = a[i][k];
for( j=k;j<n;j++ ) {
a[i][j] -= Aik*a[k][j];
} b[i] -= Aik*b[k];
}
}
//_後退代入(i)
for( i=n-2;i>=0;i-- ) {
for( j=i+1;j<n;j++ ) {
b[i] -= a[i][j]*b[j];
}
}
return 0;
}
/*
3x+1y+1z=8
6x+2y+3z=4
9x+4y+5z=12
を解く。
*/
int main(){
double a[3][3]={{3.,1.,1.},{6.,2.,3.},{9.,4.,5.}};
double b[3]={8.,4.,12.};
int ret;
ret = gausselim(a,b);
if(ret==0) {
printf("{x}=%f,%f,%f\n",b
[0],b
[1],b
[2]); } else {
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovL1/pgKPnq4vmlrnnqIvlvI/jgavooajnpLoKdm9pZCBwcmludEVxcygKICBkb3VibGUgIGFbM11bM10sICAvL1/kv4LmlbDooYzliJcKICBkb3VibGUgIGJbM10pICAgICAvL1/lj7Povrrjg5njgq/jg4jjg6sKewogIGludCBpLGo7CiAgcHJpbnRmKCIoYSlbM11bM10se2J9WzNdKVxuIik7CiAgZm9yKCBpPTA7aTwzO2krKyApIHsKICAgIGZvciggaj0wO2o8MztqKysgKSB7CiAgICAgIHByaW50ZigiXyU5ZiIsYVtpXVtqXSk7CiAgICB9IHByaW50ZigiXyU5ZlxuIixiW2ldKTsKICB9Cn0KCi8vX++8k+WFg++8keasoemAo+eri+aWueeoi+W8j+OBruOCrOOCpuOCuea2iOWOuwppbnQgZ2F1c3NlbGltKAogIGRvdWJsZSAgYVszXVszXSwgIC8vX+S/guaVsOihjOWIlwogIGRvdWJsZSAgYlszXSkgICAgIC8vX+WPs+i+uuODmeOCr+ODiOODq+KGkuinowp7CiAgZG91YmxlICBBa2s7ICAgICAgLy9f44OU44Oc44OD44OI6KaB57Sg44Gu5L+d5a2Y5YCkCiAgZG91YmxlICBBaWs7ICAgICAgLy9f44OU44Oc44OD44OI5YiX6KaB57Sg44Gu5L+d5a2Y5YCkCiAgaW50ICAgICBrOyAgICAgICAgLy9f44OU44Oc44OD44OI44Kk44Oz44OH44Kv44K5CiAgaW50ICAgICBpOyAgICAgICAgLy9f6KGM44Kk44Oz44OH44Kv44K5CiAgaW50ICAgICBqOyAgICAgICAgLy9f5YiX44Kk44Oz44OH44Kv44K5CiAgaW50ICAgICBuPTM7ICAgICAgLy9f5pa556iL5byP44Gu5pWwCgogIC8vX+WJjemAsua2iOWOuyhrKQogIGZvciggaz0wO2s8bjtrKysgKSB7CiAgCUFrayA9IGFba11ba107CiAgICAvL1/jg4fjg5Djg4PjgrDooajnpLrplovlp4sKICAgIHByaW50Zigi44OU44Oc44OD44OIKGsgPSAlZClcbiIsayk7CiAgICBwcmludEVxcyhhLGIpOwogICAgcHJpbnRmKCJwaXZvdD1hWyVkXVslZF09JWZcbiIsayxrLEFrayk7CiAgICAvL1/jg4fjg5Djg4PjgrDooajnpLrntYLkuoYKICAgIGlmKCBBa2sgPT0gMCApIHJldHVybiAtMTsKICAgIC8vX+ODlOODnOODg+ODiOihjOato+imj+WMlgogICAgZm9yKCBqPWs7ajxuO2orKyApIGFba11bal0gLz0gQWtrOwogICAgYltrXSAvPSBBa2s7CiAgICAvL1/pnZ7jg5Tjg5zjg4Pjg4jooYzmtojljrsKICAgIGZvciggaT1rKzE7aTxuO2krKyApIHsKICAgICAgQWlrID0gYVtpXVtrXTsKICAgICAgZm9yKCBqPWs7ajxuO2orKyApIHsKICAgICAgICBhW2ldW2pdIC09IEFpayphW2tdW2pdOwogICAgICB9IGJbaV0gLT0gQWlrKmJba107CiAgICB9CiAgfQogIC8vX+W+jOmAgOS7o+WFpShpKQogIGZvciggaT1uLTI7aT49MDtpLS0gKSB7CiAgICBmb3IoIGo9aSsxO2o8bjtqKysgKSB7CiAgICAgIGJbaV0gLT0gYVtpXVtqXSpiW2pdOwogICAgfQogIH0KICByZXR1cm4gMDsKfQovKgozeCsxeSsxej04CjZ4KzJ5KzN6PTQKOXgrNHkrNXo9MTIK44KS6Kej44GP44CCCiovCmludCBtYWluKCl7CiAgZG91YmxlICBhWzNdWzNdPXt7My4sMS4sMS59LHs2LiwyLiwzLn0sezkuLDQuLDUufX07CiAgZG91YmxlICBiWzNdPXs4Liw0LiwxMi59OwogIGludCAgICAgcmV0OwogIHJldCA9IGdhdXNzZWxpbShhLGIpOwogIGlmKHJldD09MCkgewogICAgIHByaW50Zigie3h9PSVmLCVmLCVmXG4iLGJbMF0sYlsxXSxiWzJdKTsKICB9IGVsc2UgewogICAgcHJpbnRmKCLjg5Tjg5zjg4Pjg4jjgYzjgrzjg63vvIHjgIHkuK3mraJcbiIpOwogICAgcHJpbnRmKCJyZXQgPSAlZFxuIixyZXQpOwogIH0KICByZXR1cm4gMDsKfQ==