数值求正根

2024-07-05 09:14:41 发布

您现在位置:Python中文网/ 问答频道 /正文

对于给定的M值,如何数值求解正E方程?我在Mathematica中尝试了FindRoot方法,但它从未收敛到正确的解。这里,M是任何正实数。我的目标是绘制M与E的曲线

Sqrt[E]*Cos[Sqrt[E]]=-M*Sin[Sqrt[E]]


Tags: 方法目标绘制sqrtsincos曲线数值
2条回答

如果您的唯一目标是绘制M与E的对比图,请使用

M = - √E cot(√E).

enter image description here

下面是Mathematica的一个方法,它似乎很有效:

In[37]:= FindRoot[x + 1/10 Tan[x], {x, # + Abs[#]*10^-14, (# + Pi) (1. - 10^-14)}, Method -> "Brent"] & /@ Range[-Pi/2, 50 Pi, Pi]
Out[37]= {{x -> 0.}, {x -> 1.63199}, {x -> 4.73351}, {x -> 7.86669},
          {x -> 11.0047}, {x -> 14.1442}, {x -> 17.2845}, {x -> 20.4252},
          {x -> 23.5662}, {x -> 26.7073}, {x -> 29.8485}, {x -> 32.9898},
          {x -> 36.1311}, {x -> 39.2725}, {x -> 42.4139}, {x -> 45.5553},
          {x -> 48.6967}, {x -> 51.8382}, {x -> 54.9797}, {x -> 58.1212},
          {x -> 61.2627}, {x -> 64.4042}, {x -> 67.5457}, {x -> 70.6872},
          {x -> 73.8288}, {x -> 76.9703}, {x -> 80.1119}, {x -> 83.2534},
          {x -> 86.395}, {x -> 89.5365}, {x -> 92.6781}, {x -> 95.8196},
          {x -> 98.9612}, {x -> 102.103}, {x -> 105.244}, {x -> 108.386},
          {x -> 111.527}, {x -> 114.669}, {x -> 117.811}, {x -> 120.952},
          {x -> 124.094}, {x -> 127.235}, {x -> 130.377}, {x -> 133.518},
          {x -> 136.66}, {x -> 139.802}, {x -> 142.943}, {x -> 146.085},
          {x -> 149.226}, {x -> 152.368}, {x -> 155.509}}

本质上,通过替换Sqrt[E] = x,您只需要求解x + M Tan[x] == 0,而这就是正的Mx。您知道Tan[x]每乘以Pi/2 + kPi就改变一次符号。所以你知道每]Pi/2 + k Pi, Pi/2 + (k+1) Pi[总有一个根。我们在这里使用Brent的方法,因为这可以确保始终在正值和负值之间找到根,并且由于Tan[x]的性质,我们知道靠近相应区间边界的值具有相反的符号

我们也使用FindRoot代替NSolve,因为NSolve是为多项式设计的

相关问题 更多 >