How can to compute the following case?
    8 views (last 30 days)
  
       Show older comments
    
If there is a cell D and its size 6*9 and this cell contains matrices. (Attached)
in this line: svd(D{1,1}.'*D{1,2});
how can I change the indices of D to do the multiplication of all combinations of D but without repeat the similar combinations such as:
D{1,1}.'*D{1,2} and D{1,2}.'*D{1,1}
and exclude the similar indicies such as
D{1,1}.'*D{1,1} and so on ... 
Then store all the results in "distance"
                [U,S,V]  = svd(D{1,1}.'*D{1,2});
                distance = sqrt(sum(arrayfun(@(i)acos(S(i,i))^2,1:4)))
2 Comments
Accepted Answer
  Torsten
      
      
 on 18 Jul 2023
        
      Moved: Torsten
      
      
 on 18 Jul 2023
  
        D = load("D.mat");
  D = D.D;
  n = size(D,1);
  m = size(D,2);
  distance = zeros(n,m,n,m);
  for i=1:n
    for j=1:m
        for i1=1:n
            for j1=1:m
                [~,S,~]  = svd(D{i,j}.'*D{i1,j1});
                distance(i,j,i1,j1) = sqrt(sum(arrayfun(@(k)acos(S(k,k))^2,1:size(S,1))));
            end
        end
    end
  end
 [M,I] = max(distance,[],'All')
 [i,j,i1,j1] = ind2sub([n,m,n,m],I)
 distance(6,9,6,8)
 distance(6,8,6,9)
0 Comments
More Answers (1)
  Chunru
      
      
 on 18 Jul 2023
        load(websave("D.mat", "https://www.mathworks.com/matlabcentral/answers/uploaded_files/1436693/D.mat"));
for i=1:size(D, 1)
    for j=1:size(D, 2)
        for i1=1:size(D, 1)
            for j1=1:size(D, 2)
                S{i,j,i1,j1} = D{i,j} - D{i1,j1};
            end
        end
    end
end
whos
S{1, 2, 3, 4}       % for example: D{1,2}-D{3,4}
5 Comments
  Torsten
      
      
 on 18 Jul 2023
				Are you sure all cell matrices directions{i,j} have the same number of columns ? The distance formula only applies under this condition.
See Also
Categories
				Find more on System Composer in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

