[MatLab] Onda Quadra

Ahi1
Ciao a tutti!

Volevo sapere perché questo programma

function x=ondaQuadra(A,Toss,f,fc)
t=linspace(0,Toss,round(Toss*fc)); % vettore dei tempi
A=1; % valore del primo campione
count=0;
for i=1:length(t),
if count count=count+1; % costante il campione corrente
else
count=0; % Ogni mezzo ciclo si inverte
A=-A; % l’ampiezza
end
x(i)=A;
end
plot(t,x);

mi dà il seguente errore, mi dice che non è definito Toss. Se provo a definirlo io così:

f = 1
fc = 10
e Toss = 1/fc

non mi dà più l'errore ma non mi plotta più "nulla" (il grafico è completamente bianco), dove sbaglio?

Grazie!

Risposte
raff5184
Il codice dei programmi mettilo tra i tag "code" così è più leggibile

raff5184
Allora:
1. Perché dai A come argomento della funzione se poi lo poni tu A=1 ?
2. Toss è una variabile, non è una keyword di matlab, quindi devi definirla tu.
3. Se $Toss = 1/fc$ allora $round(Toss*fc)$ è uguale a 1, e ciò significa che il tuo linspace va da 0 a 1 ed ha 1 solo elemento

Per capire gli errori togli i $;$ e lancia il programma ;)

Ahi1
"raff5184":
Il codice dei programmi mettilo tra i tag "code" così è più leggibile


C'erano, ma non se li è presi :)

Ahi1
"raff5184":
Allora:
1. Perché dai A come argomento della funzione se poi lo poni tu A=1 ?
2. Toss è una variabile, non è una keyword di matlab, quindi devi definirla tu.
3. Se $Toss = 1/fc$ allora $round(Toss*fc)$ è uguale a 1, e ciò significa che il tuo linspace va da 0 a 1 ed ha 1 solo elemento

Per capire gli errori togli i $;$ e lancia il programma ;)


Non definisco più A e Toss e mi dà il seguente errore...

Dice sempre Toss undefined Error line 2 t = linspace(....

raff5184
non ho capito ora dov'è ancora il problema...
Toss glielo devi dire tu quanto vale, passandoglielo come argomento quando richiami la funzione

Ahi1
"raff5184":
non ho capito ora dov'è ancora il problema...
Toss glielo devi dire tu quanto vale, passandoglielo come argomento quando richiami la funzione


Ma scusa io non capisco, vado nel workspace di matlab e scrivo:

ondaQuadra(A,Toss,f,fc);

Ma A, Toss, f, fc le devo definire nel workspace di Matlab, oppure direttamente nell'm-file. O ancora dovrei fare qualcosa del genere:

ondaQuadra(A,0.01,500,1000);

?

raff5184
"Ahi":

Ma A, Toss, f, fc le devo definire nel workspace di Matlab, oppure direttamente nell'm-file. O ancora dovrei fare qualcosa del genere:

ondaQuadra(A,0.01,500,1000);

?
l'ultima. E' un normale richiamo di funzione.
Ad es se voglio usare la funzione sqrt( ), per calcolare la radice di 16 e salvare il valore in $a$, dalla command window scrivo:

a = sqrt(16);

oppure
x = 16;
a = sqrt(x);

se faccio solo: a = sqrt(x); %il programma mi dice: che è x???? Gli devi dire tu che x è 16

Per questo dicevo è strano che A lo usi come parametro della funzione e poi poni A=1 all'interno. E' come dire calcolami sqrt(16) ma la funzione ti dice, no io ti calcolo sqrt(25)

Ahi1
"raff5184":
[quote="Ahi"]
Ma A, Toss, f, fc le devo definire nel workspace di Matlab, oppure direttamente nell'm-file. O ancora dovrei fare qualcosa del genere:

ondaQuadra(A,0.01,500,1000);

?
l'ultima. E' un normale richiamo di funzione.
Ad es se voglio usare la funzione sqrt( ), per calcolare la radice di 16 e salvare il valore in $a$, dalla command window scrivo:

a = sqrt(16);

oppure
x = 16;
a = sqrt(x);

se faccio solo: a = sqrt(x); %il programma mi dice: che è x???? Gli devi dire tu che x è 16

Per questo dicevo è strano che A lo usi come parametro della funzione e poi poni A=1 all'interno. E' come dire calcolami sqrt(16) ma la funzione ti dice, no io ti calcolo sqrt(25)[/quote]

E' un esercizio preso dalle soluzioni del professore, comunque modificando i parametri ho ottenuto invece di una tringolare, un'onda quadrata...

raff5184
"Ahi":
comunque modificando i parametri ho ottenuto invece di una tringolare, un'onda quadrata...
è quello che volevi no? :D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.