关于大学里面计算方法(数值分析)中,解线性方程组,利用到雅可比迭代和SOR迭代的利用matlab求解问题
答案:3 悬赏:40 手机版
解决时间 2021-11-24 06:25
- 提问者网友:愿为果
- 2021-11-23 20:03
关于大学里面计算方法(数值分析)中,解线性方程组,利用到雅可比迭代和SOR迭代的利用matlab求解问题
最佳答案
- 五星知识达人网友:野慌
- 2021-11-23 21:09
下面是我写的,放心用去啦~~~
%超松弛迭代(SOR方法)
function [x k flag]=SOR(A, b, eps ,w,maxl)
%A为方程组的系数矩阵
%b为方程组的右端向量
%eps为精度要求
%maxl为最大迭代次数,缺省值为100
%w为超松弛因子,默认值为1
%x为方程组的解
%k为迭代次数
%flag为指标变量
%赋初值:
if nargin<5 maxl=100;end
if nargin<4 w=1;end
if nargin<3 eps=1e-5;end
n=length(b); k=0;
x=zeros(n,1); y=zeros(n,1); flag='OK';
%开始迭代:
while true
y=x; %y,z均为辅助变量
for i=1:n
z=b(i);
for j=1:n
if j~=i
z=z-A(i,j)*x(j);
end
end
if abs(A(i,i))<1e-10|k==maxl
flag='failure';return;
end
z=z/A(i,i);x(i)=(1-w)*x(i)+w*z;
end
if norm(y-x,inf) break;
end
k=k+1;
end
%Jacobi迭代法解线性方程组
function [x k flag]=Jacobi(A, b, eps ,maxl)
%A为方程组的系数矩阵
%b为方程组的右端向量
%eps为精度要求
%maxl为最大迭代次数,缺省值为100
%x为方程组的解
%k为迭代次数
%flag为指标变量
%赋初值:
if nargin<4 maxl=100;end
if nargin<3 eps=1e-5;end
n=length(b); k=0;
x=zeros(n,1); y=zeros(n,1); flag='OK';
%开始迭代:
while 1
for i=1:n
y(i)=b(i);
for j=1:n
if j~=i
y(i)=y(i)-A(i,j)*x(j);
end
end
if abs(A(i,i))<1e-10|k==maxl
flag='failure';return;
end
y(i)=y(i)/A(i,i);
end
if norm(y-x,inf) break;
end
x=y; k=k+1;
end
稍微调试肯定可以通过,都是经过测试的,记得给我分数呦,谢啦~~~
%超松弛迭代(SOR方法)
function [x k flag]=SOR(A, b, eps ,w,maxl)
%A为方程组的系数矩阵
%b为方程组的右端向量
%eps为精度要求
%maxl为最大迭代次数,缺省值为100
%w为超松弛因子,默认值为1
%x为方程组的解
%k为迭代次数
%flag为指标变量
%赋初值:
if nargin<5 maxl=100;end
if nargin<4 w=1;end
if nargin<3 eps=1e-5;end
n=length(b); k=0;
x=zeros(n,1); y=zeros(n,1); flag='OK';
%开始迭代:
while true
y=x; %y,z均为辅助变量
for i=1:n
z=b(i);
for j=1:n
if j~=i
z=z-A(i,j)*x(j);
end
end
if abs(A(i,i))<1e-10|k==maxl
flag='failure';return;
end
z=z/A(i,i);x(i)=(1-w)*x(i)+w*z;
end
if norm(y-x,inf)
end
k=k+1;
end
%Jacobi迭代法解线性方程组
function [x k flag]=Jacobi(A, b, eps ,maxl)
%A为方程组的系数矩阵
%b为方程组的右端向量
%eps为精度要求
%maxl为最大迭代次数,缺省值为100
%x为方程组的解
%k为迭代次数
%flag为指标变量
%赋初值:
if nargin<4 maxl=100;end
if nargin<3 eps=1e-5;end
n=length(b); k=0;
x=zeros(n,1); y=zeros(n,1); flag='OK';
%开始迭代:
while 1
for i=1:n
y(i)=b(i);
for j=1:n
if j~=i
y(i)=y(i)-A(i,j)*x(j);
end
end
if abs(A(i,i))<1e-10|k==maxl
flag='failure';return;
end
y(i)=y(i)/A(i,i);
end
if norm(y-x,inf)
end
x=y; k=k+1;
end
稍微调试肯定可以通过,都是经过测试的,记得给我分数呦,谢啦~~~
全部回答
- 1楼网友:长青诗
- 2021-11-24 00:12
防对方答复
- 2楼网友:蓝房子
- 2021-11-23 22:43
不好意思,我只有数值分析第五版的答案!呵呵
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