首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解非齐次泊松过程Matlab程序

理解非齐次泊松过程Matlab程序
EN

Stack Overflow用户
提问于 2016-02-13 18:22:59
回答 2查看 1.9K关注 0票数 2

我发现了下面的Matlab程序来模拟一个非齐次泊松过程。

代码语言:javascript
复制
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有何影响?

代码语言:javascript
复制
eval([intens 'x'])

为什么x在单引号中?

( 3)他们为什么用累积和代替和

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-13 18:51:14

  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。泊松分布本身通过直方图返回。
票数 2
EN

Stack Overflow用户

发布于 2016-02-13 18:49:46

回答2)。这是一段不必要的复杂代码。要理解它,只计算方括号和它的内容。它将生成字符串100-10*x,然后计算该字符串。下面是一个没有eval的版本,而是使用一个匿名函数。这是应该如何实施的。

代码语言:javascript
复制
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)

可以这样叫它

代码语言:javascript
复制
t = 7 + honhomopp(@(x)(100-10*x),5)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35383625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档