gpt4 book ai didi

python - 寻找用 Python 表示的方程的数值解

转载 作者:行者123 更新时间:2023-12-01 04:02:12 25 4
gpt4 key购买 nike

我想找到一个在 Python 中表示为无限和的方程的数值解。使用 fsolve()sympy 的简化示例如下:

from scipy.optimize import fsolve
import math
from sympy import *

i = symbols('i', integer=True)

def f(x):
return Sum(x**i, (i,0, oo)).evalf(10)-1

print fsolve(f, 0.5)

我收到错误:

AttributeError: 'list' object has no attribute 'is_commutative'

我尝试用仅包含有限项的和来替换无限和,并将函数 f() 输出类型转换为 float,但我得到了相同的错误。虽然这看起来是一项简单的任务,但我在 StackOverflow 或文档中找不到该问题的解决方案。

我的问题是:如何对用 Python 中的和表示的方程进行数值求解。

最佳答案

这个特定的总和不过是几何级数的总和。 sympy 同意:

In [23]: x = symbols('x')

In [24]: i = symbols('i', integer=True)

In [25]: Sum(x**i, (i, 0, oo)).doit()
Out[25]: Piecewise((1/(-x + 1), Abs(x) < 1), (Sum(x**i, (i, 0, oo)), True))

请注意,它对于 x >=1 是发散的。 Sympy 会引发错误(尝试 f(1.1)),而 fsolve 的内部尚未准备好处理该错误,这会以某种方式导致您看到的错误。

总的来说,我不认为用 l.h.s 求解方程有什么特别之处。被评估为总和。您需要以这种或那种方式确保您向 fsolve 或其相关函数提供的函数实际上返回数字输出。

此外,fsolve (i) 期望您的函数相当平滑并且 (ii) 它不处理边界。这样,如果您需要限制寻根的范围,最好使用 brentq。(在更高的维度中,寻找least_squares。)

原则上,您可以在函数中使用 try-except 并在不收敛的情况下返回 nan。这可能只会让求解器感到困惑,并且返回值很可能是垃圾。

关于python - 寻找用 Python 表示的方程的数值解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36285602/

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