CODICE MatLab - URGENTE
Ragazzi per favore ho bisogno di una mano. Sono totalmente una capra in MatLab. Il mio problema è il seguente: mi è stato chiesto di scrivere un codice, più in particolare una "function". Ho la formula che devo scrivere, i miei dubbi sono i seguenti:
1) la sintassi per la scrittura di una function è : function (argomenti output) = nome funzione (argomenti input)
Io come output ho bisogno di uno spettro (è la formula di uno spettro sismico); nel input cosa devo mettere? L'intera formula oppure una variabile (ad esempio "y") definita con la formula?
In pratica, così
a) function [spettro] = spectrum(formula)
oppure così
b) function [spettro] = spectrum(y)
y=formula
2) nella formula ci sono numerose variabili che devo definire ogni volta e che sono diverse le une dalle altre. Dove devo inserire queste variabili? Nel corpo della funzione oppure devo creare un file a parte (tipo un file txt) e richiamare quest'ultimo poi nella function?
So che sono domande banalissime per gli esperti, ma purtroppo mi hanno lasciato da solo e in balia senza spiegarmi nulla e io di linguaggi di programmazione non ci capisco nulla.
GRAZIE
1) la sintassi per la scrittura di una function è : function (argomenti output) = nome funzione (argomenti input)
Io come output ho bisogno di uno spettro (è la formula di uno spettro sismico); nel input cosa devo mettere? L'intera formula oppure una variabile (ad esempio "y") definita con la formula?
In pratica, così
a) function [spettro] = spectrum(formula)
oppure così
b) function [spettro] = spectrum(y)
y=formula
2) nella formula ci sono numerose variabili che devo definire ogni volta e che sono diverse le une dalle altre. Dove devo inserire queste variabili? Nel corpo della funzione oppure devo creare un file a parte (tipo un file txt) e richiamare quest'ultimo poi nella function?
So che sono domande banalissime per gli esperti, ma purtroppo mi hanno lasciato da solo e in balia senza spiegarmi nulla e io di linguaggi di programmazione non ci capisco nulla.
GRAZIE
Risposte
Cosa ci devi mettere in input dipende dalla tua formula e da cosa deve fare la tua funzione. Normalmente gli input sono le variabili indipendenti all'interno della formula. Se per esempio dovessi implementare la formula \( 1/2 m\,v^2 \) in input avresti la massa e la velocità.
Grazie per la risposta. Il problema è che io non riesco proprio a capire cosa debba andare in input e cosa in output. Provo a spiegarmi. Siamo nel campo della sismologia. Devo calcolarmi uno spettro teorico. So solamente COSA deve fare la mia funzione, ossia calcolarmi uno spettro tramite questa funzione:
(Oo*exp(-pi*f*ts)./(1+(f/Fc).*(f/Fc)))*2*pi*f
E questo è quello che la mia funzione DEVE FARE. Adesso, cosa devo mettere in input e cosa in output affinchè l'emme.file mi calcoli questo spettro?
Per quanto riguarda i parametri sono:
Oo=1 ed è fisso e non varia
f= varia tra 1-20
ts dipende da altri parametri ed è uguale a ts=d/v*Q. Di questi parametri l'unico fisso è "v" mentre "d" e "Q" sono variabili di volta in volta e il parametro Fc anche è diverso per ogni stazione/evento sismico.
Tutti questi parametri (Q,Fc,d) li conosco ma non so come fare a farli calcolare tutti in quest'unica formula! Cosa devo mettere in input e cosa in output?
(Oo*exp(-pi*f*ts)./(1+(f/Fc).*(f/Fc)))*2*pi*f
E questo è quello che la mia funzione DEVE FARE. Adesso, cosa devo mettere in input e cosa in output affinchè l'emme.file mi calcoli questo spettro?
Per quanto riguarda i parametri sono:
Oo=1 ed è fisso e non varia
f= varia tra 1-20
ts dipende da altri parametri ed è uguale a ts=d/v*Q. Di questi parametri l'unico fisso è "v" mentre "d" e "Q" sono variabili di volta in volta e il parametro Fc anche è diverso per ogni stazione/evento sismico.
Tutti questi parametri (Q,Fc,d) li conosco ma non so come fare a farli calcolare tutti in quest'unica formula! Cosa devo mettere in input e cosa in output?
L'output è lo spettro, quello che vuoi che la tua funzione ti calcoli. A questo punto hai che:
1. f è la frequenza e verrà calcolata automaticamente (credo) dalla tua funzione. Hai un range ma suppongo che tu voglia poter decidere quanti valori calcolarti in questo intervallo. Supponiamo quindi di aggiungere un primo input n alla tua funzione che rappresenta questo numero di valori nello spettro.
2. Q, Fc e d sembrano poi essere altri argomenti che devono essere passati alla funzione.
A questo punto hai quindi qualcosa come
1. f è la frequenza e verrà calcolata automaticamente (credo) dalla tua funzione. Hai un range ma suppongo che tu voglia poter decidere quanti valori calcolarti in questo intervallo. Supponiamo quindi di aggiungere un primo input n alla tua funzione che rappresenta questo numero di valori nello spettro.
2. Q, Fc e d sembrano poi essere altri argomenti che devono essere passati alla funzione.
A questo punto hai quindi qualcosa come
function [spettro] = spectrum(n, Q, Fc, d) Oo = 1 v = ... f = linspace(1, 20, n) ts = d/v*Q spettro = ... formula ...
Ti ringrazio, sei gentilissimo. Io comunque dovrei mettere in input questi parametri: ts, Fc e f.
Per f non devo creare una matrice tipo f=[0:0.5:20] (mi serve come passo di campionamento 0,5)?
Siccome Q, Fc e d sono valori che devo inserire io non devo inserire i valori nel corpo della funzione?
Comunque grazie per il tempo che mi stai dedicando, mi sento veramente un imbecille; mi rendo conto che per voi esperti sono stupidaggini queste cose ma per me è arabo
Per f non devo creare una matrice tipo f=[0:0.5:20] (mi serve come passo di campionamento 0,5)?
Siccome Q, Fc e d sono valori che devo inserire io non devo inserire i valori nel corpo della funzione?
Comunque grazie per il tempo che mi stai dedicando, mi sento veramente un imbecille; mi rendo conto che per voi esperti sono stupidaggini queste cose ma per me è arabo

