第一范文网 - 专业文章范例文档资料分享平台

王能超 计算方法 - 算法设计及MATLAB实现课后代码

来源:用户分享 时间:2025/5/23 14:35:02 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

end

r=max(abs(x2-x1)); x1=x2; k=K+1; if k>N

disp(‘迭代失败,返回’); return; end end x=x1;

算例13:用Jacobi迭代法求解方程组:

??4x1?x2?x3?x4?1?x?4x?x?x?1?1234 ?

?x1?x2?4x3?x4?1??x1?x2?x3?4x4?1其精确解为x=[-1,-1,-1,-1]’.

解:令A=[-4,1,1,1;1,-4,1,1;1,1,-4,1;1,1,1,-4]; b=[1,1,1,1]’; x0=[0,0,0,0]’; 在命令窗口中输入:

[x,k]=Jacobimethod(A,b,x0,100,10^-5)

5.2 Gauss-Seidel迭代

用Gauss-Seidel迭代法求解线性方程组. MATLAB文件:(文件名:Gaussmethod.m) function [x,k]=Gaussmethod(A,b,x0,N,emg)

%A是线性方程组的左端矩阵 %b是右端向量 %x0是迭代初始值

%N表示迭代次数上限,若迭代次数大于N,则迭代失败 %emg表示控制精度

%用Gauss-Seidel迭代法求线性方程组A*x=b的解 %k表示迭代次数

%x表示用迭代法求得的线性方程组的近似解 n=length(A);

x1=zeros(n,1); x2=zeros(n,1); x1=x0;

r=max(abs(b-A*x1)); k=0;

while r>emg for i=1:n sum=0; for j=1:n

17

if j>i

sum=sum+A(i,j)*x1(j); elseif j

sum=sum+A(i,j)*x2(j); end end

x2(i)=(b(i)-sum)/A(i,i); end

r=max(abs(x2-x1)); x1=x2; k=K+1; if k>N

disp(‘迭代失败,返回’); return; end end x=x1;

算例14:用Gauss-Seidel迭代法求解方程组:

??4x1?x2?x3?x4?1?x?4x?x?x?1?1234 ?

?x1?x2?4x3?x4?1??x1?x2?x3?4x4?1其精确解为x=[-1,-1,-1,-1]’.

解:令A=[-4,1,1,1;1,-4,1,1;1,1,-4,1;1,1,1,-4]; b=[1,1,1,1]’; x0=[0,0,0,0]’; 在命令窗口中输入:

[x,k]=Gaussmethod(A,b,x0,100,10^-5)

5.3 超松弛迭代

用超松弛(SOR)迭代法求解线性方程组. MATLAB文件:(文件名:SORmethod.m) function [x,k]=SORmethod(A,b,x0,N,emg,w) %A是线性方程组的左端矩阵 %b是右端向量 %x0是迭代初始值

%N表示迭代次数上限,若迭代次数大于N,则迭代失败 %emg表示控制精度 %w表示松弛因子

%用SOR迭代法求线性方程组A*x=b的解 %k表示迭代次数

%x表示用迭代法求得的线性方程组的近似解 n=length(A);

18

x1=zeros(n,1); x2=zeros(n,1); x1=x0;

r=max(abs(b-A*x1)); k=0;

while r>emg for i=1:n sum=0; for j=1:n

if j>=i

sum=sum+A(i,j)*x1(j); elseif j

sum=sum+A(i,j)*x2(j); end end

x2(i)=x1(i)+w*(b(i)-sum)/A(i,i); end

r=max(abs(x2-x1)); x1=x2; k=K+1; if k>N

disp(‘迭代失败,返回’); return; end end x=x1;

算例15:用超松弛(SOR)迭代法求解方程组:

??4x1?x2?x3?x4?1?x?4x?x?x?1?1234 ?

?x1?x2?4x3?x4?1??x1?x2?x3?4x4?1其精确解为x=[-1,-1,-1,-1]’.

解:令A=[-4,1,1,1;1,-4,1,1;1,1,-4,1;1,1,1,-4]; b=[1,1,1,1]’; x0=[0,0,0,0]’; 在命令窗口中输入:

[x,k]=SORmethod(A,b,x0,100,10^-5,1)

当松弛因子为1时,超松弛迭代法等同于Gauss-Seidel迭代法.

5.4 对称超松弛迭代

用对称超松弛(SSOR)迭代法求解线性方程组. MATLAB文件:(文件名:SSORmethod.m) function [x,k]=SSORmethod(A,b,x0,N,emg,w) %A是线性方程组的左端矩阵

19

%b是右端向量 %x0是迭代初始值

%N表示迭代次数上限,若迭代次数大于N,则迭代失败 %emg表示控制精度 %w表示松弛因子

%用SSOR迭代法求线性方程组A*x=b的解 %k表示迭代次数

%x表示用迭代法求得的线性方程组的近似解 n=length(A);

x1=zeros(n,1); x2=zeros(n,1); x3=zeros(n,1); x1=x0;

r=max(abs(b-A*x1)); k=0;

while r>emg for i=1:n sum=0; for j=1:n if j>i

sum=sum+A(i,j)*x1(j); elseif j

sum=sum+A(i,j)*x2(j); end end

x2(i)=(1-w)*x1(i)+w*(b(i)-sum)/A(i,i); end

for i=n:-1:1 sum=0; for j=1:n if j>i

sum=sum+A(i,j)*x3(j); elseif j

sum=sum+A(i,j)*x2(j); end end

x3(i)=(1-w)*x2(i)+w*(b(i)-sum)/A(i,i); end

r=max(abs(x3-x1)); x1=x3; k=K+1; if k>N

disp(‘迭代失败,返回’); return; end end

20

王能超 计算方法 - 算法设计及MATLAB实现课后代码.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c1owos7bmde8ojit8frb8_5.html(转载请注明文章来源)
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top