求逐次超松弛迭代法(SOR)的C++程序 #include<;iostream.h>;#include<;math.h>;#include<;iomanip.h>;Void main(){double u1[5][5],u2[5][5];int flag=1000,i,j,e,n;double a,d;a最佳加速收敛因子for(i=0;i;i+)for(j=0;j;j+){if(i=0)u1[i][j]=100;else u1[i][j]=0;}cout迭代前各电位点上的初始值:\";for(i=0;i;i+){for(j=0;j;j+){cout[i][j];输出迭代初值}cout;}cout;for(d=1;d;d+0.01)/找取迭代次数最少的加速收敛因子 {n=0;for(j=0;j;j+){u1[0][j]=100;}for(i=1;i;i+)for(j=0;j;j+){u1[i][j]=0;}do/迭代x次 {for(i=0;i;i+){for(j=0;j;j+){u2[i][j]=u1[i][j];}}for(i=1;i;i+)for(j=1;j;j+){u1[i][j]=u2[i][j]+(d/4)*(u2[i+1][j]+u2[i][j+1]+u1[i-1][j]+u1[i][j-1]-4*u2[i][j]);} for(i=1;i;i+)/判断精度 {{for(j=1;j;j+){if(fabs(u1[i][j]-u2[i][j])>;1e-5){e=1;break;}else e=0;}if(e=1)break;}} n+;迭代次数}while(e);if(n){flag=n;a=d;}}cout收敛因子:\";cout;cout迭代次数:\";cout;cout各节点上最终电位近似值:\";for(i=0;i;i+){for(j=0;j;j+){cout(ios:fixed)(5)(8)[i][j];对齐输出} cout;}cout;}
在matlab中分别用雅可比迭代法、高斯-塞德尔迭代法和超松弛迭代法求解给定的线性方程组 亲,你找到答案了告诉我一下哈!谢啦!同为经济学院统数专业的伤不起啊!
超松弛迭代法用matlab function[x,n]=SOR(A,b,x0,w,eps,M)if nargin=4eps=1.0e-6;M=200;elseif narginerrorreturnelseif nargin=5M=200;endif(w|w>;=2)error;return;endD=diag(diag(A));求A的对角矩阵L=-tril(A,-1);求A的下三角阵U=-triu(A,1);求A的上三角阵B=inv(D-L*w)*((1-w)*D+w*U);f=w*inv((D-L*w))*b;x=B*x0+f;n=1;迭代次数while norm(x-x0)>;=epsx0=x;x=B*x0+f;n=n+1;if(n>;=M)disp('Warning:迭代次数太多,可能不收敛!');return;endend
分别用雅可比迭代法、高斯一塞德尔迭代法及逐次超松弛 迭代法求解线性方程组 取初值X(0)=(0,0,0,0)T,精 精确解X=(-1,-1,-1,-1)T.