Вопрос по matlab, matrix – Как получить экспонент научной нотации в Matlab

5

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

Пример:

<code>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
</code>

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

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

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

Ваш Ответ

2   ответа
3

Ты можешь использоватьlog10(A), Показатель степени, используемый для распечатки, будет наибольшим показателем величины в А. Если вы заботитесь только о небольших числах (& lt; 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. Вам придется немного поэкспериментировать с ним, чтобы точно определить, каковы правила для печати матриц.

13

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

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

Похожие вопросы