【问题标题】:How to set up minimize with scipy leastsq如何使用 scipy leastsq 设置最小化
【发布时间】:2015-10-04 12:32:57
【问题描述】:

我正在尝试了解如何设置 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 的原因是因为我的实际网络要复杂得多并且包含非线性元素(它实际上不是电气网络,而是液压网络)。

非常感谢! 威廉

【问题讨论】:

    标签: python scipy minimize


    【解决方案1】:

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

    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 参数来使用基于梯度的方法,这应该会更快地收敛。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 2015-02-18
      相关资源
      最近更新 更多