گرفتن ماتریس ژاکوبین یک شبکه در matpower

این مطلب از سایت قدیمی منتقل شده و ممکن است اشکالات زیادی دشته باشد. لطفا در صورت مشاهده ی هر گونه ایراد، گزارش دهید

به نام خدا

سلام. در این قسمت از آموزش قصد داریم تا در متلب با استفاده از نرم افزار matpower ماتریس کاهش یافته یک شبکه را به دست آوریم همان طور که می دانیم معکوس ماتریس کاهش یافته همان ضرایب حساسیت شین های یک شبکه به یکدیگر است. یعنی برای مثال اگه ولتاژ یک شین برابر 1p.u باشد و ما به آن مقداری توان راکتیو تزریق کنیم  ولتاژ این شین با توجه به حساسیت این شین تغییر می کند. اما به چه شکل می توان این ماتریس را محاسبه کرد؟

با توجه به معادلات پخش بار و با توجه به این که می دانیم.

از این معادلات و با توجه به این که ما فقط قصد به تغییر توان راکتیو شین داریم می توان نتیجه گرفت که  P=0∆ و در نتیجه ی چنین فرضی و با حل این معادله به نتیجه زیر خواهیم رسید.

می خواهیم تا این فرمول را برای یک شبکه تحقیقاتی 39 باسه اجرا کرده و این ماتریس را محاسبه کنیم.

اما برای چنین کاری در ابتدا بایستی تا ماتریس ژاکوبین این شبکه را محاسبه کنیم در matpower یک فایل با نام makeJac وجود دارد که با این ماتریس می توانیم چنین کاری انجام دهیم ابتدا برای راحتی کار این فایل را باز می کنیم تا برای راحتی کار در ادامه یک تغییرات کوچک در این فایل بدهیم. کد فایل makeJac به شکل زیر می باشد.

function [J, Ybus, Yf, Yt] = makeJac(baseMVA, bus, branch, gen, fullJac)
%MAKEJAC  Forms the power flow Jacobian.
%   J = MAKEJAC(MPC)
%   J = MAKEJAC(MPC, FULLJAC)
%   J = MAKEJAC(BASEMVA, BUS, BRANCH, GEN)
%   J = MAKEJAC(BASEMVA, BUS, BRANCH, GEN, FULLJAC)
%   [J, YBUS, YF, YT] = MAKEJAC(MPC)
%
%   Returns the power flow Jacobian and, optionally, the system admittance
%   matrices. Inputs can be a MATPOWER case struct or individual BASEMVA,
%   BUS, BRANCH and GEN values. Bus numbers must be consecutive beginning
%   at 1 (i.e. internal ordering). If the FULLJAC argument is present and
%   true, it returns the full Jacobian (sensitivities of all bus injections
%   w.r.t all voltage angles/magnitudes) as opposed to the reduced version
%   used in the Newton power flow updates.
%
%   Note: This function builds the Jacobian from scratch, rebuilding the
%         YBUS matrix in the process. You probably don't want to use this
%         in performance critical code.
%
%   See also MAKEYBUS, EXT2INT

%   MATPOWER
%   Copyright (c) 1996-2016 by Power System Engineering Research Center (PSERC)
%   by Ray Zimmerman, PSERC Cornell
%
%   This file is part of MATPOWER.
%   Covered by the 3-clause BSD License (see LICENSE file for details).
%   See http://www.pserc.cornell.edu/matpower/ for more info.

if nargin < 4
    mpc     = baseMVA;
    if nargin > 1
        fullJac = bus;
    else
        fullJac = 0;
    end
    baseMVA = mpc.baseMVA;
    bus     = mpc.bus;
    branch  = mpc.branch;
    gen     = mpc.gen;
elseif nargin < 5
    fullJac = 0;
end

