Python 3.x 如何使用Symphy在Python 3中求解方程?
我对Python和Symphy都有新的了解,我试图解决一个方程;用户介绍方程式和“x”的值。示例:等式:x**2+x*3+1,x=4,因此应在等式的“x”上替换4,并计算结果 这就是我一直在尝试的:Python 3.x 如何使用Symphy在Python 3中求解方程?,python-3.x,math,sympy,equation-solving,Python 3.x,Math,Sympy,Equation Solving,我对Python和Symphy都有新的了解,我试图解决一个方程;用户介绍方程式和“x”的值。示例:等式:x**2+x*3+1,x=4,因此应在等式的“x”上替换4,并计算结果 这就是我一直在尝试的: import sympy from sympy.solvers import solve from sympy.core.function import Derivative from sympy.core.relational import Eq from sympy.core.symbol im
import sympy
from sympy.solvers import solve
from sympy.core.function import Derivative
from sympy.core.relational import Eq
from sympy.core.symbol import Symbol
x = Symbol('x')
info = input("Introduce the equation and the value of /'x' \nEg: x**3+x**2+1 9\n")
infoList = info.split()
equation = infoList[0]
x_value = infoList[1]
expr = equation
eqResult = expr.subs(x, x_value)
print(eqResult)
错误在于作为str对象的expr
没有属性subs
。
感谢您的帮助
更新
函数eval()
工作正常,但是否有风险较小的解决方案?
我一直在做其他事情,并试图计算函数的导数:
x = Symbol('x')
info = input("Introduce the equation and the value of /'x' \nEg: x**3+x**2+1 9\n")
infoList = info.split()
equation = infoList[0]
x_value = infoList[1]
exprDerivada = Derivative(equation, x)
resultDerivate = exprDerivada.doit().subs({x:x_value})
上面的代码给出了一个函数的第一个导数的结果,但方程是可以接受的,因为它没有函数:eval()
再次感谢您的帮助。您发送的字符串对象实际上没有
subs
属性使用
eval(expr).subs(…)
将字符串转换为数学表达式。然而,使用
eval()
是一种危险的东西,因为它几乎可以执行任何事情。因此,请确保正确保护用户输入,否则您的系统可能会被恶意用户输入破坏。有关详细解释,请参阅答案。@Mayeul\u sgc好的,我明白了,有没有风险较小的解决方案?此外,我还做了其他操作:我尝试使用相同的输入方法计算函数的导数,它不需要函数eval()
,可以很好地处理:导数(等式,x)
,我更新了问题,不管怎样,你的答案就是我需要的。你可以使用simpleeval
软件包,但我自己从来没有用过。如果答案回答了您的问题,请毫不犹豫地标记为已解决,您可以使用sympy的parse_expr
功能。