matlab求节点导纳矩阵,关于利用矩阵稀疏技术求解节点导纳矩阵的MATLAB编程

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

求大神帮忙看看这个程序,解释一下!

%形成节点导纳矩阵

%考虑参考节点

%考虑互感支路

function [d_g,d_b,u_g,u_b]=calyy(itoi,noels_hgln,noelsnum_hgln,bs_noels,bs_cp,gb_hgln,gb_noels,gb_cp,lv_bs,lv_hgln,lv_noels,lv_cp,type_bs,iy,jy,remv_noels)

%lv_bs

d_g=zeros(1,lv_bs);

d_b=zeros(1,lv_bs);

u_g=zeros(1,length(jy));

u_b=zeros(1,length(jy));

type_noels=zeros(1,lv_noels);

for i=1:lv_hgln

%%支路自阻抗

lnnum=noelsnum_hgln(i);

lnnum;

gb_noels;

for ii1=1:lnnum

iln=noels_hgln(i,ii1);

[d_g,d_b,u_g,u_b]=getlnselfgb(iln,bs_noels,type_bs,itoi,gb_noels,iy,jy,d_g,d_b,u_g,u_b,lv_bs);

type_noels(iln)=1;

end

for ii1=1:lnnum

iln=noels_hgln(i,ii1);

for ii2=ii1+1:lnnum

zln=noels_hgln(i,ii2);

b=gb_hgln(i,ii1,ii2);

[d_g,d_b,u_g,u_b]=getlnhugb(iln,zln,bs_noels,type_bs,itoi,0,b,iy,jy,d_g,d_b,u_g,u_b,lv_bs);

end

end

end

for i=1:lv_noels

if remv_noels(i)==1%被除去线路

continue;

end

ibs=bs_noels(i,1);

zbs=bs_noels(i,2);

if type_noels(i)==1

continue;

end

type_noels(i)=1;

iibs=itoi(ibs);

zzbs=itoi(zbs);

g=gb_noels(i,1);

b=gb_noels(i,2);

j=0;

if iibs~=zzbs

j=getlocal(iy,jy,iibs,zzbs,lv_bs,1);

end

bch=gb_noels(i,3);

%分接头所在端的自导纳要+=(g+jb)/t^2

if bch<0

bch=-bch;

if gb_noels(i,4)==1%变比位于末端

ibs=iibs;

zbs=zzbs;

else %变比位于首段

ibs=zzbs;

zbs=iibs;

end

if ibs<=lv_bs

d_b(ibs)=d_b(ibs)+b;

d_g(ibs)=d_g(ibs)+g;

end

if zbs<=lv_bs

d_b(zbs)=d_b(zbs)+b/bch/bch;

d_g(zbs)=d_g(zbs)+g/bch/bch;

end

if j~=0

u_g(j)=u_g(j)-g/bch;

u_b(j)=u_b(j)-b/bch;

end

continue;

end

%disp('线路支路');

if iibs<=lv_bs

d_b(iibs)=d_b(iibs)+b;

d_b(iibs)=d_b(iibs)+bch;

d_g(iibs)=d_g(iibs)+g;

end

if zzbs<=lv_bs

d_b(zzbs)=d_b(zzbs)+b;

d_b(zzbs)=d_b(zzbs)+bch;

d_g(zzbs)=d_g(zzbs)+g;

end

if j~=0

u_g(j)=u_g(j)-g;

u_b(j)=u_b(j)-b;

end

end

for i=1:lv_cp

ibs=bs_cp(i,1);

if ibs==0

continue;

end

headbs=itoi(ibs);

if headbs>lv_bs

continue;

end

d_b(headbs)=d_b(headbs)+gb_cp(i,1);

end

k=iy(lv_bs);

u_g=u_g(1:k-1);

u_b=u_b(1:k-1);

function [d_g,d_b,u_g,u_b]=getlnselfgb(iln,bs_noels,type_bs,itoi,gb_noels,iy,jy,d_g,d_b,u_g,u_b,lv_bs)

g=gb_noels(iln,1);

