gpt4 book ai didi

matlab - 在 matlab 中求解 x 的 exp(ax)-ax+c=0 最快的方法是什么

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

在 Matlab 中求解方程最耗时的方法是什么:

exp(ax)-ax+c=0 

ac 是常量,x 是我要查找的值?目前我正在使用内置的求解器函数,我知道解是单值的,但它花费的时间比我想要的要长。

最佳答案

仅仅希望某些东西运行得更快是不够的。

而且,抱歉,如果 fzero 不够快,那么对于通用的根查找工具来说,您也不会做得更好。

如果您不使用 fzero,那为什么不呢?毕竟,这是您没有命名的内置求解器。 (明确!否则我们必须猜测。)也许您正在使用符号工具箱中的 solve。它会更慢,因为它是一个符号工具。

综上所述,我可能会指出,您可以通过认识到这确实是单个参数 c 的问题来进行改进。即把问题转化为求解

exp(y) - y + c = 0 

在哪里

y = ax

一旦知道 y 的值,除以 a 即可得到 x。

当然,这种看待问题的方式很明显表明您的陈述不正确,解是单值的。对于小于 -1 的 c 的任何负值,有两种解决方案。当c=-1时,解唯一,当c大于-1时,实数无解。 (如果你允许复杂的结果,那么那里也会有解决方案。)

因此,如果您必须经常解决上述问题,而 fzero 是不够的,那么我会考虑一个样条模型,在该模型中,我已经针对足够数量的不同 c 值预先计算了问题的解决方案。对该样条模型进行插值以获得任何 c 的 y 预测值。

如果我需要更高的准确性,我可能会从该点开始采取单个牛顿步。

如果您可以使用 Lambert W 函数,那么 solve 实际上确实为我们提供了一般问题的解决方案。 (如你所见,我只是在猜测你试图用什么来解决这个问题,你的目标是什么。明确的问题可以帮助试图帮助你的人。)

solve('exp(y) - y + c')
ans =
c - lambertw(0, -exp(c))

lambertw 的零第一个参数产生负解。事实上,我们可以使用 lambertw 为任何不大于 -1 的 c 提供正实数解和负实数解。

X = @(c) c - lambertw([0 -1],-exp(c));
X(-1.1)
ans =
-0.48318 0.41622

X(-2)
ans =
-1.8414 1.1462

关于matlab - 在 matlab 中求解 x 的 exp(ax)-ax+c=0 最快的方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18264572/

28 4 0