2012-05-06 12 views
5

Wenn die Zahlen wirklich klein sind, zeigt Matlab sie automatisch in der wissenschaftlichen Notation an.So erhalten Sie Exponent der wissenschaftlichen Notation in Matlab

Beispiel:

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 

Gibt es eine in-integrierte Funktion, die den Exponenten zurückgibt? Etwas wie: getExponent(A) = -16?

Ich weiß, das ist eine Art dumme Frage, aber ich muss Hunderte von Matrizen überprüfen und ich kann nicht scheinen, es herauszufinden.

Vielen Dank für Ihre Hilfe.

Antwort

12

Grundlegende mathematische können Ihnen sagen, dass:

floor(log10(N)) 

Die Log-Basis 10 eine Zahl sagen Sie, etwa wie viele Stellen vor dem Komma in dieser Zahl sind.

Zum Beispiel 99987123459823754 ist 9.998E+016

log10(99987123459823754) ist 16.9999441, dessen Boden ist 16 - was im Grunde kann Ihnen sagen, "der Exponent in wissenschaftlicher Notation 16, ganz in der Nähe 17 zu sein".

Boden rundet immer nach unten, so dass Sie nicht über kleine Exponenten kümmern müssen:

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

Sie können log10(A) verwenden. Der Exponent verwendet auszudrucken wird die größte Größe Exponenten in A. sein, wenn Sie nur über eine geringe Anzahl (< 1) care, you

min(floor(log10(A))) 

verwenden können, aber wenn es möglich ist, für sie zu groß sein, Sie möchte etwas wie:

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

Dies findet den maximalen absoluten Exponenten und gibt das zurück. Also, wenn A = [1e-6 1e20], wird es 20 zurückgeben.

Ich bin eigentlich nicht sicher, ganz wie Matlab entscheidet, welchen Exponenten beim Ausdrucken zu verwenden. Offensichtlich, wenn A nahe bei 1 ist (zB A = [100, 203]), dann wird es keinen Exponenten verwenden, aber diese Lösung wird 2 zurückgeben. Sie müssten etwas damit herumspielen, um genau herauszufinden, welche Regeln für das Drucken von Matrizen gelten sind.