У меня есть некоторые числа a_i (для i = 1 до 10000). Мне нужно вычислить exp (a_i)/sum (exp (a_j)) с помощью matlab.Операции с большими номерами
Конечно, невозможно сразу вычислить. Я нашел несколько трюков, наиболее интересные being:.
«Предположим, что мы хотим, чтобы найти ехр (7.0873e002) Это будет большое количество действительно, но все еще только едва в способности от Matlab прямого вычисления Однако, мы можем. найти отдельный показатель и мантисса без вызова на «ехр» следующим образом:
a = 7.0873e2;
x = a/log(10);
D = floor(x); % D will be an integer
F = 10^(x-D); % F will lie in 1 <= F < 10
Then D will be the power of ten and F the mantissa
F = 6.27376373225551 % The mantissa
D = 307 % The exponent (power of ten)
Compare that with the direct answer:
exp(a) = 6.273763732256170e+307"
Я пытался что-то подобное, но результат в мае случае Inf:
a = 7.0873e5;
x = a/log(10);
D = floor(x);
F = 10^(x-D);
exp(a) = Inf
У кого-нибудь есть идея?
Вы можете быть заинтересованы в [это] (http://www.mathworks.com/matlabcentral/fileexchange/22725-переменная прецизионная целое число арифметика) –