gpt4 book ai didi

matlab - 了解非齐次泊松过程 Matlab 代码

转载 作者:行者123 更新时间:2023-12-02 21:07:23 29 4
gpt4 key购买 nike

我找到了以下 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) 且 7\leq t\leq 12 t = 7 + nonhomopp 是如何计算的('100-10*',5) 代表这个?

抱歉,就这么多,谢谢!

最佳答案

回答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)

关于matlab - 了解非齐次泊松过程 Matlab 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35383625/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com