Mathematica求数值解,错在哪?

1个回答

  • 1 你的m的赋值式里面用了中文标点.

    2 Do是不会主动显示循环中的计算结果的,要使用Print语句,当然最方便的改法还是把Do改成Table.

    3 最关键的一点,这个超越方程恐怕不是Solve和NSolve能解的了的.可以考虑用FindRoot,不过这就需要你对解的范围有大概的了解,要了解解的范围,一个可能的方法,是使用ContourPlot观察解的位置:

    h = 4.13566743*(10^-15);

    m = 0.1*9.109*(10^-31);

    ContourPlot[(0.4 - 2*y)/(2*Sqrt[0.4*y - y^2])*Sinh[Sqrt[8*Pi^2*m*(0.4 - y)/h^2]*x/2]*Sin[Sqrt[8*Pi^2*m*y/h^2]*x/2] + Cosh[Sqrt[8*Pi^2*m*(0.4 - y)/h^2]*x/2]*Cos[Sqrt[8*Pi^2*m*y/h^2]*x/2] - Cos[x] == 0, {x, 0, 11}, {y, 0, 20}, PlotPoints -> 30]

    然后就根据图上显示的解的范围去寻根吧.