1、二分法和牛顿迭代法求解方程的比较 200822401018 徐小良 一、 问题叙述 求解的解;通过编写matlab程序分别用分析二分法和牛顿迭代法求解方程,通过两种方法的比较,分析二者求解方程的快慢程度。 二、 问题分析 由matlab画图命令,容易得到此方程解的范围为(2,4);两种迭代方法,在使用相同的误差(0.00001)的情况下,得出matlab迭代次数,通过次数的比较得出二者求解速度快慢比较。 三、 实验程序及注释 (1)、二分法程序: clear; %清除所有内存数据; f=inline('12-3*x+2*c
2、os(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
3、 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 a
4、bs(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]); %显示最后一个区间值; 四、 实验数据结果及分析 表1:二分法程序结果 迭代次数 区间值:a 区间值:b 1 3.00000000000000 3.50000000000000 2
5、3.25000000000000 3.50000000000000 3 3.25000000000000 3.37500000000000 4 3.31250000000000 3.37500000000000 ...... …… …… 14 3.34735107421875 3.34741210937500 15 3.34738159179688 3.34741210937500 16 3.34739685058594 3.34741210937500 17 3.34739685058594 3.34740
6、447998047 18 3.34739685058594 3.34740447998047 表2:牛顿迭代法程序结果 迭代次数 区间值:b 区间值:a 1 3.43828213866291 3.31995568160492 2 3.31995568160492 3.34836329704004 3 3.34836329704004 3.34741272048233 4 3.34741272048233 3.34740283960879 5 3.34741272048233 3.34740283960879 五、
7、 实验结论 通过表1可知,在二分法下,程序迭代了17次后和第18次的结果一致,即程序迭代了17次达到要求的试验误差;通过表2可知,在牛顿迭代法下,程序迭代了4次后和第5次的结果一致,即程序迭代了4次达到要求的试验误差; 二者比较明显可以看出牛顿迭代法的求解效率要远远优于二分法。 多面体旋转实验 200822401018 徐小良 一、 问题叙述: 编写matlab程序实现对正立方体的旋转,并用适当的方法来验证程序设计的正确性。 二、 问题分析: 使用相对应的三个正交矩阵即可实现对三位图形进行各个方向的旋转,在此不再赘述。 ,, 使用moviein命令,就可以对原正立方
8、体和旋转以后的三位图形进行全方位的观测;为观测的方便,可在立方体各个面上涂不同的颜色加以区分。 三、 试验程序以及注释: (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;
9、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
10、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);
11、 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,:),'ver
12、tices',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
13、 %延时时间计算 四、 试验结果: 通过程序仿真可观测到,立方体不同侧面的颜色,以此检测图色的正确性。 当旋转后,经过程序仿真观测旋转后的图形各个侧面的颜色,以此观测旋转的正确性。 五、 试验结论: 在程序中我们设置: 第一个面为‘m’紫色;(最下面一个面) 第二个面为‘b’蓝色; 第三个面为‘r’红色; 第四个面为‘c’青色;(最上面一个面) 第五个面为‘g’绿色; 最后一个面为‘y’黄色。 其分析图形如下如所示: 通过分析图形与最终结果的比对我们很容易看出,不管是颜色的涂写还是立方体的旋转,程序仿真的结果时正确的。






