Python中非线性方程的数值解

时间:2018-10-31 18:42:37

标签: python python-3.x scipy numerical-methods numerical-analysis

我有一个非线性方程组的集合,该集合的数量可能有所不同,我想使用某种数值方法来解决这些约束。

我已经能够使用Solver在Excel中解决一个简单的(一个方程式)情况,但是之前在Python中没有将类似的东西放在一起,因此希望对方法提出建议。

进行了一些挖掘后,看起来fsolve是解决此类系统的流行方法。对于一个简单的两个方程式的情况,我的问题采用以下形式,为清楚起见,分为以下几部分:

enter image description here enter image description here

与第二个方程b的形式相同。

A是一个常数,变量Z,S和x是每个实体i的常数,并且唯一独立的值是指数a和b;两个方程式,两个未知数,因此应该有一个唯一的解。

正如我所说,我在Excel中设置了一个简单的方程式案例,并成功解决了使用规划求解的问题。任何在Python中进行设置的指导都值得赞赏。

3 个答案:

答案 0 :(得分:2)

您描述的问题是root finding之一。您想要找到f(a,b)= 0

的(a,b)

一种简单的方法是定点迭代。由于您具有f(a,b)的解析表达式,因此可以计算导数并使用牛顿法。要使用fsolve进行设置,您需要定义一个函数:

def myfunc(x):
    val1 = #evaluate your first expression here using Z and S
    val2 = #evaluate your second expression here
    return np.ndarray([val1 val2])

您可以选择使用* args参数传入S和Z的值。

然后使用以下方法解决:

fsolve(myfunc,x0)

其中x0是初始猜测。

请注意,fsolve可能不尊重您在w上的情况。如果您的问题不能完全满足要求,那么我会研究一种支持约束优化的方法,例如fmin_slsqp。无论哪种情况,语法都应与我为fsolve描述的语法非常相似。

答案 1 :(得分:0)

在上面的帮助下,我们可以将其组合在一起,对它表示感谢。我已经接受了约翰的回答;下面的解决方案代码供参考。

Collection

答案 2 :(得分:0)

以下是如何为非线性方程式设置Python解决方案的示例:

import numpy as np
from scipy.optimize import fsolve
from math import cos

# non-linear equations:
#  x0 cos(x1) = 4.
#  x0x1-x1 = 5.
def func2(x):
    out = [x[0]*cos(x[1]) - 4]
    out.append(x[1]*x[0] - x[1] - 5)
    return out


x02 = fsolve(func2, [1, 1])
print("x02: "+str(x02))

打印: x02:[6.50409711 0.90841421]

相关问题