首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在matlab中求解x的exp(ax)-ax+c=0的最快方法是什么?

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

Stack Overflow用户
提问于 2013-08-16 09:45:45
回答 1查看 957关注 0票数 3

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

代码语言:javascript
运行
复制
exp(ax)-ax+c=0 

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

EN

回答 1

Stack Overflow用户

发布于 2013-08-16 11:37:32

仅仅想让某些东西运行得更快是不足以实现这一点的。

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

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

如上所述,我可能会指出,通过认识到这实际上是一个只有一个参数c的问题,您可能会有所改进。

代码语言:javascript
运行
复制
exp(y) - y + c = 0 

哪里

代码语言:javascript
运行
复制
y = ax

一旦你知道了y的值,除以a得到x。

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

因此,如果你必须经常解决上面的问题,而f0是不够的,那么我会考虑一个样条模型,在这个模型中,我已经预先计算了问题的解,对于足够多的不同的c值,对该样条模型进行插值,得到任意c的y的预测值。

如果我需要更高的精确度,我可能会从这一点开始走一步牛顿步。

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

代码语言:javascript
运行
复制
solve('exp(y) - y + c')
ans =
c - lambertw(0, -exp(c))

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

代码语言:javascript
运行
复制
X = @(c) c - lambertw([0 -1],-exp(c));
X(-1.1)
ans =
     -0.48318      0.41622

X(-2)
ans =
      -1.8414       1.1462
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18264572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档