为什么此代码无法处理不同的矩阵?

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

给出下一个

ij 的嵌套循环中,您使用 data 的前两列的元素作为索引。当您从 data 中删除最后一行时,您将删除唯一具有索引 = 4 的行。结果 Y 的第四行和第四列没有变化,都保持为零并且 Y 是单数。