jacobi,高斯,牛顿迭代

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二:迭代法求解方程组

姓名:徐烨

学号:08072105

时间:2010-11-17

一、实验目的

利用jacobi 迭代法和gauss-seidei 迭代法求解线性方程组,利用newton 迭代法求解非线性方程组。在求解过程中,利用这三种方法的迭代原理,根据迭代法的求解流程,写出三种迭代法的迭代格式,学习三种迭代法的原理和解题步骤,并使用matlab 软件求解方程。在实验过程中,分别取不同的初值进行求解,并做结果分析,解怒同德方程来比较这三种迭代方法的利弊。

二、实验步骤

newton 迭代法

⒈newton 迭代原理

考虑非线性方程f(x)=0,求解她的困难在于f 是非线性函数。为克服这一困难,考虑它的线性展开。设当前点为Xk, 在Xk 处的Taylor 展开式为

f ()x ≈f ()()()k k k x x x f x -'+

令上式右端为0.解其方程得到

()()

k k k k x f x f x x '-=+1 ⋅⋅⋅=1,0k 此式就称为Newton 公式。

2. newton 迭代法的matlab 实现

function x=newton(fname,dfname,x0,e,N)

%用途:牛顿迭代法解非线性方程组分f(x)=0

%fname 和dfname 分别表示f(x)及其到函数的M 函数句柄或内嵌函数的表达式%x0为迭代初值,e 为精度

%x 为返回数值解,并显示计算过程,设置迭代次数上线N 以防发散

if nargin<5,N=500;end

if nargin<4,e=le-4;end

x=x0;x0=x+2*e;k=0;

fprintf('It.no=%2d x%[2d]=%12.9f\n',k,k,x)

while abs(x0-x)>e&k

k=k+1;

x0=x;x=x0-feval(fname,x0)/feval(dfname,x0);

fprintf('It.no=%2d x[%2d]=%12.9f\n',k,k,x) end

if k==N,fprintf('已达到迭代次数上限');

end

在试验中,我用这种方法求

f(x)=x3-3*x-1=0的解

①初值为2时,新建一个文件,输入:

fun=inline('x^3-3*x-1');

dfun=inline('3*x^2-3');

x=newton(fun,dfun,2,0.5e-6)

即可得此方程的解为:

It.no= 0 xIt.no= 1 x[ 1]= 1.888888889

It.no= 2 x[ 2]= 1.879451567

It.no= 3 x[ 3]= 1.879385245

It.no= 4 x[ 4]= 1.879385242

x =

1.879385241571817e+000

②初值为5时,新建一个文件,输入:

fun=inline('x^3-3*x-1');

dfun=inline('3*x^2-3');

x=newton(fun,dfun,5,0.5e-6)

即可得此方程的解为:

It.no= 0 xIt.no= 1 x[ 1]= 3.486111111

It.no= 2 x[ 2]= 2.562343095

It.no= 3 x[ 3]= 2.075046554

It.no= 4 x[ 4]= 1.902660228

It.no= 5 x[ 5]= 1.879777024

It.no= 6 x[ 6]= 1.879385355

It.no= 7 x[ 7]= 1.879385242

x =

1.879385241571826e+000

③初值为8时,新建一个文件,输入:

fun=inline('x^3-3*x-1');

dfun=inline('3*x^2-3');

x=newton(fun,dfun,8,0.5e-6)

即可得此方程的解为:

It.no= 0 xIt.no= 1 x[ 1]= 5.423280423

It.no= 2 x[ 2]= 3.754505841

It.no= 3 x[ 3]= 2.719579123

It.no= 4 x[ 4]= 2.148629510

It.no= 5 x[ 5]= 1.920654127

It.no= 6 x[ 6]= 1.880593045

It.no= 7 x[ 7]= 1.879386323

It.no= 8 x[ 8]= 1.879385242

It.no= 9 x[ 9]= 1.879385242

x =

1.879385241571817e+000

gauss-seidel 实验过程

1.gauss-seidel 迭代原理

将方程组Ax=b (设n i a n ,2,1;0⋅⋅⋅=≠)化成等价方程组:

)(1∑≠-=i

j j i i i i x a b a x j i ),2,1(n i ⋅⋅⋅= 采用迭代格式: ⎪⎪⎭⎫ ⎝⎛--=∑∑-=+=++111111i j n

i j k j ij k j ij i ij k i x a x a b a x ()n i ⋅⋅⋅⋅=,2,1 2.gauss-seidel 迭代法的matlab 实现

function x=jacobi(A,b,x0,emg,N)

% A 是线性方程组的系数矩阵

% b 是值向量

% x0是迭代初始向量

% N 是迭代上限,诺迭代次数大于>N,则迭代失败

% emg 是控制精度

% 用gauss-seidei 迭代法求解线性方程组Ax=b 的解

%k 表示迭代次数

%x 表示用迭代法求得的解线性方程组的近似解

if nargin<5

N=500;

else N=N;

end

n=length(b);

x1=zeros(n,1);

x2=zeros(n,1);

x1=x0;

k=0;

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

while r>emg

for i=1:n

sum=0;

for j=1:n

if i~=j

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

end

相关文档
最新文档