问题描述
我正在尝试使用 fsolve 求解方程,但是我的方程是一个字符串。我尝试使用 eval 但这没有用。有没有办法传递字符串/将字符串转换为 fsolve 可以处理的东西?下面是我的代码:
NULL
解决方法
要解决方程式格式的字符串,可以使用 sympy,Python 的符号数学库。它有一个函数 parse_expr
可以处理 a.o.缺少乘法运算符。
{x: 2,y: 4}
结果:y
单独求解方程,用x
是from sympy import symbols,Eq,solve,lambdify
from sympy.parsing.sympy_parser import parse_expr
from sympy.parsing.sympy_parser import standard_transformations,implicit_multiplication_application
x,y = symbols("x y")
eqn1 = "4x + 3y = 20"
eqn2 = "-5x + 9y = 26"
equations = [eqn1,eqn2]
transformations = (standard_transformations + (implicit_multiplication_application,))
solutions = []
solutions_np = []
for eqn in equations:
sides = [parse_expr(s,transformations=transformations,local_dict={'x': x,'y': y})
for s in eqn.split('=')]
sol = solve([Eq(sides[0],sides[1])],y)
solutions.append(sol[y])
solutions_np.append(lambdify(x,sol[y]))
import numpy as np
import matplotlib.pyplot as plt
xs = np.linspace(-5,10)
for eqn,sol,sol_np in zip(equations,solutions,solutions_np):
plt.plot(xs,sol_np(xs),label=f'${eqn}$; $y = {sol}$')
plt.legend()
plt.show()
的函数,lambdify()
可以将解转换为numpy函数。下面是一些示例代码,将每个方程转换为函数,然后绘制它们。
import React from 'react'
const DeleayComponent = () => {
const [show,setShow] = React.useState(false)
React.useEffect(() => {
setTimeout(() => {
setShow(true)
},5000)
},[show])
if (!show) return null
return <>OK,Render</>
}
export default DeleayComponent