2016-07-03 12 views
0

Ich habe einen Code, der tatsächlich funktioniert, aber der Ausgang sollte zusammen multipliziert werden. Außerdem war die Ausführungszeit nicht in Millisekunden. Dies ist der Matlab-CodeMATLAB: Das Produkt von Produkten mit Ausführungszeit in Millisekunden

function product = prod(A) 
tic; 
A=input('matrix A ='); 
[rows, columns] = size(A); 
for i=1:rows 
prod=A(i,i)*A(i,end) 
end 
seconds=toc 

Zum Beispiel A=[1,2,3;4,5,6;7,8,9] wenn gegeben, wenn i=1 wir 1*3=3 haben, wenn wir i=22*6=12 haben, wenn wir i=39*9=81 haben. Der Ausgang I sollte 3*12*81=2916 (das Produkt der Werte oben) sein soll, und die Zeit der Ausführung sollte Millisekunden betragen.

Wenn ich erweitern die Lösung, die Sie unten für den Code kredenzen, ist es ihnen nicht miteinander zu multiplizieren und die verstrichene Zeit scheint, große

Wenn der obige Code für die matrix A = [2,3,6,4;2,1,7,-2;6,8,1,-3;5,3,4,1] früher.

Meine Ausgabe ist

out = -22, -23, -7, -3 
Elapsed time is 10.200446 seconds. 

ich mehrere einander alle ausgegeben werden soll, so dass es

out = -22*-23*-7*-3 = 10626 
+0

Willkommen zu SO. Also, was ist das Problem? Welche Ausführungszeit erhalten Sie und warum sollte sie in Millisekunden sein? 'prod = A (i, i) * A (i, end)' wird in jeder Iteration der 'for'-Schleife überschrieben. Sie müssen vielmehr Ihre Schleife mit 'prod initialisieren = 1 'und die haben' prod = prod * A (i, i) * A (i, end) '. Es gibt möglicherweise einen noch effizienteren Weg, um Ihre Berechnungen durchzuführen. ;) –

+1

es scheint, dass das zweite Element 5 * 6 sein sollte, und nicht 2 * 6, bin ich richtig? – drorco

+1

Nur als ein Wort der Warnung, erstellen Sie nie eine Funktion mit dem gleichen Namen wie eine integrierte MATLAB-Funktion. Solange sich diese Funktion 'prod' in Ihrem aktuellen Pfad befindet, funktioniert [' prod'] (http://www.mathworks.com/help/matlab/ref/prod.html) nicht richtig. Außerdem geben Sie den Wert der Multiplikation an 'prod', der dann den Funktionsnamen überschreibt. Ich nehme an, Sie wollten die Ergebnisse Ihrem Rückgabewert 'Produkt' zuordnen. – beaker

Antwort

1

Nun wird, dauerte es einige Zeit, zu entziffern, was Sie versucht haben, zu tu, aber letztendlich war ich in der Lage, deine Ausgabe zu rekonstruieren. Also erstens gibt es keine Notwendigkeit für die Funktion prod ist, es macht alles nur noch chaotisch. Hier ist eine einfache Funktion, die der Trick:

function out = testValue 
A=input('matrix A ='); 
out=1; 
if mod(size(A),2)==0 
    for i = 1:length(A) 
     out = out*(A(i,i)*A(i,end)-A(i,end-1)*A(end,i)); 
    end 
else 
    for i = 1:(length(A)-1)/2 
     out = out*(A(i,i)*A(i,end)-A(i,end-1)*A(end,i)); 
    end 
end 
end 

Einige Bemerkungen über den Code oben:

  1. Keine Notwendigkeit für die columns Variable
  2. ich weggelassen die tictoc - Sie können sie hinzufügen bei Bedarf zurück
  3. Keine Verwendung für die prod Funktion anstelle der Eingang für prod ist einfach das, was Sie als Ausgabe betrachten.
  4. Sie haben out=1 für eine kumulative Produkt

Ich bin sicher, es gibt klügere Wege, dies zu tun, um zu initialisieren, aber als @beaker ist schrieb es nicht klar, was genau der Zweck dieses Codes ist.

Hoffen das hilft :)

+0

Es tut mir leid, alle Fragen zur Lösung zu packen. Zuerst helfen Sie mir, den Code zu bearbeiten, so dass es ausführbar ist @EBH – babs

+0

Dies wird zu chaotisch, warum Sie nicht eine andere Frage starten? – EBH

+0

@babs Bitte stellen Sie neue Fragen in einem neuen Post. Um eine Antwort als richtig zu markieren, klicken Sie auf das grüne Häkchen links neben der Antwort. Siehe http://meta.stackoverflow.com/questions/251078/how-to-update-and-accept-answers – beaker