| salve, al momento nella HP Prime mancano le funzioni per calcolare i coefficienti di Fourier (analisi classica; mentre ci sono le funzioni per la FFT e la sua inversa). Saranno -a quanto pare- ripristinate nei prossimi aggiornamenti del firmware... Al momento si può usare un programma che gira solo in CAS e calcola i valori dei coefficienti a0, ak, bk, ck (per la serie di Fourier esponenziale), integrando su [0, π] o su [-π, π], a scelta, fornendo in input una funzione o una espressione... Ecco il codice da copiare in un programma su Prime intitolato "FourCoeff". Grazie all'aiuto di un Forum internazionale ho potuto usare una efficiente funzionalità "C like" che permette di inserire da due a tre parametri (a scelta), così da poter inserire ad es. fourcoeff(f, k) (se f è definita, ad es. come f:=t^2), o una espressione in t -fourcoeff(t+1, k), o in altra variabile, fourcoeff(x^2+2, x, k). Spero possa esservi utile, e spero che qualcuno di voi possa persino migliorarlo (l'output è personalizzato, e potrebbe essere cambiato, per esempio)... Salvo EDIT: il server di questo forum cambia il carattere per "PI" (pi greco) con -π, potete cambiarlo voi con il simbolo grafico o mettere ad es. PI, pi... CODICE ChooseInterval() BEGIN LOCAL choice; CHOOSE(choice,"Interval", "From 0 to π”, "From -π, π”); RETURN choice; END;
#cas fourcoeff(args):= // Coefficienti di fourier formula normale, by Salvo Micciché, v 1.0 // input funzione fourcoeff(func, k) o espressione funcoeff(expr, var, k) BEGIN local argv,argc,f,k; local ak, bk, a0,ck; argv:=[args]; argc:=size(argv); f := argv(1); k := argv(argc); IF argc=3 THEN f:=zip('unapply', f, argv(2)); END;
IF EXPR(" FourCoeff.ChooseInterval()")=1 THEN a0:=(int(f(t),t,0,2*PI))/(2*PI); ak:=(int(f(t)*cos(k*t),t,0,2*PI))/PI; bk:=(int(f(t)*sin(k*t),t,0,2*PI))/PI; ck:=( int(f(t)*e^(-i*k*t),t,0,2*pi))/(2*pi); return "[0,2π]”, 'a0', a0, 'ak/bk', ak, bk, 'ck', ck; ELSE a0:=(int(f(t),t,-pi,pi))/(2*pi); ak:=(int(f(t)*cos(k*t),t,-pi,pi))/pi; bk:=(int(f(t)*sin(k*t),t,-pi,pi))/pi; ck:=( int(f(t)*e^(-i*k*t),t,-pi,pi))/(2*pi); return “[-π, π]”,’a0', a0, 'ak/bk', ak, bk, 'ck',ck; END;
END; #end Edited by salvomic - 3/2/2015, 16:19
|