matpower进行bad data detection
时间: 2023-09-19 11:13:28 浏览: 241
matpower数据
MATPOWER可以使用Bad Data Detection(BDD)方法进行电力系统的故障诊断,以下是MATPOWER进行BDD检测的示例代码:
1. 读取数据文件
```
mpc = loadcase('case9'); % 读取数据文件
```
2. 运行潮流计算
```
results = rundcpf(mpc); % 运行潮流计算
if results.success == 1 % 判断是否成功
[Violations, Penalty] = runcpf(mpc, results); % 进行不良数据检测
else
fprintf('潮流计算失败!\n');
end
```
3. 计算灵敏度矩阵
```
H = makeSbus(mpc.baseMVA, mpc.bus, mpc.gen) / mpc.baseMVA; % 计算节点注入功率灵敏度矩阵
A = makeYbus(mpc.baseMVA, mpc.bus, mpc.branch); % 计算节点导纳矩阵
B = zeros(length(mpc.branch), length(mpc.branch)); % 初始化BDD系数矩阵
for i = 1:length(mpc.branch)
for j = 1:length(mpc.branch)
if i == j
B(i, j) = 1; % 对角线上的元素为1
else
B(i, j) = -A(i, j) / A(i, i); % 计算BDD系数
end
end
end
Hb = B' * H; % 计算支路注入功率灵敏度矩阵
```
4. 计算残差向量
```
P = results.bus(:, 3) / mpc.baseMVA; % 获取节点有功注入功率
Q = results.bus(:, 4) / mpc.baseMVA; % 获取节点无功注入功率
V = results.bus(:, 8); % 获取节点电压幅值
theta = results.bus(:, 9); % 获取节点相角
Pmis = P - H * [theta; V]; % 计算有功注入功率残差
Qmis = Q - H * [theta; V]; % 计算无功注入功率残差
Rmis = [Pmis; Qmis]; % 组合成残差向量
```
5. 计算残差向量的BDD系数
```
S = Hb * Hb'; % 计算残差向量的协方差矩阵
C = zeros(length(mpc.branch), length(mpc.branch)); % 初始化BDD系数矩阵
for i = 1:length(mpc.branch)
for j = 1:length(mpc.branch)
if i == j
C(i, j) = 1; % 对角线上的元素为1
else
C(i, j) = Hb(i, :) * S * Hb(j, :)'; % 计算BDD系数
end
end
end
```
6. 执行BDD检测
```
[U, S, V] = svd(C); % 对BDD系数矩阵进行奇异值分解
r = rank(C); % 计算BDD矩阵的秩
Z = U(:, r+1:end); % 获取Z矩阵
F = V(:, r+1:end); % 获取F矩阵
alpha = Z' * Rmis; % 计算残差向量在Z矩阵上的投影
beta = F' * Rmis; % 计算残差向量在F矩阵上的投影
sigma = S(r+1:end, r+1:end); % 获取奇异值矩阵的后r行
sigmainv = inv(sigma); % 计算奇异值矩阵的逆矩阵
theta = (F * sigmainv * F') * beta; % 计算故障的最小二乘估计值
```
以上代码可以进行基本的BDD检测,如果需要更多的BDD检测功能,还可以使用MATPOWER中的其他函数。
阅读全文