Integrale e soglie

di il
3 risposte

Integrale e soglie

Salve io avrei il seguente esercizio da svolgere:
Ho il seguente vettore:
a=(2,3,3,4,3,2,2,2,2)
che rappresenta dei valori di energia.
Devo costruire l'integrale come somma iterativa, quindi ad esempio il vettore risultante sarà:
b=(2,3+2,3+2+3,3+2+3+4...etc)
che scritto meglio è:
b=(2,5,8,12)
Il problema consiste nel far ripartire il conteggio dell'integrale nel momento in cui supero una certa soglia, che fisso ad esempio a 10, in quel momento devo generare un vettore che come primo elemento abbia il valore corrispondente al momento prima in cui si verifichi il superamento della soglia.
Ad esempio ipotizziamo di essere nel momento in cui la somma iterativa di b sia arrivata al seguente stato:
b=(2,5,8,12)
Dato che 12>10 deve fermarsi, stampare
evento=(8)
azzerare b e ripartire a contare dal valore corrispondente in a (cioè il suo quarto elemento) avrò così:
b=(4,4+3,4+3+2,4+3+2+2)
cioè:
b=(4,7,9,11)
avendo di nuovo superato 10 devo portare b ad avere valore 2 e ricominciare così.
Ho scritto tale calcolo in questo modo:

a=[2;3;3;4;3;2;2;2;2]
for j=1:length(a)
b(j)=sum(a(1:j));
if b(j)>10
evento(j)=b(j-1);
end
end

Come vettore evento ottengo infatti evento=(0,0,0,8) però poi è sbagliato perchè quello che non riesco a fare è far ripartire la somma iterativa dal valore 4 e creare l'altro vettore di b
b=(4,7,9,11)
Spero di essere stata chiara e che qualcuno possa aiutarmi.
Grazie.

3 Risposte

  • Re: Integrale e soglie

    a = [2,3,3,4,3,2,2,2,2];
    c=a;
    clc
    evento=[];
    while ~isempty(c)
    b=cumsum(c);
    b=b(b<=10);
    evento(end+1)=b(end);
    disp(num2str(evento(end),'evento=(%i)'))
    disp('b=')
    disp(b)
    c(1:length(b))=[];
    end
  • Re: Integrale e soglie

    Ok grazie mille.
    Siccome non conosco alcuni comandi che hai usato (isempty e num2str ad esempio) potresti spiegarmi i vari passaggi per favore? inoltre non ho capito quel passaggio finale in cui poni
    c(1:length(b))=[];
    a cosa serve di preciso? Grazie.
    Volevo inoltre chiederti, se per ogni valore di energia avessi anche i loro rispettivi tempi, come faccio a stampare nell'evento, oltre che al valore di energia (per capirci quei valori: 8,6,9) anche l'istante di tempo corrispondente in cui ho superato la soglia? grazie.
  • Re: Integrale e soglie

    isempty” determina se il vettore è vuoto, con "num2str" converti i numeri in array di caratteri

    c(1:length(b))=[] rimuove i valori già utilizzati nel vettore

    con tempo :
    a = [2,3,3,4,3,2,2,2,2];
    c=a;
    clc
    evento=[];
    tempo=0;
    while ~isempty(c)
    b=cumsum(c);
    b=b(b<=10);
    evento(end+1)=b(end);
    tempo(end+1)=length(b)+tempo(end);
    disp(num2str(evento(end),'evento=(%i)'))
    disp(num2str(tempo(end),'tempo=(%i)'))
    disp('b=')
    disp(b)
    c(1:length(b))=[];
    end
Devi accedere o registrarti per scrivere nel forum
3 risposte