Рассчитайте время, чтобы функция опустилась ниже числа - PullRequest
0 голосов
/ 30 апреля 2018

Я довольно новичок в MatLab, и недавно я изучил броуновское движение и применил его к стохастической динамике населения. Я пытаюсь вычислить среднее время, необходимое для того, чтобы значения упали ниже порогового значения. В частности, чтобы достичь 1 или ниже, потому что в этот момент население наверняка исчезнет.

Код, который мне нужен для генерации этих данных, выводит график с траекториями функций во времени с заданным количеством временных шагов и итераций. Есть ли какой-нибудь способ подсчитать время для достижения этого числа для каждой из моих траекторий, чтобы я потом взял среднее?

Любые идеи с благодарностью. Я могу предоставить свои коды, если это уместно. Заранее спасибо!

Мой код выглядит следующим образом:

function [x] = myBrownianMotion3(N, nPaths)
% N         = number of steps
% nPaths    = number of paths

 x = zeros(nPaths,N);

 dt = 0.1;
 sdt = sqrt(dt);

 x(:,1) = 10*ones(nPaths,1); %initial population sizes are 10
 t(1) = 0;

    for n = 1:N

         a = randn(nPaths,1)*sdt;
        % a = sign(randn(nPaths,1))*sdt; %sign of a normally
        %                distributed random number
        %                returns -1, 0, or 1

        mu = 0;
        sig = 0.2*x(:,n);
        x(:,n+1) = x(:,n) + mu*dt + sig.*a; %adds new value to current location
        t(n+1) = t(n) + dt; %time dep on steps
    end
plot(t,x)
xlabel('Time'), ylabel('Population size'), title('Stochastic Population Model')

end

=======

Теперь я знаю, что это захватывает конечные точки:

A = myBrownianMotion3(n, nPaths);
A(:,end);
B = A(:,end);

Но я не вижу, как рассчитать фактическое время, чтобы упасть ниже 1. Надеюсь, это понятно.

1 Ответ

0 голосов
/ 01 мая 2018

Это довольно легко. Учитывая A вывод вашего myBrownianMotion3 и K пороговое число, вот как действовать:

t_fall = A < K;
t_fall = sum(cumprod(~t_fall,2),2) + 1;
t_fall(t_fall == size(A,2) + 1,:) = NaN;

Давайте сделаем конкретный пример:

A = myBrownianMotion3(200,25); % 200 Steps % 25 Paths
K = 1; % Threshold 1

t_fall = A < K;
t_fall = sum(cumprod(~t_fall,2),2) + 1;
t_fall(t_fall == size(A,2) + 1,:) = NaN;

Одним из возможных результатов может быть, например:

t_fall = [
   NaN;
   NaN;
   167;
   NaN;
   NaN;
   NaN;
   NaN;
   NaN;
   NaN;
   NaN;
   NaN;
   NaN;
   111;
   NaN;
   NaN;
   NaN;
   NaN;
   NaN;
   NaN;
   NaN;
   NaN;
   NaN;
   NaN;
   NaN;
   98
];

, что означает, что только 3 пути падают ниже указанного порога K=1: 3rd один в t=167, 13th один в t=111 и last один в t=98.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...