數值分析中的高斯消元 c語言實現附帶註釋
阿新 • • 發佈:2018-12-11
#include <iostream> #include <cstdio> #include <cmath> using namespace std; double A[1010][1010]; double B[1010]; double l; int main() { int n; printf("請輸入矩陣的階數,如想要退出請按零:\n"); while(~scanf("%d",&n)) { if(n==0) return 0; printf("請按從上到下輸入矩陣:\n"); for(int i=1; i<=n; i++) //記錄原始矩陣A; { for(int j=1; j<=n; j++) { scanf("%lf",&A[i][j]); } } /* 由 i行 2 3 1 j行 2 5 6 變為 i行 2 3 1 j行 0 2 5 這一過程稱為 去除第j行i因子;其中消零因子為:2/2=1*/ for(int i=1; i<=n; i++) //記錄B; { scanf("%lf",&B[i]); } for(int i=1; i<n; i++) //高斯消元;從第一行到n-1行; { for(int j=i+1; j<=n; j++)//當前消得是第j行; { l=A[j][i]/A[i][i]; //計算消零因子; for(int k=i; k<=n; k++)//消除第j行每一個數的i因子; { A[j][k]-=l*A[i][k]; } B[j]-=l*B[i]; //對應的B也消去j行i因子 } } for(int i=n; i>=1; i--) //回代求X; { for(int j=n; j>i; j--) { B[i]-=A[i][j]*B[j]; } B[i]/=A[i][i]; } for(int i=1; i<=n; i++) //輸出X; { printf("%f\n",B[i]); } printf("請輸入矩陣的階數,如想要退出請按零:\n"); } return 0; }