东北大学数值分析实验报告 下载本文

内容发布更新时间 : 2024/4/30 22:00:33星期一 下面是文章的全部内容请认真阅读。

cout<<\请输入最大偏差:\ cin>>e;

for(i=1;i<=n;i++) {

x[i]=0; y[i]=x[i]; } k=0;

while(k!=N) {

k++;

for(i=1;i<=n;i++) {

w=0;

for(j=1;j<=n;j++) {

if(j!=i)

w=w+a[i][j]*y[j]; }

y[i]=(b[i]-w)/double(a[i][i]); }

max=fabs(x[1]-y[1]); for(i=1;i<=n;i++) {

se=fabs(x[i]-y[i]); if(se>max) max=se; }

if(max

cout<

for(i=1;i<=n;i++)

cout<<\ break; }

for(i=1;i<=n;i++) {

x[i]=y[i]; } }

if(k==N)

cout<<\迭代失败!!\

choice=0; } }

3、三对角形线性方程组

?4?100000000??x1???14?10000000??x????2??0?14?1000000??x3?????00?14?100000???x4??000?14?10000??x5? ???? =

?0000?14?1000??x6??00000?14?100??x????7??000000?14?10??x8??0000000?14?1??x????9???00000000?14????x10??x= ( 2, 1, -3, 0, 1, -2, 3, 0, 1, -1 )

*T?7??5?????13???2???6??? ??12??14?????4??5??????5??3.SOR方法

#include #include #include #include

using namespace std; int main() {

int n;

cout<<\输入维数:\ cin>>n;

vector >va; vector vd;

cout<<\输入系数矩阵:\ for(int i=0;i

for(int j=0;j<=n;++j) { double dtemp; cin>>dtemp;

vd.push_back(dtemp); }

va.push_back(vd); vd.clear(); }

cout<<\输入初始解向量:\vector vtemp; for(int i=0;i>dtemp;

vd.push_back(dtemp); }

cout<<\输入精度:\double d; cin>>d;

cout<<\输入最大迭代次数:\int mcount; cin>>mcount;

cout<<\输入松弛因子:\double xd; cin>>xd;

vector >::iterator ia,iaend; ia=va.begin(); bool flag=true; int count=0; while(flag) {

double dmax=0.0;

vtemp.assign(vd.begin(),vd.end()); for(int i=0;i

for(int j=0;j

dtemp+=(*(ia+i))[j]*vd[j]; }

else if(j>=i) {

dtemp+=(*(ia+i))[j]*vtemp[j]; } }

dtemp=(*(ia+i))[n]-dtemp; vd[i]=xd*dtemp/(*(ia+i))[i]; vd[i]+=vtemp[i]; }

++count;

for(int i=0;i

if(dmax

if(dmax

cout<<\输出迭代次数: \

cout<

cout<<\输出迭代解:\ for(int i=0;i

cout<

cout<

flag=false; }

else if(count>mcount) {

cout<<\已达到最大迭代次数!\ cout<<\输出迭代解:\ for(int i=0;i

cout<

cout<

flag=false; } }

system(\ return 0; }

精度e=0.001 松弛因子w=0.8

四、程序运行结果讨论和分析:

迭代法即使不考虑计算过程中的舍入误差,迭代法也很难获得精确解。 采用SOR迭代法,不同的松弛因子,会影响迭代次数。

经过计算可知Gauss-Seidel方法比Jacobi方法计算量小,可是精确度底。SOR是