zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Matlab中算法结合Simulink求解直流微电网中功率

MATLAB算法 结合 求解 simulink 电网 功率
2023-09-27 14:20:42 时间

 💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者,博主专门做了一个专栏目录,整个专栏只放了一篇文章,足见我对其重视程度:博主专栏目录。做到极度细致,方便大家进行学习!亲民!!!还有我开了一个专栏给女朋友的,很浪漫的喔,代码学累的时候去瞧一瞧,看一看:女朋友的浪漫邂逅。有问题可以私密博主,博主看到会在第一时间回复。
📝目前更新:🌟🌟🌟电力系统相关知识,期刊论文,算法,机器学习和人工智能学习。
🚀支持:🎁🎁🎁如果觉得博主的文章还不错或者您用得到的话,可以关注一下博主,如果三连收藏支持就更好啦!这就是给予我最大的支持!                   

👨‍🎓博主课外兴趣:中西方哲学,送予读者:

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。在我这个专栏记录我有空时的一些哲学思考和科研笔记:科研和哲思。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“真理”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

📋📋📋本文目录如下:⛳️⛳️⛳️

目录

1 Simulink求解直流微电网

 2 Matlab代码算法求解直流微电网

1 Simulink求解直流微电网

包括下面三个部分:

 

 2 Matlab代码算法求解直流微电网

部分代码: 

clear all
clc
format shortG
%% Verificaci algoritmo
% Paretros base
vref = 48;
Pbase = 500;

rlineas = 0.05; 
rbase = vref^2/Pbase;
rpu = rlineas/rbase;

step = 1;
droop = 2;
potencia = 3;
%% Datos de Lineas y Nodos
%    Lineas   i j r
        A = [ 4 1 rpu
              1 2 rpu
              2 3 rpu
              3 4 rpu];
%   nodo tipo     Potgen/gdroop  PotCarga   
B = [1   droop      rbase/0.2           0
     2   potencia    0            466.25/Pbase
     3   droop      rbase/0.5           0
     4   potencia    0             697.5/Pbase  ];

NumN = max(max(A(:,1:2))); %Nero de Nodos
NumL = length(A(:,1)); %Nero de Lineas

%% Separaci de variables

Nstep = B(find(B(:,2)==step),1); %Nodos step
Vstep = B(find(B(:,2)==step),2); %Variable step
Ndroop = B(find(B(:,2)==droop),1);%Nodos droop
Vdroop = B(find(B(:,2)==droop),2); %Variable droop
NP = B(find(B(:,2)==potencia),1);%Nodos de Pot const
Vpotencia = B(find(B(:,2)==potencia),2); %Variable Pot const

%Matriz clasificaci de variables

Var = [[Nstep; Ndroop; NP] [Vstep;Vdroop;Vpotencia]];
NumVar = length(Var);

%% Matriz Ybus y declaraci J y H 
%Cculo de Ybus
Y = zeros(NumN,NumN);
for k = 1:NumL
    n1 = A(k,1);
    n2 = A(k,2);
    ykm = 1/A(k,3);
    Y(n1,n1) = Y(n1,n1) + ykm;
    Y(n1,n2) = Y(n1,n2) - ykm;
    Y(n2,n1) = Y(n2,n1) - ykm;
    Y(n2,n2) = Y(n2,n2) + ykm;
end

v = ones(NumVar,1); %Condiciones iniciales de tensi
H=zeros(NumVar,1); %Inicializaci desajustes
J = zeros(NumVar,NumVar);%Declaraci matriz jacobiana
deltaV=zeros(NumVar,1);%Inicializaci de variaciones

%% Modo Newton Raphson
tic%contador de tiempo
%inicio de iteraciones
for j=1:10
    
