x**3-2*x-5=0
得到以下形式x= p(x),其中p(x)是连续可微的:
x=5/(x**2-2)
x=(2*x+5)**(1/3)
x=(x**3-5)/2
发布于 2018-01-16 21:02:46
这只是一个粗略的解决方案..
from sympy import *
import numpy as np
var('x')
expr=sympify('x**3-2*x-5')
p = poly(expr);
p1=factor(p-(p).coeff_monomial(1))
for i in p1.args:
if (poly(i).is_monomial):
z=(np.prod([j for j in p1.args if j!=i]))
p2=(-(p).coeff_monomial(1)/z)**(1/degree(i));
v=i.coeff(x)
if p2:print(p2)
elif v:
p2=(-z/v)
print(p2)
for i in (p.all_terms())[:-1]:
if i[1]:
p3= ((i[1]*x**i[0][0]-expr)/i[1])**(1/Integer(i[0][0])) ;print(p3);
'''o
5/(x**2 - 2)
(2*x + 5)**(1/3)
x**3/2 - 5/2
'''
发布于 2018-01-16 13:11:07
给定一个假设为零的表达式,例如expr = x**3-2*x-5
,可以以多种方式形成方程x= p(x)。最简单的方法是将x加到两边:Eq(x, expr + x)
。
这将如预期的那样打印:pprint(Eq(x, expr + x))
3
x = x - x - 5
几个更有趣的重写:
牛顿法的迭代:Eq(x, simplify(x - expr/diff(expr, x)))
3
2⋅x + 5
x = ────────
2
3⋅x - 2
将前导项单独放在一边,然后扎根:
p = poly(expr)
Eq(x, (LM(p) - expr)**(1/degree(p)))
3 _________
x = ╲╱ 2⋅x + 5
https://stackoverflow.com/questions/48274101
复制相似问题