< M A T L A B > Copyright 1984-2005 The MathWorks, Inc. Version 7.1.0.183 (R14) Service Pack 3 August 02, 2005 To get started, select MATLAB Help or Demos from the Help menu. >> % confronto tra il metodo stupido e il metodo di horn per calcolare polinomi >> % quando la variabile e' una matrice e il grado e' alto >> % occorre scrivere phorn e pstupid in modo che accettino matrici >> % facciamo alcune prove in piccolo >> a=[1 2 3] a = 1 2 3 >> phorn(0.1,a) ans = 1.2300 >> pstupid(0.1,a) ans = 1.2300 >> phorn(10,a) ans = 321 >> pstupid(10,a) ans = 321 >> x=rand(3) x = 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 >> phorn(x,a) ans = 6.7765 4.7003 3.3659 1.7728 5.5451 0.4486 4.9673 6.3247 5.5403 >> pstupid(x,a) ans = 6.7765 4.7003 3.3659 1.7728 5.5451 0.4486 4.9673 6.3247 5.5403 >> phorn(x,a)-pstupid(x,a) ans = 1.0e-15 * -0.8882 0 -0.4441 0 -0.8882 0 -0.8882 0.8882 0 >> % nella tolleranza dei calcolo >> % ora prendiamo a di 100 elementi e x 100x100 >> x=rand(100); >> a=rand(1,100); >> tic; c=pstupid(x,a);toc; Elapsed time is 0.848249 seconds. >> tic; d=phorn(x,a);toc; Elapsed time is 0.075584 seconds. >> % vediamo un tempo 10 volte inferiore >> % proviamo un altro caso piu' grosso >> a=rand(1,100); >> x=rand(200,200); >> tic; d=phorn(x,a);toc; Elapsed time is 0.580279 seconds. >> tic; c=pstupid(x,a);toc; Elapsed time is 6.536174 seconds. >> norm(d-c)/norm(d) ans = 1.2023e-16 >> % se si aumenta la dimensione la differenza nei tempi cresce ancora >> x=rand(300,300); >> tic; c=pstupid(x,a);toc; Elapsed time is 21.719956 seconds. >> tic; d=phorn(x,a);toc; Elapsed time is 1.813237 seconds. >> norm(c-d)/norm(d) ans = 8.1131e-17 >> % qui horner e' 20 volte piu veloce.