Sympy: nonlinsolve () просто дает отношения между переменными - PullRequest
0 голосов
/ 04 апреля 2020

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.

Поскольку я плохо разбираюсь в математике, могут быть абсолютно бесконечные решения. Но сейчас я хочу верить, что есть что-то, чего я не знаю или скучаю.

Большое спасибо за вашу помощь !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...