Doppio ciclo for

di il
6 risposte

Doppio ciclo for

Salve a tutti, avrei bisogno di un piccolo aiuto in Matalb. Devo implementare la seguente formula per la determinazione di un vettore, all'interno della quale vi è una sommatoria:
Ho provato ad implementarla così come di seguito, ma la sommatoria non funziona bene:
Cos'è che sbaglio?

Grazie a tutti in anticipo

6 Risposte

  • Re: Doppio ciclo for

    Perchè dici che "la sommatoria non funziona bene"?
    Qual è il problema?
    Quale risultato ottieni e quale ti aspetti?
    Il codice mi sembra corretto, l'unica cosa "particolare" è che alla prima iterazione del ciclo esterno, il ciclo interno non viene eseguito visto che se i=1, (i-1) è uguale a 0 per cui il range del ciclo risulta "da 1 a 0", ma questo è implicito nella definizione della sommatoria (j, da 1 a i-1).
  • Re: Doppio ciclo for

    Perchè facendo una prova con il vettore epsilon fatto di elementi tutti pari a 1, fino ad n=2 ottengo il risultato che mi aspetto, superato n=2 ottengo valori errati.

    Ad esempio mi aspetto che ad ogni iterazione il valore di g si incrementi di 1 partendo da 0:

    i=1,2,3,4,... --> g=0,1,2,3,..

    Invece quello che èttengo è:

    i=1,2,3,4,... --> g=0,1,3,6,..
  • Re: Doppio ciclo for

    Definendo "epsilon" come un vettore di vettore di 5 elementi uguali a 1
    
    n=5
    epsilon=ones(n,1)
    
    il loop interno genera correttamente valori di "g" che si incrementano di una unità ad ogni iterazione; l'incremento al quale fai riferimento è quello che si ottiene considerando il valore di "g" all'uscita del loop interno in quanto somma dei valori del vettore epsilon
    
    n=5;
    epsilon=ones(n,1);
    u_w=zeros(n,1);
    
    epsilon_0=0;
    g=0;
    k=1;
    
    for i=1:n
        for j=1:(i-1)
           g=g+epsilon(j);
           fprintf('Inner loop: i= %d g= %d\n',i,g)
        end
       fprintf('Outer loop: i= %d g= %d\n\n',i,g)
        %u_w=(i)=k*(epsilon_0+2*g+epsilon(i))
    end
    
    
    Outer loop: i= 1 g= 0
    
    Inner loop: i= 2 g= 1
    Outer loop: i= 2 g= 1
    
    Inner loop: i= 3 g= 2
    Inner loop: i= 3 g= 3
    Outer loop: i= 3 g= 3
    
    Inner loop: i= 4 g= 4
    Inner loop: i= 4 g= 5
    Inner loop: i= 4 g= 6
    Outer loop: i= 4 g= 6
    
    Inner loop: i= 5 g= 7
    Inner loop: i= 5 g= 8
    Inner loop: i= 5 g= 9
    Inner loop: i= 5 g= 10
    Outer loop: i= 5 g= 10
    
  • Re: Doppio ciclo for

    Grazie mille per la spiegazione dettagliata. E quindi cosa dovrei modificare per risolvere questo problema?
  • Re: Doppio ciclo for

    Se, come sembra dall'equazione, il valore di u_w(i) non dipende dai valori precedenti (u_W i-1) ecc.) divresti resetare a 0 il valore di g prima del loop interno.
    
    n=5;
    epsilon=ones(n,1);
    u_w=zeros(n,1);
    
    epsilon_0=0;
    g=0;
    k=1;
    
    for i=1:n
        g=0;
        for j=1:(i-1)
           g=g+epsilon(j);
           fprintf('Inner loop: i= %d g= %d\n',i,g);
        end
       fprintf('\nOuter loop: i= %d g= %d\n\n\n',i,g)
        %u_w=(i)=k*(epsilon_0+2*g+epsilon(i))
    end
    
    In questo modo ottieni i valori valori di g attesi (i=1,2,3,4,... --> g=0,1,2,3,..):
    
    Outer loop: i= 1 g= 0
    
    
    Inner loop: i= 2 g= 1
    
    Outer loop: i= 2 g= 1
    
    
    Inner loop: i= 3 g= 1
    Inner loop: i= 3 g= 2
    
    Outer loop: i= 3 g= 2
    
    
    Inner loop: i= 4 g= 1
    Inner loop: i= 4 g= 2
    Inner loop: i= 4 g= 3
    
    Outer loop: i= 4 g= 3
    
    
    Inner loop: i= 5 g= 1
    Inner loop: i= 5 g= 2
    Inner loop: i= 5 g= 3
    Inner loop: i= 5 g= 4
    
    Outer loop: i= 5 g= 4
    
  • Re: Doppio ciclo for

    Grazie mille
Devi accedere o registrarti per scrivere nel forum
6 risposte