Mathematica求数值解,错在哪?

问题描述:

Mathematica求数值解,错在哪?
h = 4.13566743*(10^-15)
m = 0.1*9.109*(10^-31)
Do[NSolve[(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,y}],{x,0,10,
1}]
1个回答 分类:综合 2014-10-18

问题解答:

我来补答
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]


然后就根据图上显示的解的范围去寻根吧.
再问: 那如果要把==0换成
 
 
展开全文阅读
剩余:2000