二分法和牛顿迭代法求解方程的比较
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二分法和牛顿迭代法求解方程的比较
200822401018 徐小良
一、问题叙述
求解1232cos 0x x -+=的解;通过编写matlab 程序分别用分析二分法和牛顿迭代法求解方程,通过两种方法的比较,分析二者求解方程的快慢程度。
二、问题分析
由matlab 画图命令,容易得到此方程解的范围为(2,4);两种迭代方法,在使用相同的误差(0.00001)的情况下,得出matlab 迭代次数,通过次数的比较得出二者求解速度快慢比较。
三、实验程序及注释
(1)、二分法程序:
clear; %清除所有内存数据; f=inline('12-3*x+2*cos(x)');
format long %数据显示格式设为长型; a=2;b=4; %求解区间; er=b-a;ya=f(a);k=0;er0=0.00001; %误差分析; while er>er0 x0=.5*(a+b); y0=f(x0); if ya*y0<0
b=x0; %二分法求解程序; else
a=x0; ya=y0; end
disp([a,b]);er=b-a;k=k+1 %显示各个区间值和求解次数; end
disp([a,b]); %显示最后一个区间值; (2)、牛顿迭代法程序:
clear; %清除所有内存数据; f=inline('12-3*x+2*cos(x)');
format long %数据显示格式设为长型; b=3;a=4;k=0; %求解区间; y0=f(b);y=f(a);
while abs(b-a)>0.00001 t=a-y*(a-b)/(y-y0);
b=a;y0=y; %牛顿迭代法求解程序; a=t;y=f(a); k=k+1;
disp([b,a]);k %显示各个区间值和求解次数; end
disp([b,a]); %显示最后一个区间值;
四、实验数据结果及分析
表2:牛顿迭代法程序结果
五、实验结论
通过表1可知,在二分法下,程序迭代了17次后和第18次的结果一致,即程序迭代了17次达到要求的试验误差;通过表2可知,在牛顿迭代法下,程序迭代了4次后和第5次的结果一致,即程序迭代了4次达到要求的试验误差;
二者比较明显可以看出牛顿迭代法的求解效率要远远优于二分法。
多面体旋转实验
200822401018 徐小良
一、问题叙述:
编写matlab 程序实现对正立方体的旋转,并用适当的方法来验证程序设计的正确性。
二、问题分析:
使用相对应的三个正交矩阵即可实现对三位图形进行各个方向的旋转,在此不再赘述。
⎥⎥
⎥⎦⎤⎢⎢⎢⎣⎡-=αααααcos sin 0sin cos 0001
)(x Q ,⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=βββββcos 0sin 010sin 0cos )(y Q ,⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=1000cos sin 0sin cos )(γγγγγz Q 使用moviein 命令,就可以对原正立方体和旋转以后的三位图形进行全方位的观测;为观
测的方便,可在立方体各个面上涂不同的颜色加以区分。
三、试验程序以及注释:
(1)、主题函数:
clear; %清除以前所有数据,以防干扰
[X,Y,Z]=peaks(30);
m=moviein(30); %扑捉相关画面
B0=[0 0 0;1 0 0;1 1 0;0 1 0;0 0 1;1 0 1;1 1 1;0 1 1];
n=8; %延时相关因子
view(-25,16);
B=B0;cube(B);
for i=1:30
view(10*(i-1),10*(i-1)) %设置观测点
m(:,i)=getframe; %观察立方体
delay(n); %延时一定时间,以便观测
end
Qz=[cos(pi/2) -sin(pi/2) 0;sin(pi/2) cos(pi/2) 0;0 0 1];
Qy=[cos(-pi/4) 0 sin(-pi/4);0 1 0;-sin(-pi/4) 0 cos(-pi/4)];
Qx=[1 0 0;0 cos(pi/4) -sin(pi/4);0 sin(pi/4) cos(pi/4)];
B=B*Qz';cube(B);
B=B*Qz';cube(B); %立方体旋转B=B*Qz';cube(B);
B=B0*Qy';B=B*Qx';B(:,3)=B(:,3)+1;
cube(B);
view(-25,16);
for i=1:30
view(3-10*(i-1),10)
m(:,i)=getframe;
delay(n);
end
(2)、Cube函数:
function cube(B)
fac=[1 2 3 4;1 2 6 5;1 4 8 5;7 8 5 6;7 3 2 6;7 3 4 8];
patch('faces',fac(1,:),'vertices',B,'faceColor','m'); %在不同面涂不同颜色patch('faces',fac(2,:),'vertices',B,'faceColor','b');
patch('faces',fac(3,:),'vertices',B,'faceColor','r');
patch('faces',fac(4,:),'vertices',B,'faceColor','c');
patch('faces',fac(5,:),'vertices',B,'faceColor','g');
patch('faces',fac(6,:),'vertices',B,'faceColor','y');
(3)、delay函数: %延时函数function delay(n)
tic
M=10000000;
N=M*n;
for k=0:N
M=M*1-1;
end
toc %延时时间计算
四、试验结果:
通过程序仿真可观测到,立方体不同侧面的颜色,以此检测图色的正确性。
当旋转后,经过程序仿真观测旋转后的图形各个侧面的颜色,以此观测旋转的正确性。
五、试验结论:
在程序中我们设置:
第一个面为‘m’紫色;(最下面一个面)
第二个面为‘b’蓝色;
第三个面为‘r’红色;
第四个面为‘c’青色;(最上面一个面)
第五个面为‘g’绿色;
最后一个面为‘y’黄色。
其分析图形如下如所示:
通过分析图形与最终结果的比对我们很容易看出,不管是颜色的涂写还是立方体的旋转,程序仿真的结果时正确的。