高斯列選主元素消元法
阿新 • • 發佈:2018-12-17
程式碼實現
// // main.cpp // 列選主元素消元法 // // Created by 劉國棟 on 2018/10/16. // Copyright © 2018年 LGD. All rights reserved. // #include <iostream> #include <math.h> #include<iomanip> using namespace std; const int n = 3; void gaussin(double A[n][n], double B[n]) { int i = 0, j = 0, k = 0; int r = 0; //儲存交換的行變數 for(k = 0; k < n - 1; k++) //第k次消元 { for( i = k + 1; i < n; i++) //尋找最大行 { r = k; if(fabs(A[i][k]) > fabs(A[r][k])) r = i; } if(r != k && A[r][k] != 0) //交換行資料 { double temp; for(i = 0; i < n; i++) { temp = A[k][i]; A[k][i] = A[r][i]; A[r][i] = temp; } temp = B[k]; B[k] = B[r]; B[r] = temp; } for(i = k + 1; i < n; i++) //消元過程 { A[i][k] = A[i][k] / A[k][k]; } for(i = k + 1; i < n; i++) for(j = k + 1; j < n; j++) A[i][j] = A[i][j] - A[i][k] * A[k][j]; for(i = k + 1; i < n; i++) B[i] = B[i] - A[i][k] * B[k]; } //解的儲存陣列 double x[n]; //先計算出最後一個未知數; x[n - 1] = B[n - 1] / A[n - 1][n - 1]; //求出每個未知數的值 for (i = n - 2; i >= 0; i--) { double sum = 0; for (j = i + 1; j < n; j++) { sum += A[i][j] * x[j]; } x[i] = (B[i] - sum) / A[i][i]; } cout << " the solution of the equations is:" << endl; cout << endl; for (i = 0; i < n; i++) { cout<< fixed << setprecision(15); cout <<"x"<<i+1<<"="<< x[i] << endl; } } int main(int argc, const char * argv[]) { double A[3][3] = { {4, -2, 4}, {-2, 17, 10}, {-4, 10, 9} }; double B[3] = { 10, 3, 7}; gaussin(A, B); return 0; }