#include<iostream>
#include<cmath>
using namespace std;
#define N 3
long double a[N][N];
long double b[N];
long double eps;
long double x[N]; //声明系数矩阵,方程右侧值,相对误差分析,解的初始值
void GetData(); //获得数据
void Gauss_Seidel(); //高斯迭代
void Show(); //输出结果
int main()
{
cout<<"======================================="<<endl;
cout<<" gauss_seidel迭代法解方程组"<<endl;
cout<<"======================================="<<endl;
GetData();
Gauss_Seidel();
Show();
return 0;
}
void GetData()
{
for(int i=0;i<3;i++)
{
cout<<"系数矩阵第"<<i+1<<"行:";
for(int j=0;j<3;j++) cin>>a[i][j];
}
cout<<"方程右侧值:";
cin>>b[0]>>b[1]>>b[2];
cout<<"误差允许量:";
cin>>eps;
cout<<"解的初始值:";
cin>>x[0]>>x[1]>>x[2];
}
void Gauss_Seidel()
{
int flag;double xold,sum,error;
do
{
flag=0;
for(int i=0;i<3;i++)
{
xold=x[i];
sum=0.0;
for(int j=0;j<3;j++)
if(j!=i) sum+=a[i][j]*x[j];
x[i]=(b[i]-sum)/a[i][i];
error=fabs(xold-x[i])/x[i];
if(error>=eps) flag=1;
}
}while(flag==1);
}
void Show()
{
cout<<"结果是:"<<endl;
for(int i=0;i<3;i++)
cout<<"x"<<i+1<<" "<<x[i]<<endl;
}
你可以看看我的思路,但是这道题数字问题,在我的电脑上运行时总是过界,简单的数字还可以,不好意思
追问如果用crout分解法应该如何编写?