实验六 非线性方程近似解
实验目的 1. 用MATLAB软件掌握求解非线性方程的迭代法和牛顿法,并对结果作初步分析; 2. 通过实例练习用非线性方程求解实际问题。 实验内容
预备:编写牛顿切线法和割线法的程序 牛顿割线法程序 牛顿切线法程序 function y=newton2(x0,x1,n,tol) function y=newton1(x0,n,tol) x(1)=x0; x(1)=x0; x(2)=x1; b=1; b=1; i=1; i=2; while(abs(b)>eps*x(i)) while(abs(b)>eps*x(i)) x(i+1)=x(i)-fun1(x(i))/dfun1(xx(i+1)=x(i)-fun1(x(i))*(x(i)-x( (i)); i-1))/(fun1(x(i))-fun1(x(i-1))) b=x(i+1)-x(i); ; i=i+1; b=x(i+1)-x(i); if(i>n) error('n is full'); i=i+1; end if(i>n) error('n is full'); end end disp(i-1); end y=x(i); disp(i-2); y=x(i); x20的两个根,准确到10-6,取不同的初值计算,输出初值、根的1. 用牛顿法求sinx2近似值和迭代次数,分析两个根的收敛域;再用迭代法求解(可构造不同的迭代公式,如,进行比较。 x(2sinx)等)
a. 牛顿法,用以上程序代入不同的初值结果如下: 初值 根的近似值 -2 0 -1.5 0 -1 0 -0.5 0 0 0 0.5 0 1 1.4044 1.5 1.4044 2 1.4044 2.5 1.4044
迭代次数 7 7 7 7 1 8 7 5 6 7 12经过反复尝试,两个根(0和1.4044)的收敛区域如下
根 收敛区域 0 -∞ 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°)。 因篇幅问题不能全部显示,请点此查看更多更全内容