You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GEKKO进行开关电源电路建模:是否超出其适用场景?

GEKKO在开关电源DAE仿真与参数估计中的适配性及方波输入实现

GEKKO完全支持开关电源这类非线性时变微分代数方程(DAE)的仿真与参数估计,不属于超出预期使用场景的范畴。针对你提到的周期时变方波输入V_DR(t),可通过以下两种方式实现:

方式1:用内置阶跃函数组合生成方波

借助GEKKO的m.step()函数,通过多阶跃信号叠加构建周期方波,示例代码如下:

from gekko import GEKKO
import numpy as np

m = GEKKO(remote=False)
nt = 1001
m.time = np.linspace(0, 10, nt)  # 定义仿真时间范围

# 方波参数:周期T、高低电平幅值
T = 1.0
V_high = 5.0
V_low = 0.0

# 生成多段阶跃信号
steps = []
for i in range(int(m.time[-1] / T)):
    step_time = i * T
    steps.append(m.step(step_time, V_high - V_low))

# 叠加得到完整方波
V_DR = m.Const(V_low)
for s in steps:
    V_DR += s

# 定义模型变量与方程
e1 = m.Var(value=0)
e3 = m.Var(value=0)
d = m.Intermediate(e1 - e3)

G_on = m.Param(value=0.1)
g1 = m.Param(value=0.05)
g2 = m.Param(value=0.03)
i1 = m.Var(value=0)
m.Equation(i1 + G_on*d*(1 + (V_DR - abs(V_DR))/(2*V_DR)) + (g1+g2)/2*d + (g1-g2)/2*abs(d) == 0)

# 设置仿真模式并求解
m.options.IMODE = 4
m.solve(disp=True)

方式2:导入预生成的方波数组

若方波规则复杂,可先用NumPy生成方波数据,再通过m.Param()导入为时变参数:

import numpy as np
from gekko import GEKKO

m = GEKKO(remote=False)
nt = 1001
t = np.linspace(0, 10, nt)
m.time = t

# 生成周期1s、占空比50%的方波
V_DR_data = np.where(np.mod(t, 1.0) < 0.5, 5.0, 0.0)
V_DR = m.Param(value=V_DR_data)

# 后续模型定义与求解步骤同方式1

补充说明

  • 针对高频开关的稳态分析,可直接在GEKKO中实现开关平均后的模型,或完成周期仿真后通过IMODE=1(稳态求解模式)结合平均约束获取稳态解,无需直接令全模型导数为0。
  • 参数估计需求可通过设置IMODE=2(参数估计模式),以实测响应与模型输出的误差最小化为目标求解元件参数,完全匹配你的需求。

内容的提问来源于stack exchange,提问作者Erik Iverson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 11:56:23