我有以下一组方程,我想同时求解 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 = i - a
最佳答案
正如 Joe 所指出的,这实际上是一个非线性方程组。您将需要比 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/