高斯-塞德爾迭代法求解線性方程組解
阿新 • • 發佈:2018-12-16
高斯-塞德爾迭代法也是求解線性方程組解的一種方法,與雅可比不同之處在於,求解某個未知數的某代值時,直接使用上一未知數在該代的值。
C++程式碼如下:
#include<stdio.h> #include<math.h> using namespace std; float cha(float x[3], float y[3]){ float z; int i, n = 3; z = fabs(y[0] - x[0]); for (i = 0; i<n; i++){ if (fabs(y[i] - x[i])>z) z = fabs(y[i] - x[i]); } return z; } int main(){ int t, s, a[3][3] = { { 27, 6, -1 }, { 6, 15, 2 }, { 1, 1, 54 } }, i, j, k, n = 3, b[3] = { 85, 72, 110 }; float x[3] = { 0 }, y[3]; //y=x(i-1) k = 1; for (k = 1; k <= 30; k++){ for (i = 0; i<n; i++){ y[i] = x[i]; } for (i = 0; i<n; i++){ t = 0; for (j = 0; j<n; j++){ if (i != j){ t += a[i][j] * x[j]; } } x[i] = ((float)b[i] - t) / a[i][i]; } if (cha(x, y)<1e-6){ printf("%d\n", k); for (i = 0; i<n; i++){ printf("%f ", y[i]); } return 0; } } if (k>30) printf("發散"); return 0; }