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;
úta 用来存放中间数据 data(:,n)=x1; end x=x1;
以文件名zuisu.m保存。 步骤四:编写主函数。
打开 Editor 编辑器,输入以下语句:
4 实验结果
运行程序得到计算结果
x =
-0.21412 0.99395 迭代次数为 n = 426
实验三 非线性方程组的不动点迭代法
1 实验原理
对于非线性方程组
?f1(x1,x2,?,xn)???f(x,x,?,x)212n? f???????f(x,x,?,x)n??n12可以构造如下形式结构
?x1??1(x1,x2,?,xn)?x??(x,x,?,x)?2112n ?????xn??1(x1,x2,?,xn)由上式可以构造如下迭代格式
?x1(k?1)??1(x1(k),x2(k),?,xn(k))?(k?1)??1(x1(k),x2(k),?,xn(k))?x2 ???(k?1)???1(x1(k),x2(k),?,xn(k))?xn000选择初值向量x(0)??1(x1,x2,?,xn,)边可以逐步递推下去。这就是不动
点迭代法的基本原理。 记矩阵
???1??x?1??(x)???????n??x?1可以证明如果
??1??xn?????
???n???x1?????(x)?1,则上述迭代收敛。
2 数据来源
计算非线性方程组
?x?xsiny?2.2378 ?3?x?y?cosy?0初值取?????
?x??y??0??0?3 实验步骤
步骤一:编写不动点迭代方法。
打开 Editor 编辑器,输入以下语句: %不动点迭代法计算非线形方程组 -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;
úta1用于存放计算的中间数据这样可以分析运算收敛情况 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)];
以文件名budong_fun.m保存。
步骤三:编写主函数文件。
打开 Editor 编辑器,输入以下语句: x0=[0 0];
[r,n,data]=budong(x0); disp('计算结果为') r
disp('迭代次数为') n
%抽取data1中第一个变量数据画出曲线 subplot(2,1,1) plot(data(1,:))
%抽取data中的第二个变量数据画出其变化曲线 subplot(2,1,2) plot(data(2,:))
%以下为数据保存部分,注意查看当前工作空间 num=(1:n)'; a=[num data'];
save data1.txt a –ascii
以文件名budong_main.m保存。
4 实验结果
运行程序得到计算结果
计算结果为 r =
1.15970358667494 1.19256473358258 迭代次数为 n = 211