⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fm_mixed.m

📁 基于PSAT 软件的多目标最优潮流计算用于中小型电力系统的分析和管理
💻 M
字号:
function  fm_mixed(flag)% FM_MIXED defines Mixed Loads%% FM_MIXED(FLAG)%       FLAG = 0 initialization%       FLAG = 1 algebraic equations%       FLAG = 2 algebraic Jacobians%       FLAG = 3 differential equations%       FLAG = 4 state matrix%%Author:    Federico Milano%Date:      23-May-2005%Version:   1.0.0%%E-mail:    fmilano@thunderbox.uwaterloo.ca%Web-site:  http://thunderbox.uwaterloo.ca/~fmilano%% Copyright (C) 2002-2006 Federico Milanoglobal Mixed DAE Bus Settings PQ Varnamex = DAE.x(Mixed.x);y = DAE.x(Mixed.y);V1 = DAE.V(Mixed.bus);t1 = DAE.a(Mixed.bus);Kpf = Mixed.con(:,5);Kpv = Mixed.con(:,6);alpha = Mixed.con(:,7);Tpv = Mixed.con(:,8);Kqf = Mixed.con(:,9);Kqv = Mixed.con(:,10);beta = Mixed.con(:,11);Tqv = Mixed.con(:,12);Tfv = Mixed.con(:,13);Tft = Mixed.con(:,14);k = 0.5/pi/Settings.freq;V0 = Mixed.dat(:,1);t0 = Mixed.dat(:,2);switch flag case 0 % initialization  for k = 1:length(Mixed.n)    idx = findbus(PQ,Mixed.bus(k));    if isempty(idx)      fm_disp(['No PQ load found for initializing mixed load ', ...               'at bus ',Varname.bus{Mixed.bus(k)}])      Mixed.con(k,6) = 0;      Mixed.con(k,10) = 0;    else      P = PQ.P0(idx)*sum(Mixed.con(k,[6:8]))/100;      Q = PQ.Q0(idx)*sum(Mixed.con(k,[9:11]))/100;      PQ = pqsub(PQ,idx,P,Q);      Mixed.con(k,6) = Mixed.con(k,6)*PQ.P0(idx)/100;      Mixed.con(k,10) = Mixed.con(k,10)*PQ.Q0(idx)/100;      PQ = remove(PQ,idx,'zero');    end  end  %check time constants  idx = find(Tfv == 0);  if idx    mixedwarn(idx, 'Time constant Tfv cannot be zero. Tfv = 0.001 s will be used.'),  end  Mixed.con(idx,13) = 0.001;  idx = find(Tft == 0);  if idx    mixedwarn(idx, 'Time constant Tft cannot be zero. Tft = 0.001 s will be used.'),  end  Mixed.con(idx,14) = 0.001;  %variable initialization  DAE.x(Mixed.x) = -V1./Tfv;  x = DAE.x(Mixed.x);  DAE.x(Mixed.y) = 0;  y = DAE.x(Mixed.y);  Mixed.dat(:,1) = V1;  Mixed.dat(:,2) = t1;  %check limits  fm_disp('Initialization of mixed loads completed.') case 1 % algebraic equations  DAE.gp = DAE.gp + sparse(Mixed.bus,1,Kpf.*(y+k.*(t1-t0)./Tft)+Kpv.*((V1./V0).^alpha+Tpv.*(x+V1./Tfv)),Bus.n,1);  DAE.gq = DAE.gq + sparse(Mixed.bus,1,Kqf.*(y+k.*(t1-t0)./Tft)+Kqv.*((V1./V0).^beta+Tqv.*(x+V1./Tfv)),Bus.n,1); case 2 % algebraic Jacobians  DAE.J12 = DAE.J12 + sparse(Mixed.bus,Mixed.bus,Kpv.*((V1./V0).^alpha.*alpha./V1+Tpv./Tfv),Bus.n,Bus.n);  DAE.J11 = DAE.J11 + sparse(Mixed.bus,Mixed.bus,Kpf.*k./Tft,Bus.n,Bus.n);  DAE.J22 = DAE.J22 + sparse(Mixed.bus,Mixed.bus,Kqv.*((V1./V0).^beta.*beta./V1+Tqv./Tfv),Bus.n,Bus.n);  DAE.J21 = DAE.J21 + sparse(Mixed.bus,Mixed.bus,Kqf.*k./Tft,Bus.n,Bus.n); case 3 % differential equations  DAE.f(Mixed.x) = (-V1./Tfv-x)./Tfv;  DAE.f(Mixed.y) = (-k.*(t1-t0)./Tft-y)./Tft; case 4 % state variable Jacobians  % DAE.Fx  DAE.Fx = DAE.Fx + sparse(Mixed.x,Mixed.x,-1./Tfv,DAE.n,DAE.n);  DAE.Fx = DAE.Fx + sparse(Mixed.y,Mixed.y,-1./Tft,DAE.n,DAE.n);  % DAE.Fy  DAE.Fy = DAE.Fy + sparse(Mixed.x,Mixed.bus+Bus.n,-1./Tfv./Tfv,DAE.n,2*Bus.n);  DAE.Fy = DAE.Fy + sparse(Mixed.y,Mixed.bus,-k./Tft./Tft,DAE.n,2*Bus.n);  % DAE.Gx  DAE.Gx = DAE.Gx + sparse(Mixed.bus,Mixed.x,Kpv.*Tpv,2*Bus.n,DAE.n);  DAE.Gx = DAE.Gx + sparse(Mixed.bus,Mixed.y,Kpf,2*Bus.n,DAE.n);  DAE.Gx = DAE.Gx + sparse(Mixed.bus+Bus.n,Mixed.x,Kqv.*Tqv,2*Bus.n,DAE.n);  DAE.Gx = DAE.Gx + sparse(Mixed.bus+Bus.n,Mixed.y,Kqf,2*Bus.n,DAE.n);end% -------------------------------------------------------------------% function for creating warning messagesfunction mixedwarn(idx, msg)fm_disp(strcat('Warning: Mixed Load #',int2str(idx),msg))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -