2017-02-18 12 views
2

Я совершенно не знаком с Matlab. Я пытаюсь имитировать комбинированный процесс Wiener и Poisson.Ошибка моделирования Matlab

Почему у меня возникает несоответствие размеров подзаголовка подзаголовка?

Я пытаюсь моделировать

Z(t)=lambda*W^2(t)-N(t) 

Где W это процесс Винера и N является пуассоновским процессом.

код я использую ниже:

T=500 
dt=1 
K=T/dt 
W(1)=0 
lambda=3 
t=0:dt:T 
for k=1:K 
r=randn 
W(k+1)=W(k)+sqrt(dt)*r 
N=poissrnd(lambda*dt,1,k) 
Z(k)=lambda*W.^2-N 
end 
plot(t,Z) 
+0

'W' является вектором, следовательно, 'W.^2' является вектором, поэтому' lambda * W.^2-N' является вектором. Но вы пытаетесь поместить его в одно место из 'Z', то есть' Z (k) '. –

+0

Спасибо, Фил. Не заметил, что когда я это написал! Cheers :) – yang

ответ

0

Это правда, что некоторые индексации не хватает, но я подумайте, что вам удастся переписать ваш код более «способом Matlab». Следующий код использует тот факт, что базовые переменные Matlab являются матрицами и вычисляют результаты в векторном виде. Постарайтесь понять этот вид письма, так как это способ более эффективно использовать Matlab, наряду с написанием короче и читаемый код:

T = 500; 
dt = 1; 
K = T/dt; 
lambda = 3; 
t = 1:dt:T; 
sqdtr = sqrt(dt)*randn(K-1,1); % define sqrt(dt)*r as a vector 
N = poissrnd(lambda*dt,K,1); % define N as a vector 
W = cumsum([0; sqdtr],1); % cumulative sum instead of the loop 
Z = lambda*W.^2-N; % summing the processes element-wiesly 
plot(t,Z) 

Пример для результата:

wiener

+0

Цените это! Я должен изучить этот тип кодирования Matlab! Благодаря :) – yang

0

вы забыли индекс

Z(k)=lambda*W.^2-N 

должно быть

Z(k)=lambda*W(k).^2-N(k) 
+0

спасибо за это, я буду помнить об этом! – yang