将R代码转换为MATLAB代码:卡在sapply()上

将R代码转换为MATLAB代码:卡在sapply()上,r,matlab,debugging,R,Matlab,Debugging,我有下面的R代码,我正在尝试将其转换为MATLAB。(不,我不想在MATLAB中运行如图所示的R代码) R代码如下: # model parameters dt <- 0.001 t <- seq(dt,0.3,dt) n=700*1000 D = 1 d = 0.5 # model ft <- n*d/sqrt(2*D*t^3)*dnorm(d/sqrt(2*D*t),0,1) fmids <- n*d/sqrt(2*D*(t+dt/2)^3)*dnorm(d/sqr

我有下面的R代码,我正在尝试将其转换为MATLAB。(不,我不想在MATLAB中运行如图所示的R代码)

R代码如下:

# model parameters
dt <- 0.001
t <- seq(dt,0.3,dt)
n=700*1000
D = 1
d = 0.5

# model
ft <- n*d/sqrt(2*D*t^3)*dnorm(d/sqrt(2*D*t),0,1)
fmids <- n*d/sqrt(2*D*(t+dt/2)^3)*dnorm(d/sqrt(2*D*(t+dt/2)),0,1)
plot(t,ft*dt,type="l",lwd=1.5,lty=2)

# simulation
#    
# simulation by drawing from uniform distribution
# and converting to time by using quantile function of normal distribution
ps <- runif(n,0,1)                
ts <- 2*pnorm(-d/sqrt(2*D*t))     
sumn <- sapply(ts, FUN = function(tb) sum(ps < tb))
lines(t[-length(sumn)],sumn[-1]-sumn[-length(sumn)],col=4)
所以,这就是我被困的地方。我不明白sumn=sapply(ts,FUN=function(tb)sum(ps是什么函数,参数“
tb
”来自哪里。它也没有在给定的R代码中定义

有谁能告诉我,在MATLAB中,函数R代码的等价物是什么

[编辑1:更新]


因此,根据@Croote的评论,我为
sapply()

然而,我没有得到预期的结果。曲线应该相互重叠:蓝色曲线是正确的,因此橙色需要与蓝色曲线重叠

我错过了什么?R的
pnorm()
是否等同于我在这里所做的MATLAB的
normcdf()

[编辑2:找到错误!]

所以,在闲逛之后,我发现我所要做的就是获得
tb
的出现次数。行
summat=sumidx.*repmat(ps,300,1)
不应该在那里。删除该行并保持
sumn=sum(sumidx,2),我得到了想要的结果


因此,根据@Croote的评论,经过反复研究,我为
sapply()中定义的函数提供了以下代码

对于情节,我把它编码为

sumnfin = sumn(2:end)-sumn(1:end-1);
plot(t(1:length(sumn)-1),sumnfin)
最后,我得到了期望的结果


sapply
将定义为
function(tb){sum(ps
的函数应用于列表或向量
ts
,并返回列表。它就像一个forloop,将一个函数应用于列表中的每个元素。因此,
tb
仅作为变量占位符存在于所应用的函数中。函数取
tb
的一个值,识别
ps
中小于该特定
tb
值的值,并将其相加。然后对剩余的
tb
值重复相同的步骤?或者首先,它搜索所有
tb
值,并在循环结束时求和?
sumidx  = bsxfun(@lt,ps,ts');
summat  = sumidx.*repmat(ps,300,1);
sumn    = sum(summat,2);
sumnfin = sumn(2:end)-sumn(1:end-1);
plot(t(1:length(sumn)-1),sumnfin)
sumidx  = bsxfun(@lt,ps,ts');
sumn    = sum(sumidx,2);
sumnfin = sumn(2:end)-sumn(1:end-1);
plot(t(1:length(sumn)-1),sumnfin)