Jacobi迭代法_Gauss-Seidel迭代法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab线性方程组的迭代解法(Jacobi迭代法Gauss-Seidel迭代法)实验报告2008年11月09日星期日 12:49
1.熟悉Jacobi迭代法,并编写Matlab程序matlab程序
按照算法(Jacobi迭代法)编写Matlab程序(Jacobi.m)
function [x, k, index]=Jacobi(A, b, ep, it_max)
%求解线性方程组的Jacobi迭代法,其中
% A ---方程组的系数矩阵
% b ---方程组的右端项
% ep ---精度要求。省缺为1e-5
% it_max ---最大迭代次数,省缺为100
% x ---方程组的解
% k ---迭代次数
% index --- index=1表示迭代收敛到指定要求;
% index=0表示迭代失败
if nargin <4 it_max=100; end
if nargin <3 ep=1e-5; end
n=length(A); k=0;
x=zeros(n,1); y=zeros(n,1); index=1;
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==it_max
index=0; return;
end
y(i)=y(i)/A(i,i);
end
if norm(y-x,inf) break; end x=y; k=k+1; end 用Jacobi迭代法求方程组 的解。 输入: A=[4 3 0;3 3 -1;0 -1 4]; b=[24;30;-24]; [x, k, index]=Jacobi(A, b, 1e-5, 100) 输出: x = -2.9998 11.9987 -3.0001 k = 100 index = 2.熟悉Gauss-Seidel迭代法,并编写Matlab程序 function [v,sN,vChain]=gaussSeidel(A,b,x0,errorBound,maxSp) %Gauss-Seidel迭代法求解线性方程组 %A-系数矩阵b-右端向量x0-初始迭代点errorBound-近似精度maxSp-最大迭代次数 %v-近似解sN-迭代次数vChain-迭代过程的所有值 step=0; error=inf; s=size(A); D=zeros(s(1)); vChain=zeros(15,3);%最多能记录15次迭代次数 k=1; fx0=x0; for i=1:s(1) D(i,i)=A(i,i); end; L=-tril(A,-1); U=-triu(A,1); while error>=errorBound & step x0=inv(D)*(L+U)*x0+inv(D)*b; vChain(k,:)=x0'; k=k+1; error=norm(x0-fx0); fx0=x0; step=step+1; end v=x0; sN=step; 用Gauss-Seidel迭代法求解上题的线性方程组,取。 输入: A=[4 3 0;3 3 -1;0 -1 4]; b=[24;30;-24]; x0=[0;0;0]; [v,sN,vChain]=gaussSeidel(A,b,x0,0.00001,11) 输出: v = 0.6169 11.1962 -4.2056 sN = 11 vChain = 6.0000 10.0000 -6.0000 -1.5000 2.0000 -3.5000 4.5000 10.3333 -5.5000 -1.7500 3.6667 -3.4167 3.2500 10.6111 -5.0833 -1.9583 5.0556 -3.3472 2.2083 10.8426 -4.7361 -2.1319 6.2130 -3.2894 1.3403 11.0355 -4.4468 -2.2766 7.1775 -3.2411 0.6169 11.1962 -4.2056 0 0 0 0 0 0 0 0 0 0 0 0 s 数值实验 数值实验要求: 数值实验报告内容:要包含题目、算法公式、完整的程序、正确的数值结果和图形以及相应的误差分析。在本课程网站上提交数值实验报告的电子文档。 一、为了逼近飞行中的野鸭的顶部轮廓曲线,已经沿着这条曲线选择了一组点。见下表。1.对这些数据构造三次自然样条插值函数,并画出得到的三次自然样条插值曲线;2.对这些数据构造Lagrang插值多项式,并画出得到的Lagrang插值多项式曲线。 x 0.9 1.3 1.9 2.1 2.6 3.0 3.9 4.4 4.7 5.0 6.0 f(x) 1.3 1.5 1.85 2.1 2.6 2.7 2.4 2.15 2.05 2.1 2.25 x 7.0 8.0 9.2 10.5 11.3 11.6 12.0 12.6 13.0 13.3 f(x) 2.3 2.25 1.95 1.4 0.9 0.7 0.6 0.5 0.4 0.25 1.使用三次样条插值函数csape()求解。 解:输入: >>x=[0.9 1.3 1.9 2.1 2.6 3.0 3.9 4.4 4.7 5.0 6.0 7.0 8.0 9.2 10.5 11.3 11.6 12.0 12.6 13.0 13.3]; >> y=[1.3 1.5 1.85 2.1 2.6 2.7 2.4 2.15 2.05 2.1 2.25 2.3 2.25 1.95 1.4 0.9 0.7 0.6 0.5 0.4 0.25]; >> pp=csape(x,y,'variational',[0 0]) 得到: pp = form: 'pp' breaks: [0.9000 1.3000 1.9000 2.1000 2.6000 3 3.9000 4.4000 4.7000 5 6 7 8 9.2000 10.5000 11.3000 11.6000 12 12.6000 13 13.3000] coefs: [20x4 double] pieces: 20 order: 4 dim: 1 再输入: >> pp.coefs 得到: ans = -0.2476 0 0.5396 1.3000 0.9469 -0.2972 0.4208 1.5000 -2.9564 1.4073 1.0868 1.8500 -0.4466 -0.3666 1.2949 2.1000 0.4451 -1.0365 0.5934 2.6000 0.1742 -0.5025 -0.0222 2.7000 0.0781 -0.0322 -0.5034 2.4000