matlab计算npv,哪位大神看看这个程序呀,参数下面给了

您所在的位置:网站首页 npv函数 matlab计算npv,哪位大神看看这个程序呀,参数下面给了

matlab计算npv,哪位大神看看这个程序呀,参数下面给了

#matlab计算npv,哪位大神看看这个程序呀,参数下面给了| 来源: 网络整理| 查看: 265

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

K=0;

N=input('请输入节点数:N=');

NPQ =input('请输入节点数:NPQ=');

NPV =input('请输入节点数:NPV=');

Nl=input('请输入支路数:Nl=');

B1=input('请输入由各支路参数形成的矩阵:B1=');%[1 2 0.1+0.4i 0.01528i 1 1;1 3 0.3i 0 1.1 0;1 4 0.12+0.5i 0.0192i 1 0;2 4 0.08+0.4i 0.01413i 1 0]格式为某支路的首端号P,某支路末端号Q,且P

Y=zeros(N);

for i=1:Nl

if B1(i,6)==0

p=B1(i,1);q=B1(i,2);

else p=B1(i,2);q=B1(i,1);

end

Y(p,q)=Y(p,q)-1./(B1(i,3)*B1(i,5));

Y(q,p)=Y(p,q);

Y(q,q)=Y(q,q)+1./(B1(i,3)*B1(i,5)^2)+B1(i,4)./2;

Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4)./2;

end%求导纳矩阵

disp('导纳矩阵Y=');

disp(Y);G=real(Y);B=imag(Y);

Kmax=input('\n\n 请输入最大迭代次数后回车(可从零开始) Kmax=\n');%防止发散的情况可以及时跳出

small=10^(-4); %ε不能太小

Pnode=[ 0.2 -0.45 -0.4 -0.6 ];

Qnode=[ 0.2 -0.15 -0.05 -0.1 ];

Vnode=[ 0 0 0 0 ];% 书上给定的有功无功电压初值

e=[ 1.06 1.0 1.0 1.0 1.0 ];

f=[ 0 0 0 0 0 ];% 正常给定的初值

for K=0:Kmax,

%计算△W。△W=【△P1,△Q1,△P2,△Q2,……,△P,△V^2(平方的意思)】(平衡节点不参与迭代)

%用书上134页及之后计算NPQ个PQ节点的△P、△Q。算法:先初始化,再不断地累减

%初始化,得△P=【Pnode(1),Pnode(2),……,Pnode(NPQ)】PQPV节点个数上面要输入

for i=1:NPQ,

dP(i)=Pnode(i);

dQ(i)=Qnode(i);

end

%不断地累减,得△P和△Q ,就是公式啦

for i=1:NPQ,

for j=1:N,

dP(i)=dP(i)-e(i)*G(i,j)*e(j)+e(i)*B(i,j)*f(j)-f(i)*G(i,j)*f(i)-f(i)*B(i,j)*e(j);%△P(4-86)

dQ(i)=dQ(i)-f(i)*G(i,j)*e(j)+f(i)*B(i,j)*f(j)+e(i)*G(i,j)*f(i)+e(i)*B(i,j)*e(j);%△Q一样

end

end

%计算NPV个PV节点的△P、(△V)^2 (其中△P的计算同上)算法:先初始化,再不断地累减,电压就继续公式

%初始化

for i=(NPQ+1):(N-1),

dP(i)=Pnode(i);

end

%不断地累减,得△P和(△V)^2

for i=(NPQ+1):(N-1),

for j=1:N,

dP(i)=dP(i)-e(i)*G(i,j)*e(j)+e(i)*B(i,j)*f(j)-f(i)*G(i,j)*f(i)-f(i)*B(i,j)*e(j);

dV2(i)=Vnode(i)^2-e(i)^2-f(i)^2;

end

end

%都是公式,不用太在意,PQ,PV节点分开算的(P134)

%组合成△W=【△P1,△Q1,△P2,△Q2,……,△P,△V^2】(平衡节点不参与迭代)

%将△P间隔地赋入△W

a=1;

for i=1:(N-1),

dW(a)=dP(i);

a=a+2;

end

%将△Q间隔地赋入△W

a=2;

for i=1:NPQ,

dW(a)=dQ(i);

a=a+2;

end

%将△V^2间隔地赋入△W

a=NPQ*2+2;

for i=(NPQ+1):(NPQ+NPV),

dW(a)=dV2(i);

a=a+2;

end

%判断是否小于ε,注意判断方法是△P,△Q的绝对值足够小

if max(dW)

fprintf('\n 迭代是收敛的。第%d次迭代后终止迭代。\n',K-1);

break;

end

%计算雅克比矩阵各元素(书上135页)。算法:先初始化,再不断地累减

J=zeros(N-1);

%初始化

for i=1:N-1,

for j=1:N-1,

if iNPQ %求雅克比矩阵中PV节点的元素

if i==j

J(2*i-1,2*j-1) = -G(i,i)*e(i)-B(i,i)*f(i);

J(2*i-1,2*j ) = B(i,i)*e(i)-G(i,i)*f(i);

J(2*i ,2*j-1) = -2*e(i);

J(2*i ,2*j ) = -2*f(i);

elseif i~=j

J(2*i-1,2*j-1) = -G(i,j)*e(i)-B(i,j)*f(i);

J(2*i-1,2*j ) = B(i,j)*e(i)-G(i,j)*f(i);

J(2*i ,2*j-1) = 0;

J(2*i ,2*j ) = 0;

end

end

end

end

%不断地累减

for i=1:NPQ,

for k=1:N,

J(2*i-1,2*i-1) = J(2*i-1,2*i-1)-G(i,k)*e(k)+B(i,k)*f(k);

J(2*i-1,2*i ) = J(2*i-1,2*i )-G(i,k)*f(k)-B(i,k)*e(k);

J(2*i ,2*i-1) = J(2*i ,2*i-1)+G(i,k)*f(k)+B(i,k)*e(k);

J(2*i ,2*i ) = J(2*i ,2*i )-G(i,k)*e(k)+B(i,k)*f(k);

end

end

%根据△W=-J*△V, 得△V书135页

dV=(-J)\dW';

%用dV对e、f进行修正,并得到复数表示的V

for i=1:(N-1),

e(i)=e(i)+dV(2*i-1);

f(i)=f(i)+dV(2*i );

V(i)=complex(e(i),f(i));

end

V(N)=complex(e(N),f(N));

format long g;

fprintf('\n 第%d次迭代(共%d个独立节点)',K,N);

V

end

N=5

NPQ=4

NPV=1

NL=7

B1=[1 2 0.02+0.06i 0 1 0;1 3 0.08+0.24i 0 1 0;2 3 0.06+0.18i 0 1 1;2 4 0.06+0.18i 0 1 1;3 4 0.01+0.03i 0 1 0;4 5 0.08+0.24i 0 1 0;2 5 0.04+0.12i 0 1 1;]

Kmax=50



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3