Commit 99a9e166 by wzc-a

refactor

parent 0b0c295f
...@@ -18,98 +18,52 @@ function compare_results(case_name) ...@@ -18,98 +18,52 @@ function compare_results(case_name)
fprintf('\n==============开始与 matpower 结果比较...==============\n'); fprintf('\n==============开始与 matpower 结果比较...==============\n');
% 比较 Jacobian 矩阵 % 比较的field_name和使用matpower计算函数
compare_jacobian(parsed_results, case_name); field_names = {
'ybus'
% 比较 Ybus 矩阵 'jac'
compare_ybus(parsed_results, case_name); 'sdzip'
'sbus'
% 比较 Sbus 矩阵 % 'runpf'
compare_sbus(parsed_results, case_name); };
cal_makers = {
% @cal_makeybus
@cal_makejac
fprintf('\n所有比较完成!\n\n'); @cal_makesdzip
end @cal_makesbus
@cal_runpf
function compare_jacobian(parsed_results, case_name) };
% 比较 Jacobian 矩阵
fprintf('\n=== 比较 Jacobian 矩阵 ===\n');
% 获取解析的 Jacobian 矩阵
jac_field = find_field_by_name(parsed_results, 'jac');
if isempty(jac_field)
fprintf('未找到 Jacobian 矩阵结果\n');
return;
end
tensor_jac = parsed_results.(jac_field);
if isempty(tensor_jac)
fprintf('Jacobian 矩阵为空\n');
return;
end
% 计算 matpower 的 Jacobian 矩阵
matpower_jac = cal_makejac(case_name);
% 比较矩阵
compare_matrices(tensor_jac, matpower_jac, 'Jacobian');
end
function compare_ybus(parsed_results, case_name) % 依次比较每个矩阵
% 比较 Ybus 矩阵 for i = 1:length(field_names)
field_name = field_names{i};
cal_maker = cal_makers{i};
fprintf('\n=== 比较 Ybus 矩阵 ===\n'); fprintf('\n=== 比较 %s 矩阵 ===\n', field_name);
% 获取解析的 Ybus 矩阵 % 获取解析的矩阵
ybus_field = find_field_by_name(parsed_results, 'ybus'); tensor_field = find_field_by_name(parsed_results, field_name);
if isempty(ybus_field) if isempty(tensor_field)
fprintf('未找到 Ybus 矩阵结果\n'); fprintf('未找到 %s 矩阵结果\n', field_name);
return; continue;
end end
tensor_ybus = parsed_results.(ybus_field); tensor_r = parsed_results.(tensor_field);
if isempty(tensor_ybus) if isempty(tensor_r)
fprintf('Ybus 矩阵为空\n'); fprintf('%s 矩阵为空\n', field_name);
return; continue;
end end
% 计算 matpower 的 Ybus 矩阵 % 计算 matpower 的矩阵
matpower_ybus = cal_makeybus(case_name); matpower_r = cal_maker(case_name);
% 比较矩阵 % 比较矩阵
compare_matrices(tensor_ybus, matpower_ybus, 'Ybus'); compare_matrices(tensor_r, matpower_r, field_name);
end
function compare_sbus(parsed_results, case_name)
% 比较 Sbus 矩阵/向量
fprintf('\n=== 比较 Sbus 矩阵 ===\n');
% 获取解析的 Sbus 矩阵
sbus_field = find_field_by_name(parsed_results, 'sbus');
if isempty(sbus_field)
fprintf('未找到 Sbus 矩阵结果\n');
return;
end end
tensor_sbus = parsed_results.(sbus_field); fprintf('\n所有比较完成!\n\n');
if isempty(tensor_sbus)
fprintf('Sbus 矩阵为空\n');
return;
end
% 这里可以添加 matpower 计算 Sbus 的代码
matpower_sbus = cal_makesbus(case_name); % 需要实现这个函数
% 比较矩阵
compare_matrices(tensor_sbus, matpower_sbus, 'Sbus');
end end
function ybus = cal_makeybus(case_name) function ybus = cal_makeybus(case_name)
% 计算 Ybus 矩阵 % 计算 Ybus 矩阵
mpc = loadcase(case_name); mpc = loadcase(case_name);
...@@ -122,6 +76,11 @@ function jac = cal_makejac(case_name) ...@@ -122,6 +76,11 @@ function jac = cal_makejac(case_name)
jac = full(makeJac(mpc, 1)); jac = full(makeJac(mpc, 1));
end end
function sdzip = cal_makesdzip(case_name)
mpc = loadcase(case_name);
sdzip = full(makeSdzip(mpc));
end
function sbus = cal_makesbus(case_name) function sbus = cal_makesbus(case_name)
mpc = loadcase(case_name); mpc = loadcase(case_name);
sbus = full(makeSbus(mpc)); sbus = full(makeSbus(mpc));
...@@ -133,6 +92,7 @@ function pf = cal_runpf(case_name) ...@@ -133,6 +92,7 @@ function pf = cal_runpf(case_name)
end end
%% utils 一些工具函数
function field_name = find_field_by_name(results, target_name) function field_name = find_field_by_name(results, target_name)
% 在结果结构体中查找包含特定名称的字段 % 在结果结构体中查找包含特定名称的字段
......
...@@ -5,9 +5,10 @@ function results = execute_and_parse() ...@@ -5,9 +5,10 @@ function results = execute_and_parse()
% 设置路径和文件 % 设置路径和文件
tensoreval_path = '..\..\..\eig-rc\target\release\examples\tensoreval.exe'; tensoreval_path = '..\..\..\eig-rc\target\release\examples\tensoreval.exe';
test_files = { test_files = {
'test_make_jac.txt'
'test_make_sbus.txt'
'test_make_ybus.txt' 'test_make_ybus.txt'
'test_make_sbus.txt'
'test_make_sdzip.txt'
'test_make_jac.txt'
'test_runpf.txt' 'test_runpf.txt'
}; };
......
...@@ -8,4 +8,5 @@ ...@@ -8,4 +8,5 @@
#include ../lib/bustypes.txt #include ../lib/bustypes.txt
jac = make_jac(baseMVA, bus, branch, gen, 1); jac = make_jac(baseMVA, bus, branch, gen, 1);
println(jac);
return jac; return jac;
#include ../data/case14.txt
#include ../lib/idx_gen.txt
#include ../lib/idx_bus.txt
#include ../lib/make_sdzip.txt
sdzip = make_sdzip(baseMVA, bus, mpopt);
return sdzip;
\ No newline at end of file
...@@ -37,7 +37,7 @@ fn bustypes_pv(bus, gen) { ...@@ -37,7 +37,7 @@ fn bustypes_pv(bus, gen) {
nb = size(bus, 0); nb = size(bus, 0);
ng = size(gen, 0); ng = size(gen, 0);
g_i = slice(gen, [0], [GEN_BUS-1,GEN_BUS]) - 1; // generator bus indices g_i = slice(gen, [0], [GEN_BUS-1,GEN_BUS]) - 1; // generator bus indices
Cg = full(sparse(g_i, range(0, ng), slice(gen, [0], [GEN_STATUS-1,GEN_STATUS]) > 0, nb, ng); // gen connection matrix Cg = full(sparse(g_i, range(0, ng), slice(gen, [0], [GEN_STATUS-1,GEN_STATUS]) > 0, nb, ng)); // gen connection matrix
// element i, j is 1 if, generator j at bus i is ON // element i, j is 1 if, generator j at bus i is ON
bus_gen_status = Cg * ones(ng, 1); // number of generators at each bus that are ON bus_gen_status = Cg * ones(ng, 1); // number of generators at each bus that are ON
...@@ -55,7 +55,7 @@ fn bustypes_pq(bus, gen) { ...@@ -55,7 +55,7 @@ fn bustypes_pq(bus, gen) {
nb = size(bus, 0); nb = size(bus, 0);
ng = size(gen, 0); ng = size(gen, 0);
g_i = slice(gen, [0], [GEN_BUS-1,GEN_BUS]) - 1; // generator bus indices g_i = slice(gen, [0], [GEN_BUS-1,GEN_BUS]) - 1; // generator bus indices
Cg = full(sparse(g_i, range(0, ng), slice(gen, [0], [GEN_STATUS-1,GEN_STATUS]) > 0, nb, ng); // gen connection matrix Cg = full(sparse(g_i, range(0, ng), slice(gen, [0], [GEN_STATUS-1,GEN_STATUS]) > 0, nb, ng)); // gen connection matrix
// element i, j is 1 if, generator j at bus i is ON // element i, j is 1 if, generator j at bus i is ON
bus_gen_status = Cg * ones(ng, 1); // number of generators at each bus that are ON bus_gen_status = Cg * ones(ng, 1); // number of generators at each bus that are ON
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论