Ho provato così:
function [spettro] = spectrum(n, Q, Fc, d)
Oo = 1
v =2000
d=1650
q=18
Fc=2.3
f = linspace(1, 20, n)
ts = d/v*Q
spettro = ... formula ...
ma mi da errore dicendo che "n" non è definito. (i valori di Fc, d e q sono valori reali); ho provato a definire n=0.5 e il risultato è stato uno 0..quindi non credo che vada bene come ho scritto:(
function [spettro] = spectrum(n, Q, Fc, d)
Oo = 1
v =2000
d=1650
q=18
Fc=2.3
f = linspace(1, 20, n)
ts = d/v*Q
spettro = ... formula ...
ma mi da errore dicendo che "n" non è definito. (i valori di Fc, d e q sono valori reali); ho provato a definire n=0.5 e il risultato è stato uno 0..quindi non credo che vada bene come ho scritto:(
Provando invece a impostare f=[1:0.5:20]
Mi da un errore alla linea della funzione di "using mtimes - Inner matrix dimensions must agree"
ho provato sia così: (Oo*exp(-pi*f*ts)./(1+(f/Fc).*(f/Fc)))*2*pi*f
che così: (Oo*exp(-pi*f*ts)./(1+(f/Fc).*(f/Fc))).*2*pi*f
uff:(
Mi da un errore alla linea della funzione di "using mtimes - Inner matrix dimensions must agree"
ho provato sia così: (Oo*exp(-pi*f*ts)./(1+(f/Fc).*(f/Fc)))*2*pi*f
che così: (Oo*exp(-pi*f*ts)./(1+(f/Fc).*(f/Fc))).*2*pi*f
uff:(
Posta l'intero codice. Il mio consiglio è di calcolare comunque sempre separatamente le varie parti dell'espressione invece di avere in una singola riga tutta la formula. È più facile infatti fare il debugging e comprendere cosa sta succedendo se ogni riga è abbastanza semplice.
Forse ho capito dov'era l'errore! Forse ci sono riuscito! Grazie mille amico! Se ho bisogno ancora verrò qui sicuro!