在Matlab中求解方程的计算耗时最少的方法是什么:
exp(ax)-ax+c=0
其中a
和c
是常量,x
是我要查找的值?目前我正在使用内置求解器函数,我知道解决方案是单值的,但它只是花费了比我想要的更长的时间。
发布于 2013-08-16 03:37:32
仅仅想让某些东西运行得更快是不足以实现这一点的。
而且,很抱歉,如果fzero不够快,那么对于一个通用的根查找工具来说,你不会做得更好。
如果你不使用fzero,那为什么不呢?毕竟,这是您没有命名的内置求解器。(要明确!否则,我们必须猜测。)也许您正在使用symbolic工具箱中的solve。它会更慢,因为它是一个象征性的工具。
如上所述,我可能会指出,通过认识到这实际上是一个只有一个参数c的问题,您可能会有所改进。
exp(y) - y + c = 0
哪里
y = ax
一旦你知道了y的值,除以a得到x。
当然,这种看待问题的方式显然表明你做了一个错误的陈述,即解决方案是单值的。对于c小于-1的任何负值,有两种解决方案。当c=-1时,解是唯一的,当c大于-1时,不存在实数形式的解。(如果您允许复杂的结果,那么也会有解决方案。)
因此,如果你必须经常解决上面的问题,而f0是不够的,那么我会考虑一个样条模型,在这个模型中,我已经预先计算了问题的解,对于足够多的不同的c值,对该样条模型进行插值,得到任意c的y的预测值。
如果我需要更高的精确度,我可能会从这一点开始走一步牛顿步。
如果你可以使用Lambert W函数,那么solve实际上给了我们一个解决一般问题的方法。(如您所见,我只是在猜测您试图用什么来解决这个问题,以及您的目标是什么。明确的问题有助于试图帮助你的人。)
solve('exp(y) - y + c')
ans =
c - lambertw(0, -exp(c))
lambertw的第一个参数为零会产生负解。事实上,我们可以使用lambertw来给出任何c不大于-1的正负实数解。
X = @(c) c - lambertw([0 -1],-exp(c));
X(-1.1)
ans =
-0.48318 0.41622
X(-2)
ans =
-1.8414 1.1462
https://stackoverflow.com/questions/18264572
复制相似问题