Matlab: Интегральная функция & quadl дает NaN - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь получить оптимизированные значения с помощью функции fmincon. В процедуре оптимизации функция «IntegProb» интегрируется с методом quadl (или, как вариант, с интегралом).

, но функция интегрирования quadl с IntegProb возвращает NaN с предупреждением: «Обнаружено бесконечное значение или значение функции Not-a-Number». при некоторых значениях a, b, Vmat и Vj. но я не знаю точно, что их значения заставляют функцию quadl возвращать NaN, потому что эти значения определяются в процессе оптимизации fmincon.

Кто-нибудь имеет какие-либо идеи о том, как решить эту проблему?

Буду признателен за любую помощь,

Спасибо.

quadl(@(e) integProb(e,j,k,Vmat,Vj),a,b,eps1); 
function [val]=integProb(e,j,k,Vmat,Vj);
len = length(e);
x=repmat(e+Vj,k,1)-Vmat(:,1:len);
x2 = normcdf(x); % need the sigma of j (the chosen product)
x2(j,:)=1; % we do not need this. See the integrand in our integration eqn
val = prod(x2).* normpdf(e);

1 Ответ

0 голосов
/ 30 июня 2019

Внутри функции затрат вам нужно защитить от плохих значений и вернуть высокую стоимость (сообщая оптимизатору, что они являются плохими значениями), если они возникают,

function [val]=integProb(e,j,k,Vmat,Vj);
len = length(e);
x=repmat(e+Vj,k,1)-Vmat(:,1:len);
x2 = normcdf(x); % need the sigma of j (the chosen product)
x2(j,:)=1; % we do not need this. See the integrand in our integration eqn
val = prod(x2).* normpdf(e);

if isnan(val) || isinf(val) || ~isreal(val)
   val = 1e10; % or some other large value
end
...