如何使用scipy leastsq设置最小化

2024-04-25 20:31:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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是因为我的实际网络要复杂得多,并且包含非线性元素(它实际上不是一个电气网络,而是一个液压网络)。你知道吗

非常感谢! 威廉


Tags: 方法网络scipy电网excel例子解决问题r2
1条回答
网友
1楼 · 发布于 2024-04-25 20:31:50

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

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参数。你知道吗

另外,如果可以定义Jacobian(可能还有Hessian)矩阵,还可以使用基于梯度的方法,分别传入jachess参数,这两个参数应该收敛得更快。你知道吗

相关问题 更多 >