2012-05-06 15 views
5

Quando i numeri sono veramente piccoli, Matlab li mostra automaticamente formattati in Notazione scientifica.Come ottenere l'esponenziale della notazione scientifica in Matlab

Esempio:

A = rand(3)/10000000000000000; 

A = 

    1.0e-016 * 

    0.6340 0.1077 0.6477 
    0.3012 0.7984 0.0551 
    0.5830 0.8751 0.9386 

C'è qualche funzione in-built che restituisce l'esponente? Qualcosa come: getExponent(A) = -16?

So che questa è una specie di domanda stupida, ma ho bisogno di controllare centinaia di matrici e non riesco a capirlo.

Grazie per il vostro aiuto.

risposta

12

Matematica di base può dire che:

floor(log10(N)) 

il logaritmo in base 10 di un numero indica approssimativamente il numero di cifre decimali prima sono in quel numero.

Per esempio, 99987123459823754 è 9.998E+016

log10(99987123459823754) è 16.9999441, il pavimento che è 16 - che può sostanzialmente dire "l'esponente in notazione scientifica è di 16, molto vicino ad essere 17".

Piano arrotonda sempre verso il basso, in modo da non è necessario preoccuparsi di piccoli esponenti:

0.000000000003754 = 3.754E-012 
log10(0.000000000003754) = -11.425 
floor(log10(0.000000000003754)) = -12 
3

È possibile utilizzare log10(A). L'esponente utilizzato per stampare sarà il più grande esponente di grandezza in A. Se vi interessa soltanto un piccolo numero (< 1), è possibile utilizzare

min(floor(log10(A))) 

ma se è possibile per loro di essere troppo grande, è 'desidera qualcosa come:

a = log10(A); 
[v i] = max(ceil(abs(a))); 
exponent = v * sign(a(i)); 

questo trova l'esponente assoluto massimo e restituisce quello. Quindi, se A = [1e-6 1e20], restituirà 20.

In realtà non sono sicuro di come Matlab decida quale esponente usare quando si stampa. Ovviamente, se A è vicino a 1 (es. A = [100, 203]), allora non utilizzerà affatto un esponente, ma questa soluzione tornerà 2. Dovresti giocarci un po 'per capire esattamente quali sono le regole per stampare le matrici siamo.

Problemi correlati