#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;
}
线性方程组的迭代解法:超松弛迭代法
最新推荐文章于 2024-08-22 12:19:52 发布