Una cosa da ricordare è che le ottimizzazioni siano applicate in modo diverso se stai correndo dalla riga di comando o una funzione M salvata.
Ecco una prova della mia:
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
I risultati sulla mia macchina Windows che eseguono 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)
Nota che i risultati oscillano un po 'con diverse corse in cui l'ordine di le chiamate vengono mescolate. Quindi prendi i tempi con un pizzico di sale.
La mia conclusione: non importa in termini di velocità se si utilizza 1i
o 1*i
.
Una differenza interessante è che se si dispone anche di una variabile nel campo di applicazione funzione in cui si usa anche come l'unità immaginaria, MATLAB getta un errore:
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.
Per vedere l'errore, il cambiamento quanto sopra test3
funzione in:
function a = test3
a = zeros(1e7,1);
for n=1:1e7
a(n) = 2 + 2*i;
end
i = rand(); %// added this line!
end
per esempio, la variabile i
stato utilizzato sia come una funzione e una variabile nello stesso ambito locale.
E il caso più generale di '2 * i' contro' 2i' (o anche '2 * 1i')? – horchler
Vedo un miglioramento x 5 con R14 sul portatile rinky dink con XP. –
Applicheremo 'clear all' prima di ogni ciclo? –