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

7 ビュー (過去 30 日間)
napot
napot 2022 年 11 月 22 日
回答済み: diwajab 2022 年 11 月 22 日
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没办法得到多解
——想用画图看,但出来的图是{空白的}!!曲线不见了
所以不知道该怎么办了,求大神们支招

採用された回答

diwajab
diwajab 2022 年 11 月 22 日
把 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.

その他の回答 (0 件)

カテゴリ

Help Center および File Exchange启动和关闭 についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!