Codice Matlab
Salve, ho scritto un codice per la costruzione di un vettore (codice che successivamente dovrei richiamare in un altro codice che implementa un metodo numerico) ma i risultati che ottengo con il Matlab non coincidono con i risultati che ottengo con carta e penna. Il mio vettore deve contenere numeri della forma $\gamma=k+j*\alpha$ con $k,j\in\mathbb{N}$ e tali che $\gamma\leq (p-1)$, a partire da certi $\alpha$ e $p$ che fornisco in input. Vi riporto il codice.
in realtà ho provato a implementare il codice in modi diversi, anche con delle modifiche rispetto a quello che vi lascio, ma non ottengo mai il risultato atteso. Voi ci vedete qualcosa di strano? Se volete provarci, potete testare nel caso $p=3$ e $\alpha=0.7$:il mio vettore dovrebbe essere, a meno di miei errori di calcolo, il seguente $[0,0.7,1, 1.4,1.7,2 ]$. Spero che mi aiutiate a capire dove sbaglio! Grazie!
function [a]=gam(alpha,p) a=0:1:p-1 %costruisco il vettore degli elementi $0, 1, 2,..., p-1$ che corrispondono al caso j=0 j=1; %inizializzazione di j %a questo punto comincio a lavorare su valori di j diversi da zero for i=1:(p-1) n=a(i)+j*alpha; while (n<=(p-1)) a(end+1)=n; j=j+1; end i=i+1; end
in realtà ho provato a implementare il codice in modi diversi, anche con delle modifiche rispetto a quello che vi lascio, ma non ottengo mai il risultato atteso. Voi ci vedete qualcosa di strano? Se volete provarci, potete testare nel caso $p=3$ e $\alpha=0.7$:il mio vettore dovrebbe essere, a meno di miei errori di calcolo, il seguente $[0,0.7,1, 1.4,1.7,2 ]$. Spero che mi aiutiate a capire dove sbaglio! Grazie!
Risposte
Ciao, due osservazioni.
1. Il ciclo while dipende da \(n\), che però non viene aggiornata all'interno del ciclo e quindi il ciclo è infinito
2. La variabile \(j\) credo debba essere resettata dentro il ciclo for da qualche parte, giusto?
1. Il ciclo while dipende da \(n\), che però non viene aggiornata all'interno del ciclo e quindi il ciclo è infinito
2. La variabile \(j\) credo debba essere resettata dentro il ciclo for da qualche parte, giusto?
Sì, effettivamente...
ho provato a correggere nel modo che segue:
function [a]=gam(alpha,p)
a=0:1:p-1 %costruisco il vettore degli elementi $0, 1, 2,..., p-1$ che corrispondono al caso j=0
%a questo punto comincio a lavorare su valori di j diversi da zero
for i=1:(p-1)
j=1;
n=a(i)+j*alpha;
while (n<=(p-1))
a(end+1)=n;
j=j+1;
n=a(i)+j*alpha;
end
end
Nel caso considerato prima, ossia per $p=3$ e $\alpha=0.7$ il risultato coincide, quindi penso sia corretto. Infatti:
>> [a]=gam(0.7,3)
a =
0 1.0000 2.0000 0.7000 1.4000 1.7000
A questo punto direi che il codice pu$ò$ andare, oppure ci sono delle migliorie da fare?
ho provato a correggere nel modo che segue:
function [a]=gam(alpha,p)
a=0:1:p-1 %costruisco il vettore degli elementi $0, 1, 2,..., p-1$ che corrispondono al caso j=0
%a questo punto comincio a lavorare su valori di j diversi da zero
for i=1:(p-1)
j=1;
n=a(i)+j*alpha;
while (n<=(p-1))
a(end+1)=n;
j=j+1;
n=a(i)+j*alpha;
end
end
Nel caso considerato prima, ossia per $p=3$ e $\alpha=0.7$ il risultato coincide, quindi penso sia corretto. Infatti:
>> [a]=gam(0.7,3)
a =
0 1.0000 2.0000 0.7000 1.4000 1.7000
A questo punto direi che il codice pu$ò$ andare, oppure ci sono delle migliorie da fare?
Il caso \(i = p-1\) del ciclo for è superfluo e può essere rimosso.
Potresti mettere il codice in un ambiente appropriato, come ho fatto io modificando il tuo messaggio iniziale.
Perché metti le lettere accentate come formule??
Potresti mettere il codice in un ambiente appropriato, come ho fatto io modificando il tuo messaggio iniziale.
Perché metti le lettere accentate come formule??
Scusami! Farò più attenzione dal prossimo messaggio!
Ho provato a rimuovere il caso $i=p-1$ ma ottengo un risultato diverso:perdo l'ultimo elemento del vettore. Quindi l'ho reinserito e penso che lascerò il codice così.
Grazie mille per l'aiuto!
Ho provato a rimuovere il caso $i=p-1$ ma ottengo un risultato diverso:perdo l'ultimo elemento del vettore. Quindi l'ho reinserito e penso che lascerò il codice così.
Grazie mille per l'aiuto!
"Annarella87":
Ho provato a rimuovere il caso $i=p-1$ ma ottengo un risultato diverso:perdo l'ultimo elemento del vettore. Quindi l'ho reinserito e penso che lascerò il codice così.
Non dovrebbe essere così: quando \(i = p-1 = 2\) non puoi ottenere l'elemento \(1.7\)...
Va beh, se funziona è comunque risolto

Sì, lascio così.
Grazie di nuovo per l'aiuto!
Grazie di nuovo per l'aiuto!