基于无迹变换的电网概率潮流分析 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,QlineT \mathbf{z} = V_1, V_2, \\dots, P_{line}, Q_{line}^T z=V1,V2,...,Pline,QlineT


三、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

相关推荐
IT小盘29 分钟前
04-大模型流式输出原理-SSE与Python实现
开发语言·网络·人工智能·python
清泓y39 分钟前
RAG 技术
算法·ai
不如语冰1 小时前
AI大模型入门-Python进阶-上下文管理与with语句
开发语言·数据结构·数据库·人工智能·pytorch·redis·python
阿慧今天瘦了嘛1 小时前
计算机组成原理概述:从硬件到软件的桥梁
计算机网络·算法
网站优化(SEO)专家1 小时前
SEO核心算法拆解:网站排名快速提升的武林秘籍!
算法·搜索引擎·网站排名·核心算法
阿童木写作1 小时前
Python批量翻译亚马逊商品图实战教程
开发语言·python·xcode
惊讶的猫2 小时前
CLGSI
人工智能·算法·机器学习
会飞的大鱼人3 小时前
一文搞懂 Java HashSet:把它想成游乐园里只允许一次入场的盖章名单
java·开发语言·windows
ysa0510303 小时前
【板子】二分答案(最大最小?)
c++·笔记·算法·板子
科技之门3 小时前
百公里管网漏损分级定位实战方案2026
前端·人工智能·算法