将变量替换为不同的方程式

时间:2019-05-29 16:57:25

标签: substitution solver equation-solving

我正在尝试在python中解析langrange乘法器函数,但替换时遇到了麻烦。

我有一个巨大的方程式(这里将简化),其中包含5个变量(x,y,w,z,k)。我对这5个变量进行了该方程的偏导数,并获得了这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中,用等式7替代y,因此x等于k的函数(=等式8) -在等式7中,用等式8替代x,因此y等于k的函数(=等式9)

为此,我尝试使用sympy。功能解决隔离和替代。我能够隔离所有变量并将x代入方程式6(得到方程式8)。但是,当我尝试代入方程式8的x以便将其代入方程式6时,得到的结果为空。我以为这可能是因为等式两边都有x,但我不知道如何进行

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时,而不是让x = k的函数时,我得到零。我究竟做错了什么?我使用list的原因是,当我从等式1和2中分离出x和y时,结果不止一个

0 个答案:

没有答案