我有以下方程组,我想同时求解X和Y。有人建议我可以使用numpy作为线性方程组来求解它们。那是最好的选择,还是有更好的方法?
a =((((f * X)+(f2 * X3))/(1 +(f * X)+(f2 * X3)))* i
b =((f2 * X3)/(1 +(f * X)+(f2 * X3)))* i
c =((f * X)/(1 +(j * X)+(k * Y)))* i
d =(((k * Y)/(1 +(j * X)+(k * Y)))* i
f = 0.0001
i = 0.001
j = 0.0001
k = 0.001
e = 0 = X + a + b + c
g = 0.0001 = Y + d
h =我-a
最佳答案
正如乔所指出的,这实际上是一个非线性方程组。您将需要比单独的numpy更强大的火力。
非线性方程的求解比较棘手,典型的方法是定义目标函数
F(z)= sum(e[n]
^ 2,n = 1 ... 13)
其中z是一个向量,其中包含13个变量a,b,c,d,e,f,g,h,i,X,Y
中的每个变量的值,而e[n]
是13个方程式中的每个违反量。例如
e[3] = (d - ((k * Y) / (1 + (j * X) + (k * Y))) * i )
一旦有了该目标函数,便可以应用非线性求解器尝试找到F(z)= 0的z。当然,这对应于您的方程式的解。
常用的求解器包括:
Microsoft Excel中的求解器
python库scipy.optimize
在Gnu Scientific Library中拟合例程
Matlab的optimization toolbox
请注意,如果在尝试运行求解器之前先更改等式组以消除尽可能多的变量(例如,在找到的任何地方均替换为
k
),则所有这些方法都将更好地工作。减小的尺寸有很大的不同。关于python - 同时求解方程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10158270/