Преобразование переменных с симпой - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть программа, в которой я хочу преобразовать переменную в другую в уравнении. Идея состоит в том, чтобы получить информацию от пользователя, которая представляет собой уравнение, и преобразовать переменные symboli c в другие. Вот пример:


from sympy import symbols, limit, diff
x_1, x_2, X_1, X_2 = symbols('x_1 x_2 X_1 X_2')
def afosm_nl_ls(x_1_mean, x_2_mean, x_1_std, x_2_std, g):
    x_1 = X_1*x_1_std + x_1_mean
    x_2 = X_2*x_2_std + x_2_mean

    g = g.subs((x_1, X_1), (x_2, X_2))
    print(g)


afosm_nl_ls(50, 30, 3, 2, x_1**2 + 1 - x_2)

Дайте мне этот вывод:

x_1**2 - x_2 + 1

Затем я хочу заставить x_i обратиться к X_i*x_i_std + x_i_mean. Я сделал это легко без функции, просто используя это:

from sympy import limit, diff, symbols
x_1, x_2, X_1, X_2 = symbols('x_1 x_2 X_1 X_2')
x_1 = X_1*3 + 50
x_2 = X_2*2 + 30
g = x_1**2 + 1 - x_2
print(g)

Где результат:

-2*X_2 + (3*X_1 + 50)**2 - 29

Итак, как мне написать код в функции, чтобы все еще получить уравнение от пользователя и получить правильное преобразование?

1 Ответ

0 голосов
/ 19 апреля 2020

Вы переопределили x_1 и x_2 как выражения в функции, поэтому subs не смог их найти. И вы также ввели неправильный ввод в subs. Ввод должен быть subs(old, new) или subs(list of (old, new)) - сравните, что у вас есть с этим:

from sympy import symbols, limit, diff
x_1, x_2 = symbols('x_1 x_2')
def afosm_nl_ls(x_1_mean, x_2_mean, x_1_std, x_2_std, g):
    v1 = x_1*x_1_std + x_1_mean
    v2 = x_2*x_2_std + x_2_mean
    return g, g.subs([(x_1, v1), (x_2, v2)])

afosm_nl_ls(50, 30, 3, 2, x_1**2 + 1 - x_2)

, что дает

(x_1**2 - x_2 + 1, -2*x_2 + (3*x_1 + 50)**2 - 29)
...