b=gb_noels(iln,2);

bch=gb_noels(iln,3);

if bch<0

disp('error!!!');

return;

end

ibs=bs_noels(iln,1);

zbs=bs_noels(iln,2);

iibs=itoi(ibs);

zzbs=itoi(zbs);

if iibs~=lv_bs+1

d_b(iibs)=d_b(iibs)+b+bch;

d_g(iibs)=d_g(iibs)+g;

end

if zzbs~=lv_bs+1

d_b(zzbs)=d_b(zzbs)+b+bch;

d_g(zzbs)=d_g(zzbs)+g;

end

j=0;

if iibs~=zzbs

j=getlocal(iy,jy,iibs,zzbs,lv_bs,1);

end

if j==0

disp('找不到支路位置');

%exit;

return;

end

u_g(j)=u_g(j)-g;

u_b(j)=u_b(j)-b;

function [d_g,d_b,u_g,u_b]=getlnhugb(iln,zln,bs_noels,type_bs,itoi,g,b,iy,jy,d_g,d_b,u_g,u_b,lv_bs)

ibsi=bs_noels(iln,1);%首

zbsi=bs_noels(iln,2);%末

ibsz=bs_noels(zln,1);%首

zbsz=bs_noels(zln,2);%末

first_head=itoi(ibsi);

first_tail=itoi(zbsi);

second_head=itoi(ibsz);

second_tail=itoi(zbsz);

if first_head==second_head&&first_head~=lv_bs+1

disp('add');

d_b(first_head)=d_b(first_head)+2*b;

d_g(first_head)=d_g(first_head)+2*g;

end

if first_tail==second_tail&&first_tail~=lv_bs+1

disp('add');

d_b(first_tail)=d_b(first_tail)+2*b;

d_g(first_tail)=d_g(first_tail)+2*g;

end

if first_head==second_tail&&first_head~=lv_bs+1

disp('add');

d_b(first_head)=d_b(first_head)-2*b;

d_g(first_head)=d_g(first_head)-2*g;

end

if first_tail==second_head&&first_tail~=lv_bs+1

disp('add');

d_b(first_tail)=d_b(first_tail)-2*b;

d_g(first_tail)=d_g(first_tail)-2*g;

end

[d_g,d_b,u_g,u_b]=addlnval(first_head,second_head,g,b,iy,jy,d_g,d_b,u_g,u_b,lv_bs);

[d_g,d_b,u_g,u_b]=addlnval(first_head,second_tail,-g,-b,iy,jy,d_g,d_b,u_g,u_b,lv_bs);

[d_g,d_b,u_g,u_b]=addlnval(second_head,first_tail,-g,-b,iy,jy,d_g,d_b,u_g,u_b,lv_bs);

[d_g,d_b,u_g,u_b]=addlnval(second_tail,first_tail,g,b,iy,jy,d_g,d_b,u_g,u_b,lv_bs);

function [d_g,d_b,u_g,u_b]=addlnval(first_head,second_head,g,b,iy,jy,d_g,d_b,u_g,u_b,lv_bs)

if first_head==second_head

return;

end

j=getlocal(iy,jy,first_head,second_head,lv_bs,1);

if j==0

return;

end

u_b(j)=u_b(j)+b;

