非线性方程组的牛顿迭代法-最速下降法
- 格式: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)];