線性方程組的迭代解法:超鬆弛迭代法
阿新 • • 發佈:2019-02-02
#include <iostream> #include <time.h> #include <cmath> #include <stdio.h> using namespace std; double max(double x[],int n) { double max_=abs(x[0]); for(int i=1;i<n;i++) if(abs(x[i])>max_) max_=abs(x[i]); return max_; } int main() { double a[4][4]={{5,1,-1,-2}, {2,8,1,3}, {1,-2,-4,-1}, {-1,3,2,7}}; double b[4]={-2,-6,6,12},x[4]={1,1,1,1},diff[4],s,w=1.15;//取鬆弛因子為1.15 int i,j,count=1; do { for(i=0;i<4;i++) { s=0; for(j=0;j<4;j++) s=s+a[i][j]*x[j]; diff[i]=w*(b[i]-s)/a[i][i]; x[i]+=diff[i]; } printf("%-3d: ",count++); for(i=0;i<4;i++) printf("%-10lf ",x[i]); cout<<endl; }while(max(diff,4)>10e-6); return 0; }