Подставляя переменные в разные уравнения - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь разрешить функцию множителя Лангранжа в Python, но у меня возникают проблемы с подстановками.

У меня есть огромное уравнение (я здесь упросту) с 5 переменными (x, y, w,г, к).Я сделал частную производную этого уравнения для этих 5 переменных и получил эти пять уравнений (буква в верхнем регистре - это константа, а имя в скобках - это имя уравнения в моем коде на python).Но у меня возникли проблемы с первым 2

1) A C k y ^ 2 / (B x + C y) ^ 2 - Fk (sx) 2) A B k x ^ 2 / (B x + C y) ^ 2 - Gk (sy)

Мое намерение таково:- В уравнении 1 изолировать x, поэтому x будет равен функции y и k (= уравнение 6) - В уравнении 2 изолировать y, так что y будет равен функции x и k (= уравнение 7) - Вуравнение 6 замените y на уравнение 7, поэтому x будет равен функции k (= уравнение 8) - В уравнении 7 замените x на уравнение 8, так что y будет равно функции k (= уравнение 9)

Для этого я пытаюсь использовать симпй.Функция решает для изоляции и замены для замены.Мне удалось выделить все переменные и заменить х в уравнении 6 (получая уравнение 8).Но когда я пытаюсь заменить, чтобы изолировать x уравнения 8, чтобы я мог использовать его для замены в уравнении 6, я получаю пустые результаты.Я думал, что это может быть потому, что у меня есть х в обеих сторонах уравнения, но я не знаю, как поступить

from __future__ import division
from sympy import *
init_printing()

### define varibles
x,y,w,z,k = symbols('x y w z k',real=True)

### define constants
A, B, C, D, E, F, G, H, I, alpha, beta = symbols('A B C D E F G H I alpha beta',real=True)

### define function
def f(x,y,w,z,k): return  k * A * x * y / (B * x + C * y) + \
                            \
                            D * w **alpha + \
                            \
                            E * z **beta - \
                            \
                            F * x + G* y - \
                            \
                            H*w- \
                            \
                            I*z
#************************ X  ***********************************

# --------------> DERIVATIVE X
d1 = Derivative(f(x,y,w,z,k),x) #define que será feito derivada parcial de x
dx = d1.doit() #realiza derivada

# --------------> SIMPLIFY x (EQUATION 1)
sx = simplify(dx)

# --------------> ISOLATE x => x = f(y,k) (EQUATION 6)
x_yk = solve(sx,x)
print('------------------------- k em relação a x')
display(x_yk)


#************************ Y ***********************************

# --------------> DERIVATIVE y
d2 = Derivative(f(x,y,w,z,k),y)
dy = d2.doit()
# --------------> SIMPLIFY y (EQUATION 2)
sy = simplify(dy)

# --------------> ISOLATE y => y = g(x,k) (EQUATION 7)
y_xk = solve(sy,y)
print('------------------------- k em relação a y')
display(y_xk)

#************************ SUBSTITUTIONS ***********************************

###### EQUATION 8
x_xk = []
for i in range(len(y_xk)):
    for z in range(len(x_yk)): 
        x_xk.append(solve(sx,x)[z].subs(y,solve(sy,y)[i]))
display(x_xk)

###### Isolate x in equation 8
x_k = []
for i in range(len(x_xk)):
     x_k.append(solve(x_xk[i],x))
print('------------------------- Substitui x por y')
display(x_k)

Когда я пытаюсь выделить х в уравнении 8, вместо того, чтобы получить х =функция ки получить ноль.Что я делаю неправильно?Я использовал список, потому что есть несколько результатов для x и y, когда я изолирую их от уравнения 1 и 2

...