Dubbio sulla scrittura di un comando

di il
2 risposte

Dubbio sulla scrittura di un comando

Ed inoltre è corretto scrivere la seguente espressione in matlab di b=3*(a>0) nel seguente modo ?
if (a>=0), b=0 ; else b=3 ; end
in quanto non so se sia effettivamente corretto il discorso del ">=" oppure se devo mettere solo ">".

2 Risposte

  • Re: Dubbio sulla scrittura di un comando

    In questi casi, la cosa più semplice da fare è ... provare e ... vedere cosa succede.

    Ad ogni modo, in realtà puoi scrivere in MatLab l'espressione così come è:
    
    b=3*(a>0)
    
    MatLab valuta l'espressione "a>0" e ritorna il valore ti tipo "logical" 1 se la condizione è verificata, 0 in caso contrario.
    Successivamente il valore "logical" viene convertito implicitamente in "double" per poter effettuare la moltiplicazione

    Di conseguenza, "b" assumerà il valore "3" (double) quando è verificata la condizione "a > 0" perchè sarà il risultato di "3 * 1" ed assumerà il valore "0" quando la condizione "a > 0" non sarà verificata (quando quindi sarà "a <= 0", in quanto sarà il risultato della moltiplicazione "3 * 0".

    Tieni presente che, in generale, se, in casi come questi la variabile "a" non è un intero, è sconsigliato testarne il valore rispetto allo "0" in quanto, per effetto della rappresentazione "floating point" dei numeri reali, non è garantito che in espressioni come quelle che seguono
    
    a = 0.3
    b = 0.1*3
    a == b
    
    la condizione "a == b" risulti vera.

    In questi casi è sempre meglio confrontare i valori di tipo "real" con delle "soglie":
    
    k=1e-06
    a = 0.3
    b = 0.1*3
    abs(a - b) < k
    
    dove "k" rappresenta un valore, da te definito (in questo caso, ad esempio "1e-06") sufficientemente "piccolo", rispetto ai calcoli che deve eseguire il tuo programma, affinchè i valori di "a" e "b" siano considerabili "uguali" (... a meno del valore della soglia, appunto, valore che, ai fini del calcolo è trascurabile).

    Se invece vuoi impostare l'espressione con un blocco "if - else", per come lo hai scritto, devi invertire il segno della disuguaglianza
    
    if(a<=0)
       b=0;
    else
       b=3
    end 
    
    In alternativa, puoi scrivere:
    
    if(a>0)
       b=3;
    else
       b=0
    end
    
  • Re: Dubbio sulla scrittura di un comando

    Ok, grazie perfetto !!
Devi accedere o registrarti per scrivere nel forum
2 risposte