这个多解超越方程可以用什么方法呢。

7 views (last 30 days)
napot
napot on 22 Nov 2022
Answered: diwajab on 22 Nov 2022
function f=fun(E)
char E;
a=0.8;b=0.7;v0=8.1;e=2.71828;m=1;h=1;
k=(-2*m*E/(h^2))^(1/2);
l=(-2*m*(E+v0)/(h^2))^(1/2);
A=((l-k)*(e^((l+k)*a)-e^((l-k)*a)))/((l+k)*((((l-k)/(l+k))^2)*e^((-l-k)*a)-e^((l+k)*a)));
f=((l+k)*e^((l-k)*(2*a+b)))/((l-k)*e^((-l-k)*(2*a+b)))-((k-l)*e^((k+l)*(a+b))-A*(k+l)*e^((k+l)*(a+b)))/((k-l)*e^((k-l)*(a+b))-A*(k+l)*e^((k-l)*(a+b)));
end
求E在[-v0,0]范围内的数值解
——用solve解出来是
solve(@fun,E)
Warning: Explicit solution could not be found.
> In solve at 81
ans =
[ empty sym ]
——用fsolve没办法得到多解
——想用画图看,但出来的图是{空白的}!!曲线不见了
所以不知道该怎么办了,求大神们支招

Accepted Answer

diwajab
diwajab on 22 Nov 2022
把 char E; 去掉。用fsolve可以求解。
应为值域绝大部分是复数,所以不能作图。
fsolve搜索时,需要提供较好的初值。
fsolve(@fun,-7)
ans = -6.9905 + 0.0000i
fsolve(@fun,-0.1)
ans = -0.0400 - 0.0000i
可以根据值域做出2D图(有经过原点的,同时也发现少部分是实数。x轴上的点)。
根据自变量与值域的模做出2D图可以明显发现只有两个解。实部、虚部都为0,模才为0.

More Answers (0)

Categories

Find more on 启动和关闭 in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!