[MatLab] somma cicli for

di il
1 risposte

[MatLab] somma cicli for

Ciao!

ho un problema da qui non riesco a venire fuori.
Ho due cicli for, questi cicli mi danno tutti e 9 risultati. Ora ho bisogno di sottrare dal ciclo for 1, il ciclo for 2, in modo da ottenere l'errore.
Il problema è che sottrando mi da 1 solo risultato, e non 9 come vorrei.
qualcuno sa perche??
     
for k=1:1:9;
    n=2.^k;
    h = (b-a)/n;
    sum_even = 0;
    for i = 1:n/2-1
        x(i) = a + 2*i*h;
        sum_even = sum_even + f(x(i));
    end
    sum_odd = 0;
    for i = 1:n/2
        x(i) = a + (2*i-1)*h;
        sum_odd = sum_odd + f(x(i));
    end
    integral = h*(f(a)+ 2*sum_even + 4*sum_odd +f(b))/3;
end


for k=1:1:9;
    n=2*((2.^k)-1)+1;
    h = (b-a)/n;
    sum_even = 0;
    for i = 1:n/2-1
        x(i) = a + 2*i*h;
        sum_even = sum_even + f(x(i));
    end
    sum_odd = 0;
    for i = 1:n/2
        x(i) = a + (2*i-1)*h;
        sum_odd = sum_odd + f(x(i));
    end
    integral2 = h*(f(a)+ 2*sum_even + 4*sum_odd +f(b))/3;
end
P=integral2-integral
a me interesserebe avere 9 valori di P!
Grazie mille a tutti!

1 Risposte

  • Re: [MatLab] somma cicli for

    La spiegazione è semplice: ammesso che le variabili di interesse siano "integral" e "integral2", le stesse vengono definite e calcolate (nei due cicli "for") come "variabili semplici" e non come vettori.
    I nove valori vengono effettivamente calcolati (e mostrati nella Command Window rimuovendo il ";" o "visti" in fase di debug), ma questo fa sì che, ad ogni iterazione, il valore precedente venga sovrascritto da quello dell'iterazione corrente: .

    Per risolvere il problema, è sufficiente modificare l'istruzione:

    integral = h*(f(a)+ 2*sum_even + 4*sum_odd +f(b))/3;

    con l'istruzione:

    integral(k) = h*(f(a)+ 2*sum_even + 4*sum_odd +f(b))/3;

    nel primo ciclo "for", e l'istruzione:

    integral2 = h*(f(a)+ 2*sum_even + 4*sum_odd +f(b))/3;

    con l'istruzione:

    integral2(k) = h*(f(a)+ 2*sum_even + 4*sum_odd +f(b))/3;

    nel secondo ciclo "for".

    Ciò fatto, l'istruzione:

    P=integral2-integral

    (che non necessita di modifiche, restituirà la differenza tra i nove valori.

    Hope this helps.
Devi accedere o registrarti per scrivere nel forum
1 risposte