Matrix operation connecting two Matrix
    5 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
    Pretesh John
 le 17 Nov 2020
  
    
    
    
    
    Commenté : Pretesh John
 le 27 Nov 2020
            I have two matrices A=[11;15;45;17;1] B=[2 4 0; 3 4 5; 4 0 0; 5 0 0; 0 0 0] Where B is a kind of refrence matrix which is showing the element number of A. For example B11 (=2) means second element of A (=15), B22 (=4) means forth element of A (=17) I want to create a mathematical expression like X=A+u(B-A) where 'u' is a constant number and 'X' is also and column matrix containing all the values of expression. Example: for first row of B X11=A11+u(B11-A11)=A11+u(A21-A11) X21=A11+u(B12-A11)=A11+u(A41-A11) Then X31=A21+u(B21-A21)=A21+u(A31-A21) and so on
How can I create a program. Thanks
0 commentaires
Réponse acceptée
  CHENG QIAN LAI
 le 24 Nov 2020
        
      Modifié(e) : CHENG QIAN LAI
 le 24 Nov 2020
  
      For example:
B(1,1)=2 means second element of A (=15)  -->  A( B(1,1),1 ) = A( 2,1 ) = 15
B(2,2)=4 means forth  element of A (=17)     -->   A( B(2,2),1 ) = A( 4,1 ) = 17
B(1,3)=0 --> A( B(1,3),1 ) = A( 0,1 ) -->Index in position 1 is invalid. Array indices must be positive integers or logical values.
if B(r,c)=0 ,set X(r,c)=NaN
Example:
let u=1;
for first row of B 
X(1,1)=A(1,1)+u*( A(B(1,1),1) - A(1,1) )=A(1,1)+ u*( A(2,1) -A(1,1) )=15
X(1,2)=A(1,1)+u*( A(B(1,2),1) - A(1,1) )=A(1,1)+ u*( A(4,1) -A(1,1) )=17
X(1,3)=A(1,1)+u*( A(B(1,3),1) - A(1,1) )=A(1,1)+ u*( A(0,1) -A(1,1) ) -->NaN
for secon row of B 
X(2,1)=A(2,1)+u*( A(B(2,1),1) - A(2,1) )=A(2,1) +u*( A(3,1) -A(2,1) )=45
X(2,2)=A(2,1)+u*( A(B(2,2),1) - A(2,1) )=A(2,1) +u*( A(4,1) -A(2,1) )=17
X(2,3)=A(2,1)+u*( A(B(2,3),1) - A(2,1) )=A(2,1) +u*( A(5,1) -A(2,1) )=1
for third row of B 
X(3,1)=A(3,1)+u*( A(B(3,1),1) - A(3,1) )=A(3,1) +u*( A(4,1) -A(3,1) ) =17
X(3,2)=A(3,1)+u*( A(B(3,2),1) - A(3,1) )=A(3,1) +u*( A(0,1) -A(3,1) ) -->NaN
X(3,3)=A(3,1)+u*( A(B(3,3),1) - A(3,1) )=A(3,1) +u*( A(0,1) -A(3,1) ) -->NaN
row=4
X(4,1)=A(4,1)+u*( A(B(4,1),1) - A(4,1) )=A(4,1) +u*( A(5,1) -A(4,1) )=29
X(4,2)=A(4,1)+u*( A(B(4,2),1) - A(4,1) )=A(4,1) +u*( A(0,1) -A(4,1) ) -->NaN 
X(4,3)=A(4,1)+u*( A(B(4,3),1) - A(4,1) )=A(4,1) +u*( A(0,1) -A(4,1) ) -->NaN 
row=5
X(5,1)=A(3,1)+u*( A(B(5,1),1) - A(3,1) )=A(3,1) +u*( A(0,1) -A(5,1) ) -->NaN 
X(5,2)=A(3,1)+u*( A(B(5,2),1) - A(3,1) )=A(3,1) +u*( A(0,1) -A(5,1) ) -->NaN
X(5,3)=A(3,1)+u*( A(B(5,3),1) - A(3,1) )=A(3,1) +u*( A(0,1) -A(5,1) ) -->NaN
u=1;
A=[11;15;45;17;1];
B=[2 4 0; 
   3 4 5; 
   4 0 0; 
   5 0 0; 
   0 0 0];
X=NaN(size(B))  % =NaN(5,3)
% X =
%    NaN   NaN   NaN
%    NaN   NaN   NaN
%    NaN   NaN   NaN
%    NaN   NaN   NaN
%    NaN   NaN   NaN
a=repmat(A,1,3)
% a =
%     11    11    11
%     15    15    15
%     45    45    45
%     17    17    17
%      1     1     1
idx=B>0 & B <=numel(A) % or idx=find( B>0 & B <=numel(A) )
% idx =
%   5×3 logical array
%    1   1   0
%    1   1   1
%    1   0   0
%    1   0   0
%    0   0   0
X(idx)=a(idx) + u*( a(B(idx),1) - a(idx) )
% X =
%     15    17   NaN
%     45    17     1
%     17   NaN   NaN
%      1   NaN   NaN
%    NaN   NaN   NaN
% or
Y=a(idx) + u*( a(B(idx),1) - a(idx) )
% Y =
%     15
%     45
%     17
%      1
%     17
%     17
%      1
Plus de réponses (0)
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

