2012-05-06 2 views
5

Когда числа действительно малы, Matlab автоматически отображает их в формате Scientific Notation.Как получить экспоненту научной нотации в Matlab

Пример:

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 

Есть некоторые встроенные функции, которая возвращает экспоненту? Что-то вроде: getExponent(A) = -16?

Я знаю, что это своего рода глупый вопрос, но мне нужно проверить сотни матриц, и я не могу понять это.

Благодарим за помощь.

ответ

12

Базовая математика может сказать вам, что:

floor(log10(N)) 

Бревно база 10 ряда говорит вам приблизительно, сколько цифр до запятой в том числе.

Например, 99987123459823754 является 9.998E+016

log10(99987123459823754)16.9999441 является, пол которого 16 - который в принципе может сказать вам «показатель в научной нотации 16, очень близко к 17».

пол всегда округляется вниз, так что вам не нужно беспокоиться о маленьком экспоненте:

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

Вы можете использовать log10(A). Показатель используется для распечатки будет наибольшей величиной показателя в A. Если вы заботитесь только о небольшом количестве (< 1), вы можете использовать

min(floor(log10(A))) 

, но если это возможно для них, чтобы быть большим, что и вы 'd хотите что-то вроде:

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

это находит максимальную абсолютную экспоненту и возвращает это. Так что если A = [1e-6 1e20], он вернется 20.

Я действительно не совсем уверен, как Matlab решает, какой показатель использовать при печати. Очевидно, что если A близко к 1 (например, A = [100, 203]), то он не будет использовать экспонента вообще, но это решение вернется 2. Вам придется немного поиграть с ним, чтобы точно определить, какие правила для печати матриц находятся.

Смежные вопросы