2017-03-12 15 views
0

Ich habe 2 Matrizen wie folgt definiert:Matlab Array-Multiplikation nach linearer Indexierungs

A=[1 2;3 4] 
B=[1 4; 5 3] 

Dann definiere ich Aensem, Bensem und Gensem wie folgt aus:

Arow=A(:);  
Brow=B(:); 

Aensem=repmat(Arow,1,10);  
Bensem=repmat(Brow,1,10); 

G=A*B; 
Grow=G(:); 
Gensem=repmat(Grow,1,10); 

I eine Funktion erstellen müssen, können Berechnen Sie beliebige Gensem -ähnliche Arrays direkt von Aensem und Bensem. Ich kenne nur Aensem und Bensem. Ich habe versucht, die folgende Methode, aber es funktioniert nicht:

function ret = mat_mult(v1, v2, r) 
    ret = zeros(size(v1)); 
    for i = 1:2*r.c.M 
     for j = 1:2*r.c.M 
      sum = 0; 
      for k = 1:2*r.c.M 
       sum = sum + ... 
        v1(idx1(i,k,r),:) .* v2(idx1(k,j,r),:); 
       ret(idx1(i,j,r),:)=sum; 
      end 
     end 
    end    
end  
+0

Welche Funktion hat 'mat_mult'? Du hast es definiert, aber nie benutzt. – m7913d

+0

"nicht funktioniert" ist keine gültige Problemaussage für SO. Bitte geben Sie an, was falsch ist: führt die Berechnung zu einem falschen Wert? Erhalten Sie einen Fehler? Funktioniert es für einige Eingaben und funktioniert nicht für andere? Fängt Ihr Computer an, wenn Sie den Code ausführen? –

Antwort

3

Wenn ich Ihre Frage richtig verstanden habe, wollen Sie Gensem direkt von Aensem und Bensem zu berechnen. Dies kann folgendermaßen geschehen:

A_ = reshape(Aensem(:, 1), 2, 2); % extract A from Aensem 
B_ = reshape(Bensem(:, 1), 2, 2); % extract B from Bensem 
G_ = A_*B_; % calculate G based on the extracted A and B 
Gensem_ = repmat(G_(:),1,10); % build Gensem