連立方程式を解く
ガウス・ジョルダン法
①式を で割り, の係数を 1 にして, 式を作ります。
②式から 式を 倍したものを引き, 式を作ります。
③式から 式を 倍したものを引き, 式を作ります。
式を で割り, の係数を 1 にして, 式を作ります。
式から 式を 倍したものを引き, 式を作ります。
式から 式を 倍したものを引き, 式を作ります。
式を で割ります。
式を × で引きます。
式を × で引きます。
プログラム
#include <iostream> #include <iomanip> using namespace std; #define N 3 /* 元 */ int main(){ static double a[N][N+1] = { /* 係数行列 */ {1.0 ,2.0 ,3.0 ,2.0 }, {2.0 ,2.0 ,3.0 ,1.0}, {2.0 ,2.0 ,1.0 ,-1.0 } }; double p,d; int i,j,k; for (k=0;k<N;k++){ p=a[k][k]; /* ピボット係数 */ for (j=k;j<N+1;j++) /* ピボット行をpで除算 */ a[k][j]=a[k][j]/p; for (i=0;i<N;i++){ /* ピボット列の掃き出し */ if (i!=k){ d = a[i][k]; for (j=k;j<N+1;j++) a[i][j] = a[i][j] -d*a[k][j]; } } } for(k=0;k<N;k++) cout << "x" << k+1 << "=" << a[k][N] << endl; return 0; }
実行結果
x1=-1 x2=0 x3=1