Consigli sulla creazione di una funzione in matlab

judoca1992
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
diff erisca 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
apatriarca
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.

judoca1992
in poche parole devo far controllare la somma ogni valore che inserisco,grazie ti farò sapere per ulteriori dubbi,MUHAHAHAHA

judoca1992
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?

Shulz1
"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 :smt023

Spero di esserti stato di aiuto!

Saluti,
Shulz

judoca1992
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

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