如何使用scipy leastsq设置最小化

时间:2015-07-15 12:50:01

标签: python scipy minimize

我试图了解如何设置python scipy最小化问题。 这是我从Excel Solver问题中获取的一个示例。 解释问题的最简单方法是尝试解决一个非常简单的电网:

R1: 100
R2: 1000
R3: 50
U: 10

三个电阻,两个并联(R2,R3),然后与R1串联。电源10伏

控制方程式

i1 - i2 - i3 = 0
U - i1*R1 - i2*R2 = 0
U - i1*R1 - i3*R3 = 0

通过最小化作为

给出的目标函数来找到i1,i2,i3的解
(i1-i2-i3)**2 + (U-i1R1-i2R2)**2 + (U-i1*R1-i3R3)**2

如何在scipy leastsq中实现此问题?

我想使用leastsq的原因是因为我的实际网络要复杂得多并且包含非线性元素(它实际上不是电气网络,而是液压网络)。

非常感谢! 威廉

1 个答案:

答案 0 :(得分:0)

首先定义实际的目标函数,它必须将未知变量作为参数

def objective(x):
    i1, i2, i3 = x
    R1 = 100
    R2 = 1000
    R3 = 50
    U = 10
    return (i1-i2-i3)**2 + (U-i1*R1-i2*R2)**2 + (U-i1*R1-i3*R3)**2

然后你提供一些关于你的电流的初步猜测

x0 = [1.0, 1.0, 1.0]  # or whatever you want to start with

然后拨打minimize

from scipy.optimize import minimize
res = minimize(objective, x0)

如果您想指定a specific minimization algorithm,也可以传递method参数。

另外,如果你可以定义雅可比矩阵(可能还有你的Hessian矩阵),你也可以通过分别传入jachess参数来使用基于梯度的方法,这些参数应该更快收敛