我有以下方程组,我想同时求解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/

10-12 16:52