Jacobi迭代法_Gauss-Seidel迭代法

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档