Env: python3 + Sympy
Задача:
Я пытаюсь использовать Sympy
для решения нелинейных уравнений с четырьмя переменными. Но функция nonlinsolve
просто дает связь между переменными. Но я не думаю, что есть бесконечные решения для этого. И основной код указан ниже:
from sympy import Symbol, solve, cos, sin, nonlinsolve, solveset, Eq, linsolve
# four variables
x = Symbol('x')
x_dot = Symbol('x_dot')
theta = Symbol('theta')
theta_dot = Symbol('theta_dot')
costheta = cos(theta)
sintheta = sin(theta)
def calParentState(state):
# eq1, eq2, ... are float(e.g. 3.2)
eq1, eq2, eq3, eq4 = state
# some Intermediate process
temp = ((10 + 0.05 * theta_dot * theta_dot * sintheta) / 1.1)
thetaacc = ((9.8 * sintheta - costheta* temp) / (0.5 * (4.0/3.0 - 0.1 * costheta * costheta / 1.1)))
xacc = (temp - 0.05 * thetaacc * costheta / 1.1)
rst1 = nonlinsolve(
[Eq(eq1, x + 0.02 * x_dot), Eq(eq2, x_dot + 0.02 * xacc),
Eq(eq3, theta + 0.02 * theta_dot), Eq(eq4, theta_dot + 0.02 * thetaacc)],
[x, x_dot, theta, theta_dot]
)
print(rst1)
И Specifi c Вход и выход перечислены ниже:
Вход:
# eq1, eq2, eq3, eq4
(-4.0, -10.0, -0.3490658503988659, -10.0)
Выход:
FiniteSet(((1.13902135852837e-5*theta_dot**2*sin(0.02*theta_dot) + 4.1456987069778e-6*theta_dot**2*cos(0.02*theta_dot) + 0.0554452277861778*sin(0.04*theta_dot) - 0.0662156502564111*cos(0.04*theta_dot) + 2.44454545454545)/(0.0454545454545455*cos(0.02*theta_dot + 0.349065850398866)**2 - 0.666666666666667),
(-0.000569510679264187*theta_dot**2*sin(0.02*theta_dot) - 0.00020728493534889*theta_dot**2*cos(0.02*theta_dot) + 0.149500472902653*sin(0.04*theta_dot) - 0.1712376831748*cos(0.04*theta_dot) + 6.56060606060606)/(0.0454545454545455*cos(0.02*theta_dot + 0.349065850398866)**2 - 0.666666666666667),
-0.02*theta_dot - 0.349065850398866,
theta_dot))
output
немного сложнее, поэтому я намеренно оставил пустую строку между каждой переменной. Вы можете видеть, что другие три переменные представлены переменной theta_dot
.
Поскольку я плохо разбираюсь в математике, могут быть абсолютно бесконечные решения. Но сейчас я хочу верить, что есть что-то, чего я не знаю или скучаю.
Большое спасибо за вашу помощь !!!