gpt4 book ai didi

matlab - 在 MATLAB 中求解指数方程

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:43 26 4
gpt4 key购买 nike

作为我作业的一部分,我现在正尝试在 MATLAB 中求解指数方程。很容易看出方程

exp(-t)+t*exp(-t)-n=0

会有两个解,一个大于零,一个小于零。

但是,仅使用 solve 函数,MATLAB 返回一个称为 lambertw 函数的东西,它只能对零以下的解求 eval(),这恰好不是我想要的答案。有人可以帮我吗?

提前感谢所有的回答和评论!

附注作为替代方案,我正在考虑使用 Newton-Raphson 方法来解决它,但我想知道与 solve() 相比速度如何?

魏紫瑶

最佳答案

在下面的代码中,我对 n=0.5(常量)的方程进行了数值求解,但对于您选择的其他值,它应该是相似的。

请注意 SOLVE 函数如何只返回找到的第一个解。因此,我直接调用 MuPAD 引擎,并指定每次搜索解决方案的时间间隔:

%# lets plot the function: f(x) = exp(-x)+x*exp(-x)
h(1) = ezplot('0.5', [-1.5 10]); hold on
h(2) = ezplot('exp(-x)+x.*exp(-x)', [-1.5 10]);
set(h(1), 'LineStyle',':', 'Color','r')
legend(h, 'y = 0.5', 'y = exp(-x)+x.*exp(-x)')

%# The numeric solver only returns the first solution that it finds
x = solve('exp(-x)+x*exp(-x)=0.5')
x = vpa(x)

%# we can call the MuPAD solver and give the interval where solution can be found
x1 = evalin(symengine, 'numeric::solve(exp(-x)+x*exp(-x)=0.5, x = -1..0)')
x2 = evalin(symengine, 'numeric::solve(exp(-x)+x*exp(-x)=0.5, x = 0..3)')

%# show the solutions on the plot
plot([x1 x2], 0.5, 'ro')

SOLVE 返回的解:

x =
- 1.0*lambertw(0, -1/(2*exp(1))) - 1.0
x =
-0.76803904701346556525568352607755

MuPAD 数值解:

x1 =
-0.76803904701346556525568352607755
x2 =
1.6783469900166606534128845120945

enter image description here

关于matlab - 在 MATLAB 中求解指数方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5838796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com