我发现了下面的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)他们为什么用累积和代替和
4)给定的强度函数是\lambda (t) = 100 - 10*(t-7) with 7 \leq t \leq 12,t = 7 + nonhomopp('100-10*',5)是如何表示这一点的?
对不起,如果这么多,谢谢!
发布于 2016-02-13 18:51:14
x:x只是输出变量。在Matlab中,函数声明为function [output variable(s)] = <function name>(input variables)。如果函数只有一个输出,则可以省略方括号(与您的情况一样)。相反,输入参数周围的括号是强制性的,不管输入参数有多少。使用end结束函数体也是很好的做法,就像您使用循环和if/else一样。eval使用字符串作为输入,方括号将字符串'intens'与字符串'x'连接起来。x是用引号表示的,因为即使引用变量,eval也可以使用字符串格式的输入。cumsum和sum的行为不同。sum返回一个标量,它是数组所有元素的和,而cumsum则返回另一个包含累积和的数组。如果我们的数组是[1:5],则sum([1:5])将返回15,因为它是1+2+3+4+5,而cumsum([1:5])将返回[1 3 6 10 15],其中输出数组的每个元素都是输入数组中前一个元素(包括本身)的总和。t = 7 + nonhomopp('100-10*',5)返回的只是时间t的值,而不是lambda的值,实际上,通过查看t,最小值为7,最大值为12。泊松分布本身通过直方图返回。发布于 2016-02-13 18:49:46
回答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)https://stackoverflow.com/questions/35383625
复制相似问题