【问题标题】:Solve non-linear equation in Python/SageMath在 Python/SageMath 中求解非线性方程
【发布时间】:2015-04-08 12:48:18
【问题描述】:

我是 Python 和 SageMath 的新用户。

我有两个非线性方程:

  1. f(x)==h(x)
  2. g(x)+S_{i,j,k}(x) == 0

我知道我可以解决 1. 在数值上,做:

x = var('x')
find_root(f(x)==h(x), x, x_min, x_max)

在2.中,S_{i,j,k}(x)xi的三重求和函数,jk是求和的索引。我该如何用数值求解?

【问题讨论】:

    标签: python sum solver sage


    【解决方案1】:

    使用 Python 和 sympy,您可以使用 sympy.mpmath.nsum() 定义您的 S_{i,j,k}(x) 函数, 然后使用sympy.mpmath.findroot():

    import sympy.mpmath
    
    x = sympy.symbols('x')
    
    
    def S(x_):
        return sympy.mpmath.nsum(lambda i, j: x_*i + j, [0, 2], [3, 4])
    
    
    print('Function: {}'.format(S(x)))
    print('Solution: {}'.format(sympy.mpmath.findroot(S, -1)))
    

    打印:

    Function: 6.0*x + 21.0
    Solution: -3.5
    

    我选择了一个线性示例,但它也适用于非线性方程。

    【讨论】:

    • 谢谢!当我导入 sympy.mpmath x = sympy.symbols('x') A=2 def S(x): return sympy.mpmath.nsum(lambda i, j,k: (12*A^4*x^6 *i^4-30*A^2*x^3*i^2*(j^2+k^2)+3*(j^2+k^2^2)/(2*(A^2 *x^3*i^2+j^2+k^2) ^ (7/2)), [1, 500], [1, 500],[1,500]) S(1),系统碾压。 (^ 是效力**)。这是求和的上限(500)吗?在这种情况下,我该如何设置容限?最好的问候!!
    • @JosèLuisMietta 你少了一个括号。然而,即使使用正确的语法,我也会得到一个MemoryError,只是因为尝试调用S(1)(我想尝试解决它会很多更糟)。 [1,500] 表示 i 从 1 变为 500;使用1-50 我得到S(1) 等于9409331700000.48。我不知道我的回答是否能解决你的问题。
    • 非常感谢!使用 20 作为求和的极限(这样做可以避免崩溃内存问题),如果我尝试通过 sympy.mpmath.findroot(S(x) -x -2 求解方程 S(x)=x+2, 0),我收到错误“TypeError: unsupported operand parent(s) for '*': 'Symbolic Ring' and ''”,我做错了什么?最好的问候
    猜你喜欢
    • 1970-01-01
    • 2019-10-02
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多