理解非齐次Poisson过程Matlab代码

时间:2016-02-13 18:23:00

标签: matlab poisson

我找到了以下Matlab代码来模拟非齐次泊松过程

function x = nonhomopp(intens,T)
% example of generating a 
% nonhomogeneousl poisson process on [0,T] with intensity function intens

x = 0:.1:T;
m = eval([intens 'x']);
m2 = max(m); % generate homogeneouos poisson process
u = rand(1,ceil(1.5*T*m2));
y = cumsum(-(1/m2)*log(u)); %points of homogeneous pp
y = y(y<T); n=length(y); % select those points less than T
m = eval([intens 'y']); % evaluates intensity function
y = y(rand(1,n)<m/m2); % filter out some points
hist(y,10)

% then run
% t = 7 + nonhomopp('100-10*',5)

我是Matlab的新手,无法理解其工作原理。我已经阅读了所有这些函数的Mathworks页面,并且在四个地方感到困惑:

1)为什么函数定义为 x ,然后间隔也称为 x ?这是滥用记谱法吗?

2)方括号如何影响eval,

eval([intens 'x'])

为什么x是单引号?

3)为什么他们使用 cumsum 而不是 sum

4)给定的强度函数是\lambda (t) = 100 - 10*(t-7) with 7 \leq t \leq 12 t = 7 + nonhomopp('100-10*',5)如何表示这个?

对不起,如果有这么多,谢谢!

2 个答案:

答案 0 :(得分:2)

回答2)。这是一段不必要的复杂代码。要理解它,只评估方括号及其内容。它会生成字符串100-10*x,然后对其进行评估。这是一个没有eval的版本,而是使用匿名函数。这就应该如何实施。

function x = nonhomopp(intens,T)
% example of generating a 
% nonhomogeneousl poisson process on [0,T] with intensity function intens

x = 0:.1:T;
m = intens(x);
m2 = max(m); % generate homogeneouos poisson process
u = rand(1,ceil(1.5*T*m2));
y = cumsum(-(1/m2)*log(u)); %points of homogeneous pp
y = y(y<T); n=length(y); % select those points less than T
m = intens(y); % evaluates intensity function
y = y(rand(1,n)<m/m2); % filter out some points
hist(y,10)

可以像这样调用

t = 7 + honhomopp(@(x)(100-10*x),5)

答案 1 :(得分:2)

  1. 该函数未定义为xx只是输出变量。在Matlab中,函数声明为function [output variable(s)] = <function name>(input variables)。如果函数只有一个输出,则可以省略方括号(如您的情况)。无论输入参数有多少,输入参数周围的括号都是强制性的。使用end结束函数体也是一种好习惯,就像使用循环和if / else一样。
  2. eval使用字符串作为输入,方括号显然是将字符串'intens'与字符串'x'连接起来。 x在引号中,因为eval再次使用字符串格式的输入,即使它引用了变量。
  3. cumsumsum采取不同的行动。 sum返回一个标量,它是数组中所有元素的总和,而cumsum返回另一个包含累积和的数组。如果我们的数组为[1:5],则sum([1:5])将返回15,因为它是1 + 2 + 3 + 4 + 5。相反,cumsum([1:5])将返回[1 3 6 10 15],其中输出数组的每个元素都是输入数组中前面元素(包括它们)的总和。
  4. 命令t = 7 + nonhomopp('100-10*',5)返回的只是时间t的值,而不是lambda的值,实际上通过查看t最小值为7,最大值为12泊松分布本身通过直方图返回。