为什么此代码无法处理不同的矩阵?
Why is this code failing to process a diferent matrix?
此代码设法进行一些矩阵运算,但是当修改矩阵的初始值时,结果显示为 NaN,我不明白为什么,因为它应该能够管理(几乎)任何大小矩阵。
%data matrix
data=[0 1 0 1j
0 2 0 0.8j
1 2 0 0.4j
1 3 0 0.2j
2 3 0 0.2j
3 4 0 0.08j];
% from to R X
%Z=[0 1 0 1j
% 0 2 0 0.8j
% 1 2 0 0.4j
% 1 3 0 0.2j
%2 3 0 0.2j
%3 4 0 0.08j];
%finding order of matrix in C language way
%o1=max(Z(:,1));
%o2=max(Z(:,2));
%order=(max(o1,o2))
%find number of rows of Z= Toatl number of nodes
%row=length(Z(:,1))
[row,col]=size(data);
order=col
%Change last column into admittance, now last column also inculdes R
for m=1:row
data(m,4)=1/(data(m,3)+data(m,4));
end
Z2adm=data;
%Yadmittance as a matrixo of zeros first
Y=zeros(order,order);
%finding ybus matrix
%1-for off-digonal vlaues
for i=1:row
for j=1:order
%discard source node
if data(i,1)==0||data(i,2)==0
a=0;
%for off digonal entries
elseif data(i,1)~=0||data(i,2)~=0
Y(data(i,1),data(i,2))=-data(i,4);
Y(data(i,2),data(i,1))=-data(i,4);
end
end
end
%2-digonal values
for a=1:order %for k
for b=1:row
if data(b,1)==a ||data(b,2)==a
Y(a,a)=(Y(a,a)+data(b,4));
end
end
end
Ybus=Y
%To find Z bus
Zbus=inv(Y)
%As Ibus=Ybus*Vbus so we can find too if we know Ibus. As here two currnet
%sources so suppose
Ibus=[1;1;0;0];
Vbus=Ybus\Ibus
当使用原始矩阵时,它没有问题,但是如果你添加或删除一行,这会在 data
上失败。
即修改显示的数据
数据=[0 1 0 1j
0 2 0 0.8j
1 2 0 0.4j
1 3 0 0.2j
2 3 0 0.2j];
% 3 4 0 0.08j
给出下一个
在 i
和 j
的嵌套循环中,您使用 data
的前两列的元素作为索引。当您从 data
中删除最后一行时,您将删除唯一具有索引 = 4
的行。结果 Y
的第四行和第四列没有变化,都保持为零并且 Y
是单数。
此代码设法进行一些矩阵运算,但是当修改矩阵的初始值时,结果显示为 NaN,我不明白为什么,因为它应该能够管理(几乎)任何大小矩阵。
%data matrix
data=[0 1 0 1j
0 2 0 0.8j
1 2 0 0.4j
1 3 0 0.2j
2 3 0 0.2j
3 4 0 0.08j];
% from to R X
%Z=[0 1 0 1j
% 0 2 0 0.8j
% 1 2 0 0.4j
% 1 3 0 0.2j
%2 3 0 0.2j
%3 4 0 0.08j];
%finding order of matrix in C language way
%o1=max(Z(:,1));
%o2=max(Z(:,2));
%order=(max(o1,o2))
%find number of rows of Z= Toatl number of nodes
%row=length(Z(:,1))
[row,col]=size(data);
order=col
%Change last column into admittance, now last column also inculdes R
for m=1:row
data(m,4)=1/(data(m,3)+data(m,4));
end
Z2adm=data;
%Yadmittance as a matrixo of zeros first
Y=zeros(order,order);
%finding ybus matrix
%1-for off-digonal vlaues
for i=1:row
for j=1:order
%discard source node
if data(i,1)==0||data(i,2)==0
a=0;
%for off digonal entries
elseif data(i,1)~=0||data(i,2)~=0
Y(data(i,1),data(i,2))=-data(i,4);
Y(data(i,2),data(i,1))=-data(i,4);
end
end
end
%2-digonal values
for a=1:order %for k
for b=1:row
if data(b,1)==a ||data(b,2)==a
Y(a,a)=(Y(a,a)+data(b,4));
end
end
end
Ybus=Y
%To find Z bus
Zbus=inv(Y)
%As Ibus=Ybus*Vbus so we can find too if we know Ibus. As here two currnet
%sources so suppose
Ibus=[1;1;0;0];
Vbus=Ybus\Ibus
当使用原始矩阵时,它没有问题,但是如果你添加或删除一行,这会在 data
上失败。
即修改显示的数据 数据=[0 1 0 1j 0 2 0 0.8j 1 2 0 0.4j 1 3 0 0.2j 2 3 0 0.2j]; % 3 4 0 0.08j
给出下一个
在 i
和 j
的嵌套循环中,您使用 data
的前两列的元素作为索引。当您从 data
中删除最后一行时,您将删除唯一具有索引 = 4
的行。结果 Y
的第四行和第四列没有变化,都保持为零并且 Y
是单数。