构造迭代公式x(2sinx),编制如下程序计算迭代结果: function y=dd(x0,n,tol) x(1)=x0; b=1; i=1;while(abs(b)>eps*x(i))
x(i+1)=(2*sin(x(i)))^0.5; b=x(i+1)-x(i); i=i+1;
if(i>n) error('n is full'); end end
disp(i-1); y=x(i);
在不同的初值下迭代的结果如下
初值 根的近似值 迭代次数 -2 1.4044 21 -1.5 1.4044 21 -1 1.4044 21 -0.5 1.4044 21 0 1.4044 1 0.5 0 19 1 1.4044 18 1.5 1.4044 17 2 1.4044 18 2.5 1.4044 19 可以发现,迭代有可能进入复数区域,而且如果不是初值为0,就不可能得到0这个根。这是由于y(2sinx)的图形只在1.4044附近斜率是小于1的,在0附近不满足不动点收敛的条件。
比较可知,牛顿法和迭代法对于此题都有较大的收敛区域。同样精度的情况下牛顿法的迭代次数较少。牛顿法通过更换初值可以得到全部的两个根,而迭代法则只能得到一个。
7.炮弹发射视为斜抛运动,已知初速为200m/s,问要击中水平距离360m、垂直距离160m得目标,当忽略空气阻力时,发射角应多大。如果只考虑水平方向的阻力,且设阻力与(水平方向)速度成正比,系数为0.1(1/s),结果又如何。
解:设发射角为θ,当不考虑空气阻力时,炮弹的运动方程如下:
1212x200cost 12y200sint9.8t2消去t可以得到ytanx4.9(x)2
200cos代入x=360, y=160;得到关于θ的一元非线性方程。用牛顿法解这个方程 function y=fun1(x)
y=360*tan(x)-4.8*(360/200/cos(x))^2-160; newton2(5,6,100,1e-6) ans=
0.4623
即发射角大约是0.4623rad(约合26.4695°)。
d2xdx若阻力与水平速度成正比则20.1
dtdt代入初始条件可以得出x10200cosexp(0.1t)10200cos 将之替代上面参数方程的第一个式子。同样编制程序如下
function y=fun1(x)
y=200*sin(x)*(-10*log(1-360/2000/cos(x)))-4.9*(-10*log(1-360/2000/cos(x))) newton2(0.5,1,100,1e-6) ans =
0.4027
即有阻力时发射角应为0.4027rad(约合23.073°)。