非线性方程组的牛顿迭代法-最速下降法

  • 格式:doc
  • 大小:104.50 KB
  • 文档页数:9

数学软件实验任务书

课程名称 数学软件实验 班级

学号

实验课题 非线性方程组的牛顿迭代法,最速下降法,不动点迭代法

实验目的 熟悉非线性方程组的牛顿迭代法,最速下降法,不动点迭代法

实验要求 运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成

实验内容 非线性方程组的牛顿迭代法

非线性方程组的最速下降法

非线性方程组的不动点迭代法

成绩 教师 实验一 非线性方程组的牛顿迭代法

1 实验原理

对于非线性方程

11221212(,,,)(,,,)(,,,)nnnnfxxxfxxxffxxx

在x(k )处按照多元函数的泰勒展开,并取线性项得到

()()()()(1)()1111()()()()(1)()()122()()()()(1)()1(,,,)(,,,)()0(,,,)kkkkkknnkkkkkkknnnkkkkkknnnnnfxxxxxfxxxxxfxfxxxxx

其中

1111()nnnnffxxfxffxx

(1)()()()()()1111(1)()()()()()()1221(1)()()()()()1(,,,)(,,,)[()](,,,)kkkkkknnkkkkkkknnnkkkkkknnnnnxxfxxxxxfxxxfxxxfxxx

2 数据来源

计算非线性方程组

22220.50440xxyxy

初值取11xy 3 实验步骤

步骤一:编写牛顿迭代法的基本程序。

打开 Editor 编辑器,输入以下语句:

function [x,n,data]=new_ton(x0,tol)

if nargin==1

tol=1e-10;

end

x1=x0-f1(x0)/df1(x0);

MATLAB 241 数值分析与应用

n=1;

%迭代过程

while (norm(x1-x0)>tol)

x0=x1;

x1=x0-f1(x0)/df1(x0);

n=n+1;

%data 用来存放中间数据

data(:,n)=x1;

end

x=x1;

以文件名new_ton.m保存。

步骤二:编写方程函数与方程的Jacobi矩阵函数。

(1)打开Editor 编辑器输入以下语句:

%牛顿迭代法的方程函数

function f=f1(x0)

x=x0(1);

y=x0(2);

f1=x^2-2*x-y+0.5;

f2=x^2+4*y^2-4;

%最后方程函数以行向量输出

f=[f1 f2];

以文件名f1.m保存。

(2)新打开Editor 编辑器输入以下语句:

%牛顿迭代法的jacobi矩阵

function f=df1(x0);

x=x0(1);

y=x0(2); f=[2*x-2 -1

2*x 8*y];

以文件名df1.m保存。

步骤三:编写主函数。

打开 Editor 编辑器输入以下语句:

%牛顿迭代法的主函数

x0=[1 1];

[x,n,data]=new_ton(x0);

disp('计算结果为')

x

disp('迭代次数为')

n

%抽取data1中第一个变量数据画出曲线

subplot(2,1,1)

plot(data(1,:)),title('x 在迭代中的变化')

%抽取data中的第二个变量数据画出其变化曲线

subplot(2,1,2)

plot(data(2,:)),title('y在迭代中的变化')

以文件名new_main.m保存。

4 实验结果

计算结果为

x =

-0.222214555069498 0.993808418603981

迭代次数为

n =

16

实验二 非线性方程组的最速下降法

1 实验原理

对于非线性方程组

11221212(,,,)(,,,)(,,,)nnnnfxxxfxxxffxxx 令

22212nhfff

如果给定一个初值0x,我们希望找到一条路线每一次x迭代以后代价函数都会比原来小一些。

1kkkxxp

l称为步长因子,kp 的不同,就构成了不同的下降算法。如果取

()(),()kkpxgradhxppx

就是所谓的最速下降法。最速下降法是大范围收敛的h在某kx出沿最速下降方向

()()kkpxgradhx

下降的最快

2 数据来源

计算非线性方程组

22220.50440xxyxy

初值取11xy

3 实验步骤

步骤一:打开 Editor 编辑器,输入以下语句:

syms x y

f1=x^2-2*x-y+0.5;

f2=x^2+4*y^2-4;

h=f1^2+f2^2

grad=[diff(h,x),diff(h,y)];

grad=simple(grad)

以文件名tidu_fuhao.m保存。

步骤二:编写梯度函数。 打开 Editor 编辑器,输入以下语句:

function f=f1_tidu(x0)

x=x0(1);

y=x0(2);

f= [8*x^3-12*x^2-4*x*y-6*x+4*y-2+16*x*y^2

-2*x^2+4*x-62*y-1+16*y*x^2+64*y^3]';

步骤四:编写最速下降法的方法函数。

打开 Editor 编辑器,输入以下语句:

function [x,n,data]=zuisu(x0,tol)

if nargin==1

tol=1e-4;

end

x1=x0-0.001*f1_tidu(x0);

n=1;

%迭代过程

while (norm(x1-x0)>tol)& (n<2000)

x0=x1;

%0.001 为步长因子

x1=x0-0.001*f1_tidu(x0);

n=n+1;

%data 用来存放中间数据

data(:,n)=x1;

end

x=x1;

以文件名zuisu.m保存。

步骤四:编写主函数。

打开 Editor 编辑器,输入以下语句:

4 实验结果

运行程序得到计算结果

x =

-0.21412 0.99395

迭代次数为

n =

426 实验三 非线性方程组的不动点迭代法

1 实验原理

对于非线性方程组

11221212(,,,)(,,,)(,,,)nnnnfxxxfxxxffxxx

可以构造如下形式结构

11122112112(,,,)(,,,)(,,,)nnnnxxxxxxxxxxxx

由上式可以构造如下迭代格式

(1)()()()1112(1)()()()2112(1)()()()112(,,,)(,,,)(,,,)kkkknkkkknkkkknnxxxxxxxxxxxx

选择初值向量(0)000112(,,,,)nxxxx边可以逐步递推下去。这就是不动点迭代法的基本原理。

记矩阵

11111()nnnxxxxx

可以证明如果()1x,则上述迭代收敛。

2 数据来源 计算非线性方程组

3sin2.2378cos0xxyxyy

初值取00xy

3 实验步骤

步骤一:编写不动点迭代方法。

打开 Editor 编辑器,输入以下语句:

%不动点迭代法计算非线形方程组

%08-6-26

%输入量x0 为初值,tol 为误差容限

%输出量r 为计算结果 n为迭代次数data1为计算的中间数据

function [r,n,data]=budong(x0,tol)

%如果输入量少于两个默认误差为10 的-3 次方

if nargin==1

tol=1.0e-3;

end

x1=budong_fun(x0);

n=1;

%迭代过程

while (norm(x1-x0)>tol)&(n<500)

x0=x1;

x1=budong_fun(x0);

n=n+1;

%data1用于存放计算的中间数据这样可以分析运算收敛情况

data(:,n)=x1;

end

r=x1;

以文件名字budong.m保存。

步骤二:编写要计算的函数文件。

打开 Editor 编辑器,输入以下语句:

function f=budong_fun(x)

f(1)=-sin(x(2))*x(1)+2.2378;

f(2)=x(1)^3-cos(x(2))£»

f=[f(1) f(2)];