270 likes | 453 Views
数学实验. 3.6 牛顿迭代法. 牛顿迭代法原理. 求方程 f(x)=0 的根的迭代格式 :. 过程图解:. 例 1 用牛顿迭代法求 x 3 +1.1x 2 +0.9x-1.4=0 的近似实根,误差不超过 0.001. f[x_]:=x^3+1.1x^2+0.9x-1.4 g1[x_]:=x-f[x]/f'[x] FixedPointList[g1,0.6,3]. 例 2 用牛顿迭代法求任意正数的算术平方根.
E N D
3.6 牛顿迭代法 牛顿迭代法原理 求方程f(x)=0的根的迭代格式: 过程图解:
例1 用牛顿迭代法求x3+1.1x2+0.9x-1.4=0的近似实根,误差不超过0.001. f[x_]:=x^3+1.1x^2+0.9x-1.4 g1[x_]:=x-f[x]/f'[x] FixedPointList[g1,0.6,3]
例2 用牛顿迭代法求任意正数的算术平方根. sqRoot[a_,n_]:=Module[{f,g},f[x_]:=x^2-a; g[x_]:=x-f[x]/f'[x]; FixedPoint[g,a,n]] N[sqRoot[10,10],100] N[Sqrt[10],100]
牛顿迭代法的收敛性 定理 设 f(x) 在区间[a,b]上有二阶连续导数,且满足 (1) f(a) f(b)<0; (2) f"(x)在[a, b]上不变号; (3) f'(x)在[a, b]上不为 0; (4) 令 = b-a, m=min{| f(x)|, a x b}, M=max{| f"(x)|, a x b}, 有 < 2m/M, 则对任意x0[a, b], 牛顿迭代格式收敛于f(x) 在区间[a,b]中的唯一实根x*.
例3 用牛顿迭代法求方程x ex=1的近似实根. Clear[a,f]; f[x_]:=x Exp[x]-1 g1[x_]:=x-f[x]/f'[x] g1[x]//Simplify N[FixedPointList[g1,0,5],10]
利用割线法计算方程的根 例4 利用割线法求解方程 x ex-1=0.
Clear[f,g1]; f[x_]:=x Exp[x]-1;a=0;b=1; g1[x_]:=x-f[x]/(f[b]-f[x]) (b-x) FixedPointList[g1,0.,10] 图的作法: Plot[f[x],{x,0,1},AspectRatio->1,Epilog->{{RGBColor[0,0,1], Line[{{a,f[a]},{b,f[b]}}],Line[{{g1[a],f[g1[a]]},{b,f[b]}}], Line[{{g1[g1[a]],f[g1[g1[a]]]},{b,f[b]}}]}, {RGBColor[1,0,0],Dashing[{0.02,0.01}], Line[{{g1[a],0},{g1[a],f[g1[a]]}}], Line[{{g1[g1[a]],0},{g1[g1[a]],f[g1[g1[a]]]}}]}}]
迭代过程的加速 一个简单的加速方法。 由不动点方程 x=g(x) 可以构造新的方程gnew(x)=g(x)+(1-)x 它与方程 x=g(x)有相同的不动点。适当选择的值,可以使发散的迭代过程变得收敛,使收敛慢的过程加速。 例5 求方程x=e-x在0.5附近的根,精确到10-5. Clear[g]; g[x_]:=Exp[-x] FixedPointList[g,0.5,SameTest->(Abs[#1-#2]<10^-5&)] gnew[x_]:=0.625 Exp[-x]+0.375 x FixedPointList[gnew,0.5,SameTest->(Abs[#1-#2]<10^-5&)]
加速的原因 函数gnew(x)在不动点x*附近的导数对迭代的速度有较大的影响,gnew'(x)的绝对值越小,收敛速度越快。因此,选择使gnew'(x)=0,可得: 例6 用上述gnew(x)构造迭代格式,求方程x=e-x在0.5附近的根,精确到10-5. gnew1[x_]:=(g[x]-x g'[x])/(1-g'[x]) FixedPointList[gnew1,0.5,SameTest->(Abs[#1-#2]<10^-5&)]
牛顿迭代法是对基本迭代格式加速的结果 为求解方程f(x)=0,可以使用不动点方程 x=x+f(x),相应的迭代函数为 g(x)=x+f(x). 对迭代格式进行加速,得
3.8 越野赛问题及其它 越野赛问题 越野赛在湖边举行,场地如图所示. 出发点在陆地上A处,终点在湖心岛B处. A, B南北相距5km, 东西相距7km. 湖岸是一条东西走向的长堤,位于A点南侧2km. 比赛中运动员可以自由选择,但必须先从A点出发跑步到达长堤,再由长堤下水游泳达到终点B处 . 已知某运动员的跑步速度v1=18km/h, 游泳速度v2=6km/h, 问他应该在长堤的何处下水才能最快到达终点?
y A(0,2) 北 R(x,0) x O B(7,-3) 湖
跑步所耗时间 t1=|AR|/v1 游泳所耗时间 t2=|RB|/v2 全部用时 t=t1+t2 下面求 t 的最小值. T[x_]:=Sqrt[x^2+4]/18+Sqrt[(7-x)^2+9]/6; eqt=D[T[x],x]==0; r=Solve[eqt,x] T[x]/.r[[1]]//N sin1=x/Sqrt[x^2+4]/.r[[1]];sin2=(7-x)/Sqrt[(7-x)^2+9]/.r[[1]]; sin1/sin2
y A(0,p) R(x,0) x O B(d,q) 光线的折射与反射 根据费马定理,光线总是沿着耗时最少的路径传播. 当光线从空气中A点出发到达水中B点时,由于传播速度的不同,光线在水面会发生折射现象. 设光线在空气中的传播速度为ca, 在水中的传播速度为cw,我们来确定光线的传播路线,并确定入射角与折射角之间的关系.
由于两点间的直线距离最最短,光线在同一介质中的传播路线都是直线. 光线的传播时间: Clear[T,a,b,c,d,p,q,r,x];p=3;d=8;q=-5;C2=2;C1=3; T[x_]:=Sqrt[x^2+p^2]/C1+Sqrt[(d-x)^2+q^2]/C2 eqx=D[T[x],x]==0; r=Solve[eqx,x]; T[x]/.r[[1]]//N sin1=x/Sqrt[x^2+p^2]; sin2=(d-x)/Sqrt[(d-x)^2+q^2]; (N[sin1/sin2/.r[[1]]])==C1/C2
光线的折射定律与反射定律 折射定律 光线从一种介质射入另介质时会发生折射现象. 若光线在介质1中的速度为c1, 在介质2中的速度为c2, 则入射角与折射角必满足: 反射定律 光线在发生反射时,入射角等于反射角.
4.1 计算机模拟 盐水浓度问题 在水池中有2000 m3水,其中含盐2 kg,现以每分钟 6m3的速度向池中注入含盐率为 0.5 kg/m3的盐水,同时又以每分钟4 m3的速度从水池流出搅拌均匀的盐水. 每隔10min计算一次水池中水的体积、含盐量和含盐率. 请模拟实际过程,并将模拟数据进行列表. 从表中查出含盐率达到0.2kg/m3时所用的时间.
由于盐水的注入与流出,池中水的体积、含盐量与含盐率都随着时间不断变化. 初始时刻的含盐率为0.001kg/m3,以后每分钟注入含盐率为0.5kg/m3的水6m3,并流出混合均匀后的盐水4m3,直至水中的含盐率达到0.2kg/m3后,过程停止. time=0;tt=0;volume=2000;total=2; rate=N[total/volume,7]; outtab={{时间, 水的体积, 含盐量, 含盐率}}; While[rate<0.2, time=time+1;volume=volume+2;total=total+3-4 rate; rate=total/volume; If[time>=10, AppendTo[outtab,{tt+time,volume,total,rate}]; tt=tt+time;time=0]] TableForm[AppendTo[outtab, {tt+time,volume,total,rate}]]
四人追逐问题 在正方形ABCD的四个顶点上各有一人. 在某一时刻(设t0=0),四个人同时出发以匀速v按顺时针方向走向下一个人. 在行进过程中,每个人始终对准各自的目标. 试用计算机模拟每个人的行进轨迹. 建立平面直角坐标系. 取时间间隔为t, 计算每个人在t+ t时刻的位置坐标. 模拟过程中使用下列状态变量: (1) 初始化: 终止时间t, 采样间隔dt, 行进速度v, 各点起始位置. (2) 时间循环次数: n=t/dt, 循环变量j. (3) 状态记录: 由四个子表组成的表robit, 每个人(i)的位置坐标为robit[[i]], i=1,2,3,4.
t=12.; dt=0.02;v=1;n=t/dt; (*初始化*) robit={{{0,10}},{{10,10}},{{10,0}},{{0,0}}}; (*初始状态*) m[v_]:=Sqrt[v.v]; For[j=1,j<=n,j++, For[i=1,i<=4,i++, lsrob=If[i!=4,robit[[i+1,j]],robit[[1,j]]]-robit[[i,j]]; lsrob=robit[[i,j]]+v*dt*(lsrob/m[lsrob]); AppendTo[robit[[i]],lsrob]]]; col1=RGBColor[1,0,0];col2=RGBColor[0,1,0]; col3=RGBColor[0,0,1];col4=RGBColor[1,1,0]; g=Graphics[{{col1,Line[robit[[1]]]},{col2,Line[robit[[2]]]}, {col3,Line[robit[[3]]]},{col4,Line[robit[[4]]]}, {Line[{{0,0},{0,10},{10,10},{10,0},{0,0}}]}}]; Show[g,AspectRatio->Automatic]
随机游动 观察一个墨水分子在水中的运动轨迹. 由于受到水分子的碰撞,墨水分子随时都可能改变运动的方向,墨水分子的行进轨迹是一条处处不光滑的曲线,称这种运动方式为随机游动. 作为数学上一个著名的例子,随机游动的行进轨迹是一条处处连续但处处不可导的曲线,请模拟随机游动的过程.
gotonext[x_]:=x+{Random[Real,{-1,1}],Random[Real,{-1,1}]}; rdmmove[n_]:=Module[{location}, location=NestList[gotonext,{0,0},n]; Show[Graphics[{RGBColor[0,0,1],Line[location]}, AspectRatio->Automatic,PlotRange->All]]] rdmmove[50] rdmmove[1000]
蒙特卡罗方法 随机投点模拟 向平面上的矩形区域D=[0,1][0,1]内随机地投掷一粒石块,模拟石块落点的位置. 设落点的坐标为(x,y), x和y都是在[0,1]内均匀分布的随机数. 下面的程序模拟向D内随机投掷1000块石块的落点散布情况. pts[n_]:=Table[{Random[],Random[]},{k,1,n}] ListPlot[pts[1000],PlotStyle->PointSize[0.003], AspectRatio->Automatic]
蒙特卡罗方法 设g(x)是区间[0,1]上的连续函数, 且0g(x)1. 研究使用随机模拟方法计算定积分A= . 根据定积分的几何意义,A是曲线y=g(x)下文的曲边梯形的面积. 根据随机点的均布性,向矩形D内投掷随机点,落在A内的点数k与落在D内的总点数n之比恰为A与D的面积之比. 故A=k/n. 这种利用随机模拟进行近似计算的方法称为蒙特卡罗方法.
例1 已知定积分 ,使用蒙特卡罗方法计算该积分的近似值,并求的近似值. rdmIntegrate[n_]:=Module[{k,p=0.0}, Do[If[Random[]<=Sqrt[1-Random[]^2],k=1,k=0]; p=p+k,{x,n}]; return[p/n]] 4*rdmIntegrate[1000]