%Hacer un barrido por todas las variables    
for k=1:NumVar
 %Si es step, aplicar ecuaciones step 
  if Var(k,2)==step
      pstep = 0;
      pstepl = v(Var(k,1))*(Y(Var(k,1),:)*v);
      H(Var(k,1)) = pstep-pstepl;
      for i=1:NumVar
       if Var(k,1)==i
       J(Var(k,1),i) = -v(Var(k,1))*Y(Var(k,1),Var(k,1)) - Y(Var(k,1),:)*v;
       else
       J(Var(k,1),i) = -v(Var(k,1))*Y(Var(k,1),i);
       end
      end
  else
 %Si es droop, aplicar ecuaciones droop
  if Var(k,2)==droop
      %inyecciones de potencia al nodo droop
      pgdroop = B(Var(k,1),4);
      %expresi incluyendo ecuas droop
      pdroop = B(Var(k,1),3)*(1*v(Var(k,1))-v(Var(k,1))^2);
      %potencias por las lineas
      pdroopl = v(Var(k,1))*(Y(Var(k,1),:)*v);
      %ecuaci de desajuste
      H(Var(k,1)) = pdroop-pgdroop-pdroopl;
      %Cculo de las derivadas parciales para droop k espec韋ico
      for i=1:NumVar
        %si k=i
        if Var(k,1)==i
          Jdroop = B(Var(k,1),3)*(1 - 2*v(Var(k,1)));
          Jdroopl = v(Var(k,1))*Y(Var(k,1),Var(k,1)) - Y(Var(k,1),:)*v;
          J(Var(k,1),i) = Jdroop - Jdroopl;
        else
          %k != i
          J(Var(k,1),i) = -v(Var(k,1))*Y(Var(k,1),i);
        end
      end
  else
 %Si es potencia, aplicar ecuaciones potencia   
  if Var(k,2)==potencia
      ppot = B(Var(k,1),3)-B(Var(k,1),4); %PG-Pcarga
      ppotl = v(Var(k,1))*(Y(Var(k,1),:)*v);%Plineas
      H(Var(k,1)) = ppot-ppotl;%ecuaci髇 h(k) de potencia
      for i=1:NumVar
        %si k=i
        if Var(k,1)==i
      J(Var(k,1),i) = -v(Var(k,1))*Y(Var(k,1),Var(k,1)) - Y(Var(k,1),:)*v;
        else
        %k != i
      J(Var(k,1),i) = -v(Var(k,1))*Y(Var(k,1),i);
        end
     end
  end
  end
  end
    
end
deltaV=inv(J)*H;%vector de variacion
 v = v - deltaV;%Actalizaci髇 de variables
 I = Y*v;%calculo de corrientes nodales
 P = diag(v)*I;%potencias nodales
 %iter(j) = j;
 errAbs = abs(max(H));
end
%fin de iteraciones
t=toc%fin contador de tiempo

%% Muestra de Resultados
disp('         nodo      v(pu)         P(pu)        v(V)        P(W)')
solucion = [B(:,1)    v        P     vref*v  Pbase*P];
disp(solucion)

disp('Maximo error abs')
disp(errAbs)

clear all
clc
format shortG
%% Verificaci algoritmo
% Paretros base
vref = 48;
Pbase = 500;

rlineas = 0.05; 
rbase = vref^2/Pbase;
rpu = rlineas/rbase;

step = 1;
droop = 2;
potencia = 3;
%% Datos de Lineas y Nodos
%    Lineas   i j r
        A = [ 4 1 rpu
              1 2 rpu
              2 3 rpu
              3 4 rpu];
%   nodo tipo     Potgen/gdroop  PotCarga   
B = [1   droop      rbase/0.2           0
     2   potencia    0            466.25/Pbase
     3   droop      rbase/0.5           0
     4   potencia    0             697.5/Pbase  ];

NumN = max(max(A(:,1:2))); %Nero de Nodos
NumL = length(A(:,1)); %Nero de Lineas

%% Separaci de variables

Nstep = B(find(B(:,2)==step),1); %Nodos step
Vstep = B(find(B(:,2)==step),2); %Variable step
Ndroop = B(find(B(:,2)==droop),1);%Nodos droop
Vdroop = B(find(B(:,2)==droop),2); %Variable droop
NP = B(find(B(:,2)==potencia),1);%Nodos de Pot const
Vpotencia = B(find(B(:,2)==potencia),2); %Variable Pot const

%Matriz clasificaci de variables

