MATLAB牛拉法,MATLAB潮流程序(IEEE14直角坐标牛拉法).doc

MATLAB潮流程序(IEEE14直角坐标牛拉法)

MATLAB潮流程序(IEEE14 直角坐标 牛拉法)

clear

baseMVA=100; %功率基值

%%读Data1中数据

load Data1.txt

Bus=Data1(:,1); %节点号

Vtype=Data1(:,5); %节点类型

Pload=Data1(:,8); %负载有功

Qload=Data1(:,9); %负载无功

Pgen=Data1(:,10); %发电机发出有功

Qgen=Data1(:,11); %发电机发出无功

Vset=Data1(:,13); %电压设定点

Qsh=Data1(:,17); %并联电容电纳标幺值

%%读Data2中数据

load Data2.txt

II=Data2(:,1);

JJ=Data2(:,2); %支路端点号

Ltype=Data2(:,5); %线路类型

R=Data2(:,6); %两点间电阻

X=Data2(:,7); %两点间电抗

B=Data2(:,8)/2; %线路对地电纳

K=Data2(:,14); %变压器非标准变压比

%%求导纳矩阵Y

y1=zeros(14);

y2=zeros(14);

y3=zeros(14);

lin=length(II); %支路数

for x=1:lin

switch Ltype(x)

case 1

y1(II(x),JJ(x))=1/(R(x)+i*X(x));

y1(JJ(x),II(x))=y1(II(x),JJ(x));

y3(II(x),JJ(x))=i*B(x);

y3(JJ(x),II(x))=i*B(x);

case 2

y1(II(x),JJ(x))=1/((R(x)+i*X(x))*K(x));

y1(JJ(x),II(x))=y1(II(x),JJ(x));

y2(II(x),JJ(x))=(1-K(x))/((R(x)+i*X(x))*K(x)^2);

y2(JJ(x),II(x))=(K(x)-1)/((R(x)+i*X(x))*K(x));

end

end

clear x

Y=zeros(14);

for x=1:14

Y(x,x)=sum(y1(x,:))+sum(y2(x,:))+sum(y3(x,:))+i*Qsh(x);

end

clear x;

Y=Y-y1;

G=real(Y);

B=imag(Y);

%%设电压初值

U=Vset;

e=real(U);

f=imag(U);

%%

Ps=zeros(1,14);

Qs=zeros(1,14);

D=ones(26,1);

for x=1:14

Ps(x)=(Pgen(x)-Pload(x))/baseMVA;

Qs(x)=(Qgen(x)-Qload(x))/baseMVA;

end

clear x;

N=0;

Jacbi=zeros(26);

while max(abs(D))>0.000001

for x=2:14 %节点功率及电压不平衡量

switch Vtype(x)

case 1 %PQ节点

D(2*x-3)=Ps(x)-e(x)*(G(x,:)*e-B(x,:)*f)-f(x)*(G(x,:)*f+B(x,:)*e);

D(2*x-2)=Qs(x)-f(x)*(G(x,:)*e-B(x,:)*f)+e(x)*(G(x,:)*f+B(

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(Gauss-Seidel Method)是一种用于解决潮流计算问题的迭代算,常用于电力系统中的潮流计算。基于直角坐标系,通过迭代计算节点电压和功率的值,直到满足收敛条件为止。 以下是使用Matlab实现潮流计算的示例代码: ```matlab % 输入数据 busdata = [1, 1, 0, 0, 0, 0, 0, 0, 0; 2, 2, 0, 0, 0, 0, 0, 0, 0; 3, 3, 0, 0, 0, 0, 0, 0, 0]; linedata = [1, 2, 0.1, 0.2, 0, 0; 2, 3, 0.05, 0.25, 0, 0]; % 初始化节点电压和功率 V = ones(size(busdata, 1), 1); P = zeros(size(busdata, 1), 1); Q = zeros(size(busdata, 1), 1); % 迭代计算 max_iter = 100; % 最大迭代次数 tolerance = 1e-6; % 收敛容差 iter = 0; converged = false; while ~converged && iter < max_iter iter = iter + 1; for i = 1:size(busdata, 1) % 计算节点注入功率 P(i) = busdata(i, 3) - busdata(i, 5); Q(i) = busdata(i, 4) - busdata(i, 6); for j = 1:size(linedata, 1) if linedata(j, 1) == i % 计算节点注入功率的修正值 P(i) = P(i) + V(i) * V(linedata(j, 2)) * (linedata(j, 3) * cos(V(i) - V(linedata(j, 2))) + linedata(j, 4) * sin(V(i) - V(linedata(j, 2)))); Q(i) = Q(i) + V(i) * V(linedata(j, 2)) * (linedata(j, 3) * sin(V(i) - V(linedata(j, 2))) - linedata(j, 4) * cos(V(i) - V(linedata(j, 2)))); elseif linedata(j,2) == i % 计算节点注入功率的修正值 P(i) = P(i) + V(i) * V(linedata(j, 1)) * (linedata(j, 3) * cos(V(i) - V(linedata(j, 1))) - linedata(j, 4) * sin(V(i) - V(linedata(j, 1)))); Q(i) = Q(i) + V(i) * V(linedata(j, 1)) * (linedata(j, 3) * sin(V(i) - V(linedata(j, 1))) + linedata(j, 4) * cos(V(i) - V(linedata(j, 1)))); end end % 更新节点电压 V(i) = sqrt((P(i) / busdata(i, 2))^2 + (Q(i) / busdata(i, 2))^2); end % 判断是否收敛 if max(abs(P)) < tolerance && max(abs(Q)) < tolerance converged = true; end end % 输出结果 disp('节点电压:'); disp(V); disp('节点注入功率:'); disp([P, Q]); ``` 请注意,上述代码中的`busdata`和`linedata`分别表示节点数据和支路数据,其中每一行代表一个节点或支路的信息。代码中的`busdata`和`linedata`需要根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值