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...
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}] 展开
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 你的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换成<=0,可以吗
追答
用RegionPlot——虽然想这么说,但是RegionPlot对你这个式子的出图效果并不好。这里可以变通一下,利用Plot3D:
Plot3D[(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], {x, 0, 10}, {y, 0, 20}, PlotRange -> {0, 2}]
图中平的部分,就是小于等于0的部分——话说我怎么觉得这个曲面越看越眼熟,你是不是在贴吧还是知道上问过这个问题?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询