使用fsolve(scipy)猜测每个解的精度

mv1qrgav  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(68)

我想知道当我使用scipy.optimize.fsolve时,方程组中每个解的误差(或不确定性)。例如(来自文档):

import numpy as np
from scipy.optimize import fsolve

def func(x):
    return [x[0] * np.cos(x[1]) - 4,
            x[1] * x[0] - x[1] - 5]

root, infodict, ier, msg = fsolve(func, [1, 1], full_outupt=1)

我想知道root[0]root[1]的精度,而不是方法有多好(即r的值)。

nwnhqdif

nwnhqdif1#

在这种情况下,根据您如何解释“精度”,您可能需要调整答案(平方而不是绝对值以获得均方误差等)
由计算的解和精确解之间的差异引起的绝对误差由下式定义:

np.abs(func(root))

因为你期望在最优情况下结果为0,

np.abs(func(x_true)-func(root)) = np.abs(func(root))

如果你想知道x_trueroot之间的区别:你通常不能期望知道这个,否则你已经知道答案了,不必使用迭代算法来近似解。您只能使用fsolve(xtol=...)限制可接受的错误。
这就是算法与代数求解方程的本质,或者我错过了这里的重点?
如果你想用代数方法求解,可以看看SymPy和它的solver

相关问题