Eine Sache zu erinnern ist, dass Optimierungen anders angewendet werden, ob Sie laufen von der Kommandozeile oder einer gespeicherten M-Funktion. Hier
ist ein Test meiner eigenen:
function testComplex()
tic, test1(); toc
tic, test2(); toc
tic, test3(); toc
tic, test4(); toc
tic, test5(); toc
tic, test6(); toc
end
function a = test1
a = zeros(1e7,1);
for n=1:1e7
a(n) = 2 + 2i;
end
end
function a = test2
a = zeros(1e7,1);
for n=1:1e7
a(n) = 2 + 2j;
end
end
function a = test3
a = zeros(1e7,1);
for n=1:1e7
a(n) = 2 + 2*i;
end
end
function a = test4
a = zeros(1e7,1);
for n=1:1e7
a(n) = 2 + 2*j;
end
end
function a = test5
a = zeros(1e7,1);
for n=1:1e7
a(n) = complex(2,2);
end
end
function a = test6
a = zeros(1e7,1);
for n=1:1e7
a(n) = 2 + 2*sqrt(-1);
end
end
Die Ergebnisse auf meinem Windows-Rechner läuft R2013a:
>> testComplex
Elapsed time is 0.946414 seconds. %// 2 + 2i
Elapsed time is 0.947957 seconds. %// 2 + 2j
Elapsed time is 0.811044 seconds. %// 2 + 2*i
Elapsed time is 0.685793 seconds. %// 2 + 2*j
Elapsed time is 0.767683 seconds. %// complex(2,2)
Elapsed time is 8.193529 seconds. %// 2 + 2*sqrt(-1)
Beachten Sie, dass die Ergebnisse ein wenig mit verschiedenen Läufen schwanken, wo die Reihenfolge der Anrufe werden gemischt. Also nimm die Zeiten mit einem Körnchen Salz.
Meine Schlussfolgerung: spielt keine Rolle in Bezug auf Geschwindigkeit, wenn Sie 1i
oder 1*i
verwenden.
Ein interessanter Unterschied ist, dass, wenn Sie auch eine Variable im Funktionsumfang haben, wo Sie es auch als imaginäre Einheit verwenden, MATLAB einen Fehler wirft:
Error: File: testComplex.m Line: 38 Column: 5
"i" previously appeared to be used as a function or command, conflicting with its
use here as the name of a variable.
A possible cause of this error is that you forgot to initialize the variable, or you
have initialized it implicitly using load or eval.
die Fehler zu sehen, ändern die obige Funktion in test3
:
function a = test3
a = zeros(1e7,1);
for n=1:1e7
a(n) = 2 + 2*i;
end
i = rand(); %// added this line!
end
dh wurde die variable i
sowohl als eine Funktion und eine Variable in dem gleichen lokalen Bereich verwendet.
Wie wäre es mit dem allgemeineren Fall von '2 * i' vs.' 2i' (oder sogar '2 * 1i')? – horchler
Ich sehe eine x 5 Verbesserung mit R14 auf Rinky Dink Laptop mit XP. –
Ich würde 'clear all 'vor jeder Schleife anwenden? –