1 / 27

数学实验

数学实验. 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 用牛顿迭代法求任意正数的算术平方根.

colum
Download Presentation

数学实验

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 数学实验

  2. 3.6 牛顿迭代法 牛顿迭代法原理 求方程f(x)=0的根的迭代格式: 过程图解:

  3. 例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]

  4. 例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]

  5. 牛顿迭代法的收敛性 定理 设 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*.

  6. 例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]

  7. 利用割线法计算方程的根 例4 利用割线法求解方程 x ex-1=0.

  8. 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]]]}}]}}]

  9. 迭代过程的加速 一个简单的加速方法。 由不动点方程 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&)]

  10. 加速的原因 函数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&)]

  11. 牛顿迭代法是对基本迭代格式加速的结果 为求解方程f(x)=0,可以使用不动点方程 x=x+f(x),相应的迭代函数为 g(x)=x+f(x). 对迭代格式进行加速,得

  12. 3.8 越野赛问题及其它 越野赛问题 越野赛在湖边举行,场地如图所示. 出发点在陆地上A处,终点在湖心岛B处. A, B南北相距5km, 东西相距7km. 湖岸是一条东西走向的长堤,位于A点南侧2km. 比赛中运动员可以自由选择,但必须先从A点出发跑步到达长堤,再由长堤下水游泳达到终点B处 . 已知某运动员的跑步速度v1=18km/h, 游泳速度v2=6km/h, 问他应该在长堤的何处下水才能最快到达终点?

  13. y A(0,2) 北  R(x,0) x O  B(7,-3) 湖

  14. 跑步所耗时间 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

  15. y A(0,p)  R(x,0) x O  B(d,q) 光线的折射与反射 根据费马定理,光线总是沿着耗时最少的路径传播. 当光线从空气中A点出发到达水中B点时,由于传播速度的不同,光线在水面会发生折射现象. 设光线在空气中的传播速度为ca, 在水中的传播速度为cw,我们来确定光线的传播路线,并确定入射角与折射角之间的关系.

  16. 由于两点间的直线距离最最短,光线在同一介质中的传播路线都是直线. 光线的传播时间: 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

  17. 光线的折射定律与反射定律 折射定律 光线从一种介质射入另介质时会发生折射现象. 若光线在介质1中的速度为c1, 在介质2中的速度为c2, 则入射角与折射角必满足: 反射定律 光线在发生反射时,入射角等于反射角.

  18. 4.1 计算机模拟 盐水浓度问题 在水池中有2000 m3水,其中含盐2 kg,现以每分钟 6m3的速度向池中注入含盐率为 0.5 kg/m3的盐水,同时又以每分钟4 m3的速度从水池流出搅拌均匀的盐水. 每隔10min计算一次水池中水的体积、含盐量和含盐率. 请模拟实际过程,并将模拟数据进行列表. 从表中查出含盐率达到0.2kg/m3时所用的时间.

  19. 由于盐水的注入与流出,池中水的体积、含盐量与含盐率都随着时间不断变化. 初始时刻的含盐率为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}]]

  20. 四人追逐问题 在正方形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.

  21. 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]

  22. 随机游动 观察一个墨水分子在水中的运动轨迹. 由于受到水分子的碰撞,墨水分子随时都可能改变运动的方向,墨水分子的行进轨迹是一条处处不光滑的曲线,称这种运动方式为随机游动. 作为数学上一个著名的例子,随机游动的行进轨迹是一条处处连续但处处不可导的曲线,请模拟随机游动的过程.

  23. 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]

  24. 蒙特卡罗方法 随机投点模拟 向平面上的矩形区域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]

  25. 蒙特卡罗方法 设g(x)是区间[0,1]上的连续函数, 且0g(x)1. 研究使用随机模拟方法计算定积分A= . 根据定积分的几何意义,A是曲线y=g(x)下文的曲边梯形的面积. 根据随机点的均布性,向矩形D内投掷随机点,落在A内的点数k与落在D内的总点数n之比恰为A与D的面积之比. 故A=k/n. 这种利用随机模拟进行近似计算的方法称为蒙特卡罗方法.

  26. 例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]

More Related