Var = [[Nstep; Ndroop; NP] [Vstep;Vdroop;Vpotencia]];
NumVar = length(Var);

%% Matriz Ybus y declaraci J y H 
%Cculo de Ybus
Y = zeros(NumN,NumN);
for k = 1:NumL
    n1 = A(k,1);
    n2 = A(k,2);
    ykm = 1/A(k,3);
    Y(n1,n1) = Y(n1,n1) + ykm;
    Y(n1,n2) = Y(n1,n2) - ykm;
    Y(n2,n1) = Y(n2,n1) - ykm;
    Y(n2,n2) = Y(n2,n2) + ykm;
end

v = ones(NumVar,1); %Condiciones iniciales de tensi
H=zeros(NumVar,1); %Inicializaci desajustes
J = zeros(NumVar,NumVar);%Declaraci matriz jacobiana
deltaV=zeros(NumVar,1);%Inicializaci de variaciones

%% Modo Newton Raphson
tic%contador de tiempo
%inicio de iteraciones
for j=1:10
    
%Hacer un barrido por todas las variables    
for k=1:NumVar
 %Si es step, aplicar ecuaciones step 
  if Var(k,2)==step
      pstep = 0;
      pstepl = v(Var(k,1))*(Y(Var(k,1),:)*v);
      H(Var(k,1)) = pstep-pstepl;
      for i=1:NumVar
       if Var(k,1)==i
       J(Var(k,1),i) = -v(Var(k,1))*Y(Var(k,1),Var(k,1)) - Y(Var(k,1),:)*v;
       else
       J(Var(k,1),i) = -v(Var(k,1))*Y(Var(k,1),i);
       end
      end
  else
 %Si es droop, aplicar ecuaciones droop
  if Var(k,2)==droop
      %inyecciones de potencia al nodo droop
      pgdroop = B(Var(k,1),4);
      %expresi incluyendo ecuas droop
      pdroop = B(Var(k,1),3)*(1*v(Var(k,1))-v(Var(k,1))^2);
      %potencias por las lineas
      pdroopl = v(Var(k,1))*(Y(Var(k,1),:)*v);
      %ecuaci de desajuste
      H(Var(k,1)) = pdroop-pgdroop-pdroopl;
      %Cculo de las derivadas parciales para droop k espec韋ico
      for i=1:NumVar
        %si k=i
        if Var(k,1)==i
          Jdroop = B(Var(k,1),3)*(1 - 2*v(Var(k,1)));
          Jdroopl = v(Var(k,1))*Y(Var(k,1),Var(k,1)) - Y(Var(k,1),:)*v;
          J(Var(k,1),i) = Jdroop - Jdroopl;
        else
          %k != i
          J(Var(k,1),i) = -v(Var(k,1))*Y(Var(k,1),i);
        end
      end
  else
 %Si es potencia, aplicar ecuaciones potencia   
  if Var(k,2)==potencia
      ppot = B(Var(k,1),3)-B(Var(k,1),4); %PG-Pcarga
      ppotl = v(Var(k,1))*(Y(Var(k,1),:)*v);%Plineas
      H(Var(k,1)) = ppot-ppotl;%ecuaci髇 h(k) de potencia
      for i=1:NumVar
        %si k=i
        if Var(k,1)==i
      J(Var(k,1),i) = -v(Var(k,1))*Y(Var(k,1),Var(k,1)) - Y(Var(k,1),:)*v;
        else
        %k != i
      J(Var(k,1),i) = -v(Var(k,1))*Y(Var(k,1),i);
        end
     end
  end
  end
  end
    
end
deltaV=inv(J)*H;%vector de variacion
 v = v - deltaV;%Actalizaci髇 de variables
 I = Y*v;%calculo de corrientes nodales
 P = diag(v)*I;%potencias nodales
 %iter(j) = j;
 errAbs = abs(max(H));
end
%fin de iteraciones
t=toc%fin contador de tiempo

%% Muestra de Resultados
disp('         nodo      v(pu)         P(pu)        v(V)        P(W)')
solucion = [B(:,1)    v        P     vref*v  Pbase*P];
disp(solucion)

disp('Maximo error abs')
disp(errAbs)