数学软件实验任务书
课程名称 学号 数学软件实验 班级 非线性方程组的牛顿迭代法,最速下降法,不动点迭实验课题 代法 熟悉非线性方程组的牛顿迭代法,最速下降法,不动实验目的 点迭代法 运用Matlab/C/C++/Java/Maple/Mathematica等其中实验要求 一种语言完成 非线性方程组的牛顿迭代法 非线性方程组的最速下降法 非线性方程组的不动点迭代法 实验内容 成绩 教师 实验一 非线性方程组的牛顿迭代法 1 实验原理
对于非线性方程
?f1(x1,x2,?,xn)???f(x,x,?,x)212n? f???????f(x,x,?,x)n??n12在x(k )处按照多元函数的泰勒展开,并取线性项得到
?f1(k)(x1(k),xn(k),?,xn(k))??x1(k?1)?x1(k)??(k)(k)(k)?(k?1)(k)?(k)?f(x,x,?,x)x?x1nn2??n??f?(x(k))?2?0
?????????f(k)(x(k),x(k),?,x(k))???x(k?1)?x(k)??1nnn??n??n其中
?f1???f1???x?xn?1??f?(x)??????
???f?fnn????x??x?n??1?x1(k?1)??x1(k)??f1(k)(x1(k),xn(k),?,xn(k))??(k?1)??(k)??(k)(k)(k)(k)?xxf(x,x,?,x)?1nn?2???2??[f?(x(k))]?1?n ????????????x(k?1)????x(k)???f(k)(x(k),x(k),?,x(k))??1nn?n??n??n?2 数据来源
计算非线性方程组
?x2?2x?y?0.5?0 ?22?x?4y?4?0初值取?????
?x??y??1??1?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;
úta 用来存放中间数据 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 实验原理
对于非线性方程组
?f1(x1,x2,?,xn)???f(x,x,?,x)212n? f???????f(x,x,?,x)n??n12令
h?f12?f22???fn2
如果给定一个初值x0,我们希望找到一条路线每一次x迭代以后代价函数都会比原来小一些。
xk?1?xk??pk
l称为步长因子?,pk 的不同,就构成了不同的下降算法。如果取
p(x)??gradh(x),pk?p(xk)
就是所谓的最速下降法。最速下降法是大范围收敛的h在某xk出沿最速下降方向
pk(x)??gradh(xk)
下降的最快
2 数据来源
计算非线性方程组
?x2?2x?y?0.5?0 ?22?x?4y?4?0初值取?????
?x??y??1??1?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 编辑器,输入以下语句: