【问题标题】:Speeding up a double loop over integrals with changing parameter function values in matlab [duplicate]在matlab中通过改变参数函数值加速积分的双循环[重复]
【发布时间】:2025-11-24 18:00:01
【问题描述】:

我问过一个关于在循环中包含积分的问题。我收到了答案,但速度慢得令人难以忍受。我想知道是否有人可以让它更快,我想删除循环并从循环中删除函数定义。

l=3;
t=linspace(0,1,365);
fun3= @(v) integral(@(v)exp(.071*v),0,v,'ArrayValued',true);
for i=2:length(t)
  for j=i:length(t)
      xx=t(i);
      yy=t(j);
      fun  = @(x,y) exp(0.14*0.00607*fun3(yy)).*exp(-(x-y).^2/l).*exp(0.14*0.00607*fun3(xx));
      y(i,j)=integral2(fun,t(i-1),t(i),t(j-1),t(j));
  end
end

【问题讨论】:

  • 我建议您完善您之前的问题和/或询问回答问题的人以改进他的解决方案...

标签: matlab function loops performance integral


【解决方案1】:

是的,for 循环在 Matlab 中是出了名的慢。我通常使用函数arrayfun来避免使用它们。

例子:

[i,j] = meshgrid(1:length(t));
y = arrayfun(@(i,j)integral2(fun,t(i-1),t(i),t(j-1),t(j)),i,j)

【讨论】:

  • 从嵌套的for 循环切换到使用arrayfun 时,您看到了什么样的加速?