文档介绍:科学与工程计算
实验报告
学号: 姓名:
1004111202 王巧
l;
cin>>s;
for(k=1;; k++)
{
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
sum=a[i][j]*x0[j]+sum;
}
x[i]=x0[i]+((b[i]-sum)/a[i][i]);//雅克比迭代方法计算方式
c[i]=fabs(x[i]-x0[i]);//求差值的绝对值
x0[i]=x[i];
sum=0;
}
r=max(c);
if(r<s)//输出迭代次数
{
for(i=0; i<n; i++)
cout<<"x"<<i<<" = "<<x[i]<<setprecision(10)<<endl;
cout<<"迭代次数:"<<k<<endl;
return 0;
}
}
return 0;
}
GS迭代法
#include<iostream>
#include<>
#include <iomanip>
#include <>
using namespace std;
int n;
double max(double array[100])//求最大值函数
{
double a=array[0];
inti;
for(i=1;i<n;i++)
{
if(a<array[i])
a=array[i];
}
return a;
}
main() {
double s=0;
double max(double array[100]);
double c[100]={};
double x[100]={};//第k+1次迭代结果,储存解数组
double x0[100]={};//初始向量
inti,k,j;
doubler,sum=0;
double a[100][100];
double b[100]= {};
cout<<"请输入维数:"<<endl;
cin>>n;
cout<<"输出a数组:"<<endl;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
a[i][j]=/(i+j+1);
printf("% ",a[i][j]);//矩阵中的数精确到六位
}
cout<<endl;
}
cout<<"输出b数组:"<<endl;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
b[i]+=a[i][j];//矩阵每行的和
}
cout<<b[i]<<" ";
}
cout<<endl;
cout<<"输入精度:"<<endl;
cin>>s;
for(k=1;;k++)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
sum=a[i][j]*x0[j]+sum;
}
x[i]=x0[i]+((b[i]-sum)/a[i][i]);//gs迭代方法计算方式
c[i]=fabs(x[i]-x0[i]);//求差值的绝对值
x0[i]=x[i];
sum=0;
}
r=max(c);
if(r<s)//输出迭代次数
{for(i=0;i<n;i++)
cout<<"x"<<i<<" = "<<x[i]<<setprecision(10)<<endl;
cout<<"迭代次数:"<<k<<endl;
return 0;
}
}
}
SOR迭代法
#include<iostream>
#include<>
#include <iomanip>
#include <>
using namespace std;
int n;
double max(double array[100])
{
double a=array[0];
inti;
for(i=1;i<n;i++)