2016-11-08 5 views
0

У меня есть вектор, скажем [1,2,710]. Когда я беру exp ([1,2,710]), я получаю ans = [2.7183,7.2891, Inf]. Поскольку окончательный ответ - очень большое число, я хочу сначала его обнаружить и сбросить его до очень большого значения, скажем, 1e + 305. Я использую isinf, чтобы помочь мне, но isinf (ans) дает все 0. Что мне делать, чтобы решить проблему? Обратите внимание, что входной вектор может измениться.Как определить некоторые элементы в векторе?

+2

Какая версия вы используете? Для меня на R2015a, R2013a и R2009, 'isinf (exp ([1,2,710]))' возвращает '[0 0 1]'. И функция ['isfinite'] (https://mathworks.com/help/matlab/ref/isfinite.html) работает одинаково в обратном порядке:' isfinite (exp ([1,2,710])) '=>' [ 1 1 0] '. Я предполагаю, что 'ans' не держит то, что вы думаете (вы, вероятно, уже перезаписали его). Не используйте 'ans'. Назовите свои переменные адекватно и выполните свои операции над ними. – Hoki

+0

Я использую версию R2014a. Позвольте мне снова проверить. Спасибо за вашу помощь! –

+0

Btw, какое наибольшее число может отображаться в Matlab, который не дает Inf? Как получить такой номер в Matlab? –

ответ

0

Попробуйте это:

maximum_num = 99999; 

vec = [1,2,710]; 
expVec = exp(vec); 

expVec(expVec > maximum_num) = maximum_num; 

maximum_num сохраняет наибольшее значение, которое позволит в вашем векторе. поэтому, если вы работаете с двойным, вы можете просто использовать maximum_num= realmax вместо первой строки кода.

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