基于无迹变换的电网概率潮流分析 MATLAB 实现

基于无迹变换(Unscented Transformation, UT)的电网概率潮流分析 MATLAB 实现


一、整体思路(工程级)

复制代码
随机输入变量(负荷、风电、光伏)
        ↓
无迹变换(UT)生成 Sigma 点
        ↓
逐点执行确定性潮流计算(Newton‑Raphson)
        ↓
加权统计输出变量(电压、功率)
        ↓
概率指标(均值、方差、PDF、越限概率)

二、电网概率潮流数学模型

1、输入随机变量

x=[PL1,QL1,PW1,PPV1,... ]T \mathbf{x} = [P_{L1}, Q_{L1}, P_{W1}, P_{PV1}, \dots]^T x=[PL1,QL1,PW1,PPV1,...]T

  • 负荷:正态分布
  • 风电:Weibull → Nataf 变换 → 高斯空间
  • 光伏:Beta → Nataf 变换 → 高斯空间

2、输出变量

z=[V1,V2,...,Pline,Qline]T \mathbf{z} = [V_1, V_2, \dots, P_{line}, Q_{line}]^T z=[V1,V2,...,Pline,Qline]T


三、MATLAB 主程序

主脚本:ut_probabilistic_power_flow.m

matlab 复制代码
%% ===============================
% 基于无迹变换的电网概率潮流分析
% 适用:IEEE 标准算例(Matpower)
% ===============================
clear; clc; close all;

%% 1. 载入电网数据(IEEE 14节点为例)
mpc = loadcase('case14');
baseMVA = mpc.baseMVA;

%% 2. 定义随机变量(负荷 + 风电)
% 格式:[均值, 标准差]
% 假设:节点 9、14 为负荷随机波动
%       节点 6 为风电机组
random_vars = [
    1.0, 0.05;   % P9 负荷
    1.0, 0.05;   % Q9 负荷
    1.0, 0.05;   % P14 负荷
    1.0, 0.05;   % Q14 负荷
    0.8, 0.2;    % 风电 P6 (均值0.8pu,波动20%)
];

n = size(random_vars,1);   % 随机变量维数
kappa = 1;                 % UT 缩放因子

%% 3. 无迹变换 Sigma 点生成
mean_x = random_vars(:,1);
std_x  = random_vars(:,2);

cov_x = diag(std_x.^2);
L = chol(cov_x, 'lower');

lambda = n + kappa;
N_sigma = 2*n + 1;

Wm = zeros(1, N_sigma);   % 均值权重
Wc = zeros(1, N_sigma);   % 协方差权重

sigma_pts = zeros(n, N_sigma);

% 第0个 Sigma 点
sigma_pts(:,1) = mean_x;
Wm(1) = kappa / lambda;
Wc(1) = Wm(1);

% 其余 Sigma 点
for i = 1:n
    sigma_pts(:, i+1)   = mean_x + sqrt(lambda)*L(:,i);
    sigma_pts(:, i+1+n) = mean_x - sqrt(lambda)*L(:,i);
    Wm(i+1)     = 0.5/lambda;
    Wm(i+1+n)   = 0.5/lambda;
    Wc(i+1)     = 0.5/lambda;
    Wc(i+1+n)   = 0.5/lambda;
end

%% 4. 确定性潮流计算
nbus = size(mpc.bus,1);
V_out = zeros(nbus, N_sigma);

fprintf('开始 UT 概率潮流计算(共 %d 个场景)...\n', N_sigma);

for k = 1:N_sigma
    mpc_run = mpc;

    % ===== 注入随机功率 =====
    mpc_run.bus(9,3) = sigma_pts(1,k) * baseMVA;  % P9
    mpc_run.bus(9,4) = sigma_pts(2,k) * baseMVA;  % Q9
    mpc_run.bus(14,3)= sigma_pts(3,k) * baseMVA;  % P14
    mpc_run.bus(14,4)= sigma_pts(4,k) * baseMVA;  % Q14
    mpc_run.gen(3,2) = sigma_pts(5,k) * baseMVA;  % 风电 P6

    % ===== 执行潮流 =====
    results = runpf(mpc_run);

    if results.success
        V_out(:,k) = results.bus(:,8);  % 电压幅值
    else
        V_out(:,k) = NaN;
    end
end

%% 5. 统计输出变量
V_mean = zeros(nbus,1);
V_cov  = zeros(nbus,nbus);

for i = 1:nbus
    V_mean(i) = sum(Wm' .* V_out(i,:)');
    tmp = V_out(i,:)' - V_mean(i);
    V_cov(i,i) = sum(Wc .* tmp.^2);
end

%% 6. 结果展示
fprintf('\n========== 概率潮流结果 ==========\n');
for i = 1:nbus
    fprintf('Bus %2d: 电压均值 = %.4f pu, 标准差 = %.4f pu\n', ...
        i, V_mean(i), sqrt(V_cov(i,i)));
end

%% 7. 可视化
figure;
subplot(1,2,1)
histogram(V_out(9,:), 30, 'Normalization','pdf');
title('节点9电压概率密度');
xlabel('电压(pu)'); ylabel('概率密度');

subplot(1,2,2)
[f,x] = ksdensity(V_out(9,:));
plot(x,f,'LineWidth',1.5);
title('节点9电压PDF(核密度估计)');
grid on;

四、非高斯风光出力处理

Weibull 风电 → 高斯空间(Nataf)

matlab 复制代码
function x_gauss = weibull_to_gauss(P_mean, P_std)
% 将 Weibull 分布映射到标准正态空间
c = (P_mean / P_std)^2;
k = (0.9874 / c)^0.25;
lambda = P_mean / gamma(1+1/k);

% 抽样 Weibull
P_sample = wblrnd(lambda, k, [1000,1]);

% Nataf 变换
x_gauss = norminv(empirical_cdf(P_sample, P_sample));
end

参考代码 基于无迹变换算法的电网概率潮流分析 www.youwenfan.com/contentcsu/64377.html

五、与蒙特卡洛法对比

方法 计算量 精度 适用性
Monte Carlo 10⁴--10⁵ ★★★★★ 基准
UT 2n+1 ★★★★☆ 推荐
FOSM 1 ★★☆☆☆ 弱非线性

六、工程经验总结

协方差矩阵必须正定 → 加 1e-6*eye(n)
Sigma 点需越限检查 (电压/功率上下限)
大规模电网 → 仅对关键节点做 UT
概率最优潮流(P‑OPF) → UT + 多场景 OPF

相关推荐
ProgramHelpOa1 小时前
Optiver 2026 OA 全面复盘|26NG / Intern 最新高频题型整理
人工智能·算法·机器学习
Java成神之路-1 小时前
【算法刷题笔记】全题型导航目录
笔记·算法
爱写代码的倒霉蛋1 小时前
2022年天梯赛L1-8真题解析(哈希+排序)
数据结构·算法
时空系2 小时前
第13篇:综合实战——制作我的小游戏 Rust中文编程
开发语言·后端·rust
Struggle_97552 小时前
算法知识-倍增算法
算法
计算机安禾2 小时前
【计算机网络】第5篇:网桥学习与生成树算法——环路拓扑中的路径收敛问题
学习·计算机网络·算法
CoderCodingNo2 小时前
【信奥业余科普】C++ 的奇妙之旅 | 19:内存的门牌号——地址与指针的设计原理
开发语言·c++
fie88892 小时前
基于遗传算法的机械故障诊断MATLAB程序
算法·机器学习·matlab
nlpming2 小时前
opencode MCP(Model Context Protocol)配置手册
算法