O gráfico acima mostra que o Scilab conseguiu ser consistemente mais rápido. Não foi usada nenhuma técnica de otimização para ganho de velocidade. O tempo para solucionar o sistema linear é calculado pela média seis de execuções, sendo retirados desse cálculo a execução mais lenta e a mais rápida.
Código Scilab:
clc;
function tinv = tinvm(N)
A = rand(N,N,'n');
y = rand(N,1,'n');
kk=1;
mdt = 0;
mit = %inf;
mxt = 0.0;
while kk<6 br="" do=""> < 6;
Ai = inv(A);
C = Ai * y;
dt = toc();
mdt = mdt + dt;
if dt > mxt then
mxt = dt; end;
if mit > dt then
mit = dt; end;
kk=kk+1;
end;
mediana = (mdt - mit - mxt)/(kk-3);
tinv = mediana;
endfunction
v = [];
for kl=100:100:1400
tt = tinvm(kl);
disp([tt, kl]);
v = [v, tt];
end;
kl = 100:100:1400;
plot(kl,v,'-o');6>
Código Python:
import numpy as np import time as tm import matplotlib.pyplot as plt def tinvm(N): A = np.matrix(np.random.random((N,N))); y = np.matrix(np.random.random((N,1))); kk=1; mdt = 0; mxt = 0; mit = 999.99; while kk<6: t1 = tm.time(); Ai = A.I; C = Ai * y; t2 = tm.time(); dt = t2 - t1; mdt = mdt + dt; if dt > mxt: mxt = dt; if mit < dt: mit = dt; kk=kk+1; mediana = (mdt - mit - mxt)/(kk-3); return mediana km = 100; kt = 0; tempos = np.zeros((14,1)); while km<1500: mmm = tinvm(km); tempos[kt] = mmm; kt = kt + 1; km = km + 100; print('Mediana = ',mmm); print(tempos); ktt = np.arange(100,1500,100);
#tempos do Scilab:
temps = [0.0013333, 0.008, 0.0246667, 0.0546667, 0.1043333, 0.177, 0.274, 0.424, 0.6116667, 0.817, 1.1216667, 1.4966667, 1.9436667, 2.469];
plt.plot(ktt,tempos,'b-o',label = 'Python'); plt.plot(ktt,temps,'g-s',label = 'Scilab'); plt.title('Inversao de matrizes Python x Scilab'); plt.xlabel('Tamanho: N x N'); plt.ylabel('Tempo (s)'); plt.grid(); plt.legend(); plt.show();
Muito bom, parabéns!!!
ResponderExcluir