数学基础回顾:线性代数、概率论、最优化理论在能源系统中的应用

各位同学好,我是老张。今天咱们聊聊数学基础。我知道很多人一听数学就头疼,觉得跟实际工程脱节。但说实话,在能源系统这个领域,数学就是你手里的扳手和螺丝刀。没有它,你连设备都拆不开。

我刚开始做微电网项目那会儿,也觉得自己编程好、懂电力就够了。结果第一次做多能互补调度,模型跑出来全是乱码。后来才发现,是矩阵求逆出了问题。嗯,从那以后,我再也不敢小看线性代数了。

核心观点:数学不是考试用的,是帮你把物理世界翻译成计算机能理解的语言。

2.1 线性代数:能源网络的骨架

线性代数在能源系统里,说白了就是描述“谁跟谁连着”以及“能量怎么流动”。你想想看,一个园区里有光伏、储能、燃气轮机、热泵,它们之间怎么耦合?用矩阵。

2.1.1 矩阵与能量流建模

我个人习惯用关联矩阵来表示设备之间的连接关系。比如一个简单的电-热耦合系统:

# 关联矩阵示例:行=设备,列=母线
# 1表示流出,-1表示流入,0表示不连接
A = [
    [1, 0, -1],  # 光伏:接电母线,流出
    [0, 1, -1],  # 热泵:接热母线,流出
    [-1, -1, 0]  # 负荷:从电和热母线流入
]

我在项目中遇到过一个问题:当设备数量超过50台时,手动写这个矩阵容易漏掉连接。我的建议是——用图论自动生成。先把设备画成节点,再用邻接矩阵自动转换,省时省力。

2.1.2 特征值与系统稳定性

特征值这玩意儿,听起来玄乎,其实就是系统的“脾气”。一个多能系统的状态矩阵,特征值的实部如果全是负数,系统就稳定。但凡有一个正数,系统就会发散。

我记得有一次做园区级综合能源仿真,模型怎么调都振荡。查了三天,最后发现是储能SOC的反馈系数写反了,导致特征值跑到右半平面去了。嗯,这就是线性代数在实战中的价值。

实战技巧:用Python的numpy.linalg.eig()快速计算特征值。如果发现实部大于0.01,赶紧检查参数。

2.2 概率论:应对不确定性

能源系统最大的特点是什么?不确定性。光伏出力看天,负荷需求看人,电价看市场。概率论就是帮你量化这些“说不准”的东西。

2.2.1 随机变量与概率分布

光伏出力的分布,我一般用Beta分布拟合。为什么?因为它的取值范围在0到1之间,正好对应归一化的出力系数。负荷预测则常用正态分布,但要注意——实际数据往往有厚尾现象,也就是极端值比正态分布预测的更多。

# 光伏出力概率密度函数示例
import numpy as np
from scipy.stats import beta

# 参数a=2, b=5 表示多云天气的出力分布
pv_dist = beta(a=2, b=5)
# 计算出力为0.3时的概率密度
pdf_value = pv_dist.pdf(0.3)

2.2.2 蒙特卡洛模拟

遇到复杂的不确定性场景,解析解算不出来怎么办?蒙特卡洛。说白了就是“暴力枚举”——生成一万种可能的情况,看结果分布。

我曾经用蒙特卡洛做过一个园区级电-热-气协同优化。跑了5000次模拟,发现最坏情况下的运行成本比平均值高出40%。这个信息直接影响了我们备用容量的设计。避坑指南:采样次数别太少,至少1000次以上,否则结果不稳定。

注意:蒙特卡洛不是万能的。如果输入变量的相关性很强(比如光伏和负荷在时间上相关),记得用Copula函数处理相关性,否则结果会失真。

2.3 最优化理论:寻找最优解

前面两个是基础,最优化才是真正干活的部分。你要在满足供需平衡、设备约束的前提下,让运行成本最低、碳排放最少、或者可再生能源消纳率最高。

2.3.1 线性规划与混合整数规划

线性规划(LP)是最简单的。目标函数和约束都是线性的,求解速度快。但实际中,设备启停、档位切换这些是离散变量,就得用混合整数线性规划(MILP)。

# 一个简单的经济调度问题
# 目标:最小化运行成本
# 变量:燃气轮机出力x1,储能放电x2
# 约束:供需平衡,设备上下限

min: 0.5*x1 + 0.3*x2
s.t. x1 + x2 >= 100  # 负荷需求
     0 <= x1 <= 80   # 燃气轮机容量
     0 <= x2 <= 50   # 储能容量

我个人习惯用PuLP或Pyomo来建模。为什么?因为它们能直接输出求解日志,方便调试。有一次模型一直无解,我打开日志一看,发现是约束写反了——把“大于等于”写成了“小于等于”。这种低级错误,日志里一眼就能看出来。

2.3.2 非线性优化与启发式算法

当系统里出现效率曲线、寿命衰减这些非线性关系时,线性规划就不够用了。这时候可以用序列二次规划(SQP)或者遗传算法。

但说实话,我建议能线性化就尽量线性化。非线性优化求解慢,而且容易陷入局部最优。我在一个项目中试过用粒子群算法做多目标优化,跑了两个小时才收敛。后来把效率曲线分段线性化,用MILP求解,五分钟搞定。嗯,这就是经验。

核心原则:能用线性别用非线性,能用凸优化别用启发式。简单、稳定、可解释,才是工程的首选。

2.4 三者如何协同?

你可能会问:这三个数学工具在同一个项目里怎么配合?我给你画个图就明白了。

多能协同控制中的数学工具协同 线性代数 网络拓扑建模 状态空间方程 特征值稳定性分析 概率论 不确定性量化 场景生成与缩减 风险指标计算 最优化理论 目标函数构建 约束条件处理 求解器调用与调参 输出:最优调度策略 满足物理约束 + 应对不确定性 + 最小化成本 图:三个数学工具在能源系统控制中的协同关系

你看,线性代数负责描述系统结构,概率论负责描述不确定性,最优化负责在结构约束下找到最优决策。三者缺一不可。

举个例子:一个园区级综合能源系统,先用线性代数建立设备-母线关联矩阵,再用概率论生成光伏和负荷的典型场景,最后用最优化求解每个场景下的最优调度。这就是完整的数学链条。

我的习惯:每次开始一个新项目,先花半天时间把这三个数学工具对应的代码框架搭好。线性代数用numpy,概率论用scipy.stats,最优化用PuLP或cvxpy。框架搭好了,后面就是填参数的事。

2.5 避坑总结

最后,我把自己踩过的坑总结一下,你们少走弯路:

  • 矩阵维度不匹配:做矩阵乘法前,先打印shape检查。我吃过一次亏,两个矩阵维度差1,结果算出来全是NaN。
  • 概率分布选型错误:别上来就用正态分布。光伏出力用Beta,风速用Weibull,负荷用正态但注意厚尾。
  • 最优化模型无解:先检查约束是否矛盾。一个简单的方法:把目标函数去掉,只求解可行性问题。
  • 忽略数值稳定性:矩阵条件数太大时,考虑用正则化或者换求解器。我一般用numpy.linalg.cond()检查。

好了,数学基础就讲到这里。这些东西看着枯燥,但你在项目里用上两三次,就会觉得它们比亲儿子还亲。下一节我们开始讲具体的多能协同控制算法,到时候这些数学工具都会用上。


公众号:蓝海资料掘金营,微信deep3321