%% define named indices into bus, gen, branch matrices
[PQ, PV, REF, NONE, BUS_I, BUS_TYPE, PD, QD, GS, BS, BUS_AREA, VM, ...
    VA, BASE_KV, ZONE, VMAX, VMIN, LAM_P, LAM_Q, MU_VMAX, MU_VMIN] = idx_bus;
[GEN_BUS, PG, QG, QMAX, QMIN, VG, MBASE, GEN_STATUS, PMAX, PMIN, ...
    MU_PMAX, MU_PMIN, MU_QMAX, MU_QMIN, PC1, PC2, QC1MIN, QC1MAX, ...
    QC2MIN, QC2MAX, RAMP_AGC, RAMP_10, RAMP_30, RAMP_Q, APF] = idx_gen;

%% build Ybus
[Ybus, Yf, Yt] = makeYbus(baseMVA, bus, branch);

%% extract voltage
V = bus(:, VM) .* exp(sqrt(-1) * pi/180 * bus(:, VA));
on = find(gen(:, GEN_STATUS) > 0);      %% which generators are on?
gbus = gen(on, GEN_BUS);                %% what buses are they at?
V(gbus) = gen(on, VG) ./ abs(V(gbus)).* V(gbus);

%% build Jacobian
[dSbus_dVm, dSbus_dVa] = dSbus_dV(Ybus, V);
if fullJac
    j11 = real(dSbus_dVa);
    j12 = real(dSbus_dVm);
    j21 = imag(dSbus_dVa);
    j22 = imag(dSbus_dVm);
else
    %% get bus index lists of each type of bus
    [ref, pv, pq] = bustypes(bus, gen);

    j11 = real(dSbus_dVa([pv; pq], [pv; pq]));
    j12 = real(dSbus_dVm([pv; pq], pq));
    j21 = imag(dSbus_dVa(pq, [pv; pq]));
    j22 = imag(dSbus_dVm(pq, pq));
end

J = [   j11 j12;
        j21 j22;    ];

همان طور که در ابتدای کد مشاهده می کنید یک از مواردی که ما می توانی در خروجی دریافت کنیم ماتریس J  می باشد یعنی این فایل به ما ماتریس ژاکوبین را می دهد در پایین این کد تک تک ماتریس های j11,j12,j21,j22 محاسبه شده است و تنها کافی است تا ما این ماتریس ها را نیز در خروجی بیاوریم بدین ترتیب قسمت اول این تابع را به شکل زیر تغییر می دهیم.

function [j11,j12,j21,j22,J, Ybus, Yf, Yt] = makeJac(baseMVA, bus, branch, gen, fullJac)

حال می توانیم تا سایر مقادیر را نیز از تابع دریافت کنیم. در ادامه کار برای محاسبه این این ماتریس بدین شکل عمل می کنیم که یک script باز کرده و درون آن به شکل زیر کد می نویسیم.

clear;
clc;

mpc=loadcase('case39');
[j11,j12,j21,j22,J, Ybus, Yf, Yt] = makeJac(mpc);
j11=full(j11);
j12=full(j12);
j21=full(j21);
j22=full(j22);
SensitivityMatris=j22-j21*(j11^(-1))*j12;
SensitivityMatris=SensitivityMatris^(-1)

 

 

 

 

مطالب مرتبط

استفاده از پایتون در دیگسایلنت و ساخت یک پروژه ساده

ساخت بار متغیر با زمان در دیگسایلنت با DSL

ساخت مبدل dc/dc افزاینده بوست

ماتریس نویسی در DPL

تقسیم بندی طول خطوط در دیگسایلنت

نمایش نام باسبارهای درون یک Set

گرفتن ماتریس ژاکوبین یک شبکه در matpower

محتوای مطلب

کامنت ها

یک پاسخ به “گرفتن ماتریس ژاکوبین یک شبکه در matpower”

لطفا اگر سوالی نامرتبط با این مطلب دارید، از تب «پرسیدن سوال» استفاده کنید

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد.

<