Help Calculator

[Prime] Calcolo dei coefficienti di Fourier

« Older   Newer »
  Share  
view post Posted on 3/2/2015, 10:32
Avatar

Member

Group:
Administrator
Posts:
111
Location:
Ragusa, Sicilia

Status:


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
 
Top
Sara D'Ambrosio
view post Posted on 22/11/2021, 12:55




buongiorno, ho provato a copiare il codice ma mi da un errore di sintassi nelle linee 4 e 22
 
Top
view post Posted on 7/1/2022, 09:54
Avatar

Advanced Member

Group:
Administrator
Posts:
1,486
Location:
Alatri (Frosinone)

Status:


CITAZIONE (Sara D'Ambrosio @ 22/11/2021, 12:55) 
buongiorno, ho provato a copiare il codice ma mi da un errore di sintassi nelle linee 4 e 22

Ciao Sara quel programma fu scritto prima che venissero implementate nel firmware i comandi per il calcolo dei coefficienti di Fourier direttamente nella calcolatrice. Per cui è sufficiente usare i comandi della calcolatrice stessa un programma esterno non serve:

CODICE
fourier_an Syntax:
fourier_an(Expr,Var,T,n,a)
Returns the nth Fourier coefficient an=2/T*∫(f(x)*cos(2*pi*n*x/T),a,a+T).
Example:
fourier_an(x^2,x,2,0,-1) → 1/3

fourier_bn Syntax:
fourier_bn(Expr,Var,T,n,a)
Returns the nth Fourier coefficient bn=2/T*∫(f(x)*sin(2*pi*n*x/T),a,a+T).
Example:
fourier_bn(x^2,x,2,0,-1) → 0

fourier_cn Syntax:
fourier_cn(Expr,Var,T,n,a)
Returns the nth Fourier coefficient cn=1/T*∫(f(x)*exp(-2*i*pi*n*x/T),a,a+T).
Example:
fourier_cn(x^2,x,2,0,-1) → 1/3
 
Top
2 replies since 3/2/2015, 10:32   313 views
  Share