首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matlab到R变换

Matlab到R变换
EN

Stack Overflow用户
提问于 2020-04-09 19:09:00
回答 1查看 72关注 0票数 1

我非常接近于将这个Matlab脚本转换成R,并成功地转换了几个类似的脚本。但是,这个我就是找不到这个bug。有人能认出它吗?

测试的一种方法是运行两个脚本并查看情节是否相同。Matlab图是正确的。

请注意,我为R使用了一个Matlab插件,这样一些代码就可以保持灵活。

Matlab:

代码语言:javascript
运行
复制
% Excitatory neurons   Inhibitory neurons
Ne=800;                Ni=200;
re=rand(Ne,1);         ri=rand(Ni,1); 
a=[0.02*ones(Ne,1);    0.02+0.08*ri];
b=[0.2*ones(Ne,1);     0.25-0.05*ri];
c=[-65+15*re.^2;      -65*ones(Ni,1)];
d=[8-6*re.^2;          2*ones(Ni,1)];
S=[0.5*rand(Ne+Ni,Ne),-rand(Ne+Ni,Ni)]; 

v=-65*ones(Ne+Ni,1);  % Initial values of v
u=b.*v;               % Initial values of u
firings=[];           % spike timings

for t=1:1000          % simulation of 1000 ms 
   I=[5*randn(Ne,1);2*randn(Ni,1)]; % thalamic input 
   fired=find(v>=30); % indices of spikes
   ding = fired;
   if ~isempty(fired)

      firings=[firings; t+0*fired, fired];
      v(fired)=c(fired);  
      u(fired)=u(fired)+d(fired);

      jaja = S(:,fired);

      I=I+sum(S(:,fired),2);
   end;
   v=v+0.5*(0.04*v.^2+5*v+140-u+I);
   v=v+0.5*(0.04*v.^2+5*v+140-u+I);
   u=u+a.*(b.*v-u);   
end;
plot(firings(:,1),firings(:,2),'.');
xlabel('Time (ms)'); ylabel('Neurons');

R:

代码语言:javascript
运行
复制
require(matlab)
require(ramify)
require(ggplot2)

Ne <- 800                
Ni <- 200
re <- rand(Ne,1)
ri <- rand(Ni,1)

# Excitatory neurons    # Inhibitory neurons (i.e different column vectors)
a <- matrix(c(0.02*ones(Ne,1), 0.02+0.08*ri))
b <- matrix(c(0.2*ones(Ne,1) , 0.25-0.05*ri))
c <- matrix(c(-65+15*re^2, 65*ones(Ni,1)))
d <- matrix(c(8-6*re^2, 2*ones(Ni,1)))
S <- cbind(0.5*rand(Ne+Ni,Ne),-rand(Ne+Ni,Ni))
v <- -65*ones(Ne+Ni,1)  # Initial values of v
u <- b*v               # Initial values of u

firings <- matrix(ncol=2)           # spike timings
for (t in 1:1000) {         # simulation of 1000 ms 
  I <- matrix(c(5*randn(Ne,1), 2*randn(Ni,1))) # thalamic input 
  fired <- matlab::find(v>=30) # indices of spikes
  if (!isempty(fired))    { 
    firings <- rbind(firings,cbind(t+0*fired, fired))
    v[fired] <- c[fired]  
    u[fired] <- u[fired]+d[fired]
    I <- I + sum(S[,fired]) 
  }
  v <- v + 0.5 * (0.04*v^2+5*v+140-u+I)
  v <- v + 0.5 * (0.04*v^2+5*v+140-u+I)
  u <- u + a * (b*v-u)   
}
plot(firings[,1], firings[,2])

图表应该如下所示:

一个问题是点火变量在R中产生一个412369×2矩阵,而在Matlab中得到一个7383x2矩阵。我根本找不到这是在哪里发生的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-09 20:52:53

我检查了RMATLAB的代码,找出了两个你没有正确翻译的地方,应该是

  • c <- matrix(c(-65+15*re^2, 65*ones(Ni,1)))c <- matrix(c(-65+15*re^2, -65*ones(Ni,1)))
  • sum(S[,fired])rowSums(S[,fired,drop = FALSE])

下面是我从R得到的情节

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61128512

复制
相关文章

相似问题

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