1

ループ内で積分を行うことについて、以前に質問しました。返事は来ましたが、遅すぎます。ループを削除し、ループから関数定義を削除することを想像します。

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
4

1 に答える 1

1

はい、forMatlab ではループが非常に遅いことで知られています。私は通常、それらの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)
于 2013-08-25T23:23:11.553 に答える