【问题标题】:Why is this code failing to process a diferent matrix?为什么此代码无法处理不同的矩阵?
【发布时间】:2021-10-09 00:02:36
【问题描述】:

此代码正在设法获得一些矩阵运算,但是当修改矩阵上的初始值时,结果显示为 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

给下一个

【问题讨论】:

  • 到底哪里失败了?它会抛出什么错误?

标签: matlab matrix octave


【解决方案1】:

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

【讨论】:

  • 以及如何调整它以使索引与行数相同,这应该计算数据中的任意行数
  • @avelardo:问题在于将order 设置为等于列数,无论您的电路有多少节点,它始终为 4。在您标记为finding order of matrix in C language way 的代码中,您正确地将order 设置为最大节点索引。在您的 MATLAB 代码中使用相同的方法。
猜你喜欢
  • 2021-01-12
  • 2023-03-10
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 2020-01-25
  • 1970-01-01
相关资源
最近更新 更多