u_g(j)=u_g(j)+g;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Matlab中,可以使用矩阵运算和循环结构来形成节点导纳矩阵。首先,需要确定电路网络的节点数和元件参数。 1. 建立节点导纳矩阵的初始矩阵: 首先,创建一个大小为n x n的零矩阵,其中n为节点数。这个矩阵表示所有节点之间的连接关系。可以使用以下代码创建初始矩阵: ```matlab n = 4; % 节点数 Y = zeros(n,n); % 创建初始节点导纳矩阵 ``` 2. 添加元件导纳信息到节点导纳矩阵: 根据电路中的各个元件的导纳信息,将其添加到节点导纳矩阵中。例如,对于电阻元件,可以使用几个节点上的电压差和电流来计算电导,并将其添加到相关的矩阵元素中。类似地,对于电容和电感元件,可以使用充电电流和电压之间的关系来计算导纳。 以电阻为例,假设存在一个连接节点i和节点j的电阻R。可以使用下面的代码将这个电阻的导纳添加到节点导纳矩阵的相应元素中: ```matlab R = 1; % 电阻值 Y(i,i) = Y(i,i) + 1/R; Y(i,j) = Y(i,j) - 1/R; Y(j,i) = Y(j,i) - 1/R; Y(j,j) = Y(j,j) + 1/R; ``` 对于其他类型的元件,也可以采用类似的方法将其导纳信息添加到节点导纳矩阵中。 3. 完成节点导纳矩阵: 将所有元件的导纳信息添加到节点导纳矩阵后,即可得到完整的节点导纳矩阵。 使用上述步骤,结合电路网络的元件参数,就可以在Matlab中形成节点导纳矩阵。需要注意的是,在实际应用中,电路网络往往比简单的例子复杂得多,可能涉及多种类型的元件和更多的节点。因此,需要根据实际情况进行相应地调整和拓展。 ### 回答2: MATLAB可以用来形成节点导纳矩阵,通过节点导纳矩阵可以对电力系统进行分析和计算。节点导纳矩阵是一种表示电力系统中各节点之间连接和耦合关系的矩阵。下面以电力系统的节点导纳矩阵为例,介绍如何在MATLAB中形成这个矩阵。 首先,需要确定电力系统的节点数和节点之间的连接关系。可以通过电力系统的拓扑结构或者节点导纳矩阵的定义来确定这些信息。 然后,在MATLAB中定义一个二维数组来表示节点导纳矩阵。假设电力系统有n个节点,则导纳矩阵的大小为n×n。可以使用zeros或ones函数来初始化这个矩阵。 接下来,根据电力系统的连接关系,对导纳矩阵中的元素进行赋值。对于节点i和节点j之间的导纳元素,可以根据电力系统的拓扑结构或者节点导纳矩阵的定义来确定。如果节点i与节点j之间存在导纳元素,则在导纳矩阵中对应的元素为非零值;否则为零。可以通过循环来逐个赋值导纳矩阵的元素。 最后,导纳矩阵形成后,可以进行进一步的分析和计算。例如,可以使用MATLAB中的矩阵运算函数来计算电力系统中节点的电压和电流分布,以及计算系统的功率流和短路等。 通过使用MATLAB形成节点导纳矩阵,可以方便地对电力系统进行分析和计算。MATLAB提供了丰富的数学和工程计算功能,可以有效地进行电力系统的建模和仿真,帮助工程师和研究人员进行系统设计和优化。 ### 回答3: 在Matlab中,可以通过以下步骤来形成节点导纳矩阵: 1. 建立电路拓扑结构:首先,需要建立电路的拓扑结构,可以使用电路图或节点分析法来确定电路的连通关系。在Matlab中,可以使用矩阵来表示电路的连接关系。 2. 构建导纳矩阵:根据电路的拓扑结构,可以用矩阵的形式表示导纳矩阵导纳矩阵是一个方阵,其元素表示电路中各节点之间的互导纳关系。矩阵的每个元素由电路中相应的元件的阻抗、导纳或电导决定。 3. 填充导纳矩阵:根据电路的元件信息,可以将对应的元素填充到导纳矩阵中。例如,对于电阻元件,可以直接将电阻值填充到导纳矩阵的相应位置;对于电感元件和电容元件,可以根据频率和元件值计算出相应的导纳值,然后填充到导纳矩阵中。 4. 完成导纳矩阵:当所有的元件信息都填充到导纳矩阵中后,即完成了节点导纳矩阵的形成。可以对导纳矩阵进行进一步的分析,例如求解电路的电压和电流分布,计算功率等。 需要注意的是,在实际应用中,可能会遇到电路中含有非线性元件或受控元件的情况,这时需要进行更复杂的处理。另外,对于比较复杂的电路,可能需要使用更高级的工具箱或软件来进行节点导纳矩阵的计算和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值