Consigli sulla creazione di una funzione in matlab
Salve ragazzi mi sto preparando per un esame d'informatica(Fisica) ho un esercizio dove mi impallo un po'.
Allora devo scrivere una funzione che prende come parametro uno scalare e restituisce un array di
numeri casuali distribuiti uniformemente tra x e -x finché la somma dei numeri generati non
differisca da 0 per meno di 0,01 oppure sono gia stati generati 10000 numeri causali.Non voglio essere scritto l'intero codice in matlab,ma solo un indizio per far accendere la lampadina
Allora devo scrivere una funzione che prende come parametro uno scalare e restituisce un array di
numeri casuali distribuiti uniformemente tra x e -x finché la somma dei numeri generati non
differisca da 0 per meno di 0,01 oppure sono gia stati generati 10000 numeri causali.Non voglio essere scritto l'intero codice in matlab,ma solo un indizio per far accendere la lampadina
Risposte
Devi scrivere un ciclo in cui inserisci iterativamente un nuovo valore casuale al vettore e nella condizione verifichi che il numero massimo di numeri casuali non sia stato raggiunto e che la somma non sia nell'intervallo richiesto.
in poche parole devo far controllare la somma ogni valore che inserisco,grazie ti farò sapere per ulteriori dubbi,MUHAHAHAHA
function [A] = arrsom( x )
A(1)=-x;
i=2;
while (sum(A)<0.01 && sum(A)>0 && length(A)<9999)
A=[A,A(i)];
end
A=[A,x];
end
ho scritto cosi la funzione.Premetto che mi da solo il primo e l'ultimo valore cioè -x e x,quindi cosa c'è che non va nel ciclo while?
A(1)=-x;
i=2;
while (sum(A)<0.01 && sum(A)>0 && length(A)<9999)
A=[A,A(i)];
end
A=[A,x];
end
ho scritto cosi la funzione.Premetto che mi da solo il primo e l'ultimo valore cioè -x e x,quindi cosa c'è che non va nel ciclo while?
"judoca92":
function [A] = arrsom( x )
A(1)=-x;
i=2;
while (sum(A)<0.01 && sum(A)>0 && length(A)<9999)
A=[A,A(i)];
end
A=[A,x];
end
ho scritto cosi la funzione.Premetto che mi da solo il primo e l'ultimo valore cioè -x e x,quindi cosa c'è che non va nel ciclo while?
Ciao, penso che il codice che hai scritto sia concettualmente sbagliato, perchè:
1. non generi casualmente il numero da inserire
2. non incrementi l'indice 'i' che usi per inserire i valori nell'array
Comunque in pseudocodice io farei qualcosa del genere:
function f(x) i = 1 result = [] end = false while (not(end) && i < 10000) result[i] = rand(-x, x) if (abs(curSum) < 0.01) end = true end i = i + 1 end return result
Il codice presuppone che gli indici degli array partano da 1, e che inoltre la funzione rand(a,b) generi un valore compreso nell'intervallo [a,b]...
Inoltre ho dato per scontato che l'array sia dinamico, per cui nel momento in cui aggiungo un valore con un nuovo indice la sua dimensione viene adattata!
Purtroppo matlab non lo conosco benissimo, quindi ora sta a te adattare il codice

Spero di esserti stato di aiuto!
Saluti,
Shulz
Ho cambiato strategia(perché quella di creare un ciclo non mi andava).Questa funzione mi da l'array ma l'unica cosa che non va è la somma dei numeri dell'array
function [A] = arrsom( x )
A=[];
if (abs(sum(A))<0.01)
A=-x+2*x.*rand(1,10000);
end
end
infatti la somma è dell'ordine di 10^3
function [A] = arrsom( x )
A=[];
if (abs(sum(A))<0.01)
A=-x+2*x.*rand(1,10000);
end
end
infatti la somma è dell'ordine di 10^3