Научное обозначение в MATLAB

Скажем, у меня есть массив, содержащий следующие элементы: 1.0e+14 * 1.3325 1.6485 2.0402 1.0485 1.2027 2.0615 1.7432 1.9709 1.4807 0.9012

Теперь, есть ли способ получить 1.0e+14 * (основу и показатель степени) по отдельности? Если я сделаю arr(10), то это вернет 9.0120e+13 вместо 0.9012e+14.

Предполагая, что вопрос заключается в том, чтобы захватить любые элементы в массиве с коэффициентом меньше единицы. Есть ли способ получить 1.0e+14, чтобы я мог просто сделать arr(i) < 1.0e+14?


person firefly    schedule 19.07.2015    source источник
comment
Ответ зависит от того, что вы хотите сделать с результатом. Например, это должна быть строка или число? Пожалуйста, отредактируйте свой вопрос, чтобы включить дополнительные сведения о контексте.   -  person Matt    schedule 19.07.2015
comment
По сути, при извлечении любого элемента из массива я хочу, чтобы они имели одинаковую базу и показатель степени. Так, например, 0.9012e+14 вместо 9.0120e+13.   -  person firefly    schedule 19.07.2015
comment
Итак, вам нужна строка в качестве вывода, верно?   -  person Luis Mendo    schedule 19.07.2015
comment
Я думаю, он хочет форсировать данную базу. @ЛуисМендо   -  person Matt    schedule 19.07.2015
comment
ОК .. может быть, я должен более четко сформулировать проблему. Скажем, я хочу сравнить значения в заданном массиве и пытаюсь найти элементы с коэффициентом меньше 1. Вот почему я хочу 0,9012e+14 вместо 9,0120e+13.   -  person firefly    schedule 19.07.2015
comment
Если вам не нужны строки, говорить 0,9012e+14 вместо 9,0120e+13 не имеет смысла. Численно 0,9012e+14 и 9,0120e+13 совпадают   -  person Luis Mendo    schedule 19.07.2015


Ответы (2)


Я предполагаю, что вам нужен строковый вывод.

Пусть a обозначает входной числовой массив. Вы можете сделать это таким образом, если не возражаете против использования evalc (вариант eval, который считается плохой практикой):

s = evalc('disp(a)');
s = regexp(s, '[\de+-\.]+', 'match');

Это создает массив ячеек с нужными строками.

Пример:

>> a = [1.2e-5 3.4e-6]
a =
   1.0e-04 *
    0.1200    0.0340
>> s = evalc('disp(a)');
>> s = regexp(s, '[\de+-\.]+', 'match')
s = 
    '1.0e-04'    '0.1200'    '0.0340'
person Luis Mendo    schedule 19.07.2015
comment
Прежде всего, большое спасибо за вашу помощь. Хотя я хотел целочисленный вывод, но я думаю, что это один из способов решить проблему. - person firefly; 19.07.2015

Вот исходный ответ от Алена.

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

этаж (журнал10 (N))

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

Например, 99987123459823754 равно 9,998E+016.

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

Теперь у вас есть показатель степени научной записи. Это должно позволить вам достичь любой цели ;-).

И в зависимости от того, что вы хотите делать с показателем степени и числом, вы также можете определить свой собственный метод. Пример описан в этой теме.

person eschanet    schedule 19.07.2015
comment
Это копия stackoverflow.com/questions/10471031/ без указания авторства! - person Matt; 19.07.2015