如何用 Sympy 求解 Python 3 中的方程?
How to solve an equation in Python 3 with Sympy?
我是 Python 的新手,更多的是 Sympy,我正在尝试求解一个方程;用户引入等式和 'x' 的值。例子:eq: x**2+x*3+1, x = 4,所以把4代入等式'x',计算结果
这是我一直在尝试的:
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()
是一个有风险的东西,因为它会执行几乎任何东西。因此,请务必妥善保护用户输入,否则您的系统可能会被恶意用户输入破坏。有关详细说明,请参阅 this 答案。
我是 Python 的新手,更多的是 Sympy,我正在尝试求解一个方程;用户引入等式和 'x' 的值。例子:eq: x**2+x*3+1, x = 4,所以把4代入等式'x',计算结果
这是我一直在尝试的:
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()
是一个有风险的东西,因为它会执行几乎任何东西。因此,请务必妥善保护用户输入,否则您的系统可能会被恶意用户输入破坏。有关详细说明,请参阅 this 答案。