Как получить экспоненту научной записи в Matlab

Когда числа действительно маленькие, 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?

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

Спасибо за помощь.


person Rachel    schedule 06.05.2012    source источник


Ответы (2)


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

floor(log10(N))

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

Например, 99987123459823754 это 9.998E+016

log10(99987123459823754) - это 16.9999441, нижний предел которого равен 16, что может в основном сказать вам, что "показатель степени в экспоненциальном представлении равен 16, что очень близко к 17".

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

0.000000000003754 = 3.754E-012
log10(0.000000000003754) = -11.425
floor(log10(0.000000000003754)) = -12
person Alain    schedule 06.05.2012

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

min(floor(log10(A)))

но если они тоже могут быть большими, вам нужно что-то вроде:

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. Вам придется немного поиграть с ним, чтобы точно определить, какие правила для печати матриц. находятся.

person Richante    schedule 06.05.2012