关于 数据形式与处理入门 的 迭代法解线性方程
计蒜客吧
全部回复
仅看楼主
level 1
JK絶埨 楼主
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main() {
double A[3][3];
double b[3];
for(int i=0;i<3;i++) {
cin>>A[i][0]>>A[i][1]>>A[i][2]>>b[i];
}
double x[3] = {0}; //第k+1次迭代的结果
double xx[3] = {0}; //第k次迭代的结果
int size = 3;
int Max = 10000000; //最大迭代次数
double residual = 0.0; //
double sum = 0.0;
double dis = 0.0;
double dif = 1.0; //相邻迭代的结果差
double eps = 1.0e-100; //迭代精度
for(int k=1;(k<Max)&&(dif>eps);k++) {
dif = 0.0;
for(int i=0;i<size;i++) {
for(int j=0;j<size;j++) {
if(i!=j) {
sum +=A[i][j]*xx[j];
}
}
x[i] = (b[i]-sum)/A[i][i];
sum = 0.0;
}
residual=0.0;
//计算相邻迭代的结果差
for(int m=0;m<size;m++) {
dis=fabs(x[m]-xx[m]);
if(dis>residual)
residual=dis;
}
dif=residual;
//打印第k次的结果
for(int i=0;i<size;i++)
{
xx[i]=x[i];
}
}
for(int k=0;k<size;k++)
{
printf("%12.7f ",xx[k]);
if(k<2)
printf("\n");
}
return 0;
}
测试的时候可以通过,但是提交有问题,麻烦看一下
2016年07月21日 16点07分 1
1