我有一个名为fun
的函数,我需要运行以下代码:
polarfun = @(r,theta) fun(r.*cos(theta),r.*sin(theta)).*r;
p = @(theta) integral(@(r)polarfun(r,theta),0,Inf);
在此之后,我需要构建一个由函数p
我这样做(先前已定义n
):
v = 0:2*pi/n:2*pi;
for i=1:n+1
samplesofp(i) = p(v(i));
end
我想知道是否有更好的方法,因为我需要它尽可能快地运行。
答案 0 :(得分:1)
你可以使用arrayfun
,如评论中所示:
samplesofp = arrayfun(p,v);
或为数组输入设置integral
:
p = @(theta) integral(@(r)polarfun(r,theta),0,Inf,'ArrayValued',true);
samplesofp = p(v);
第二种选择可能更快:
fun = @(x,y) x+y;
polarfun = @(r,theta) fun(r.*cos(theta),r.*sin(theta)).*r;
p = @(theta) integral(@(r)polarfun(r,theta),0,Inf);
pa = @(theta) integral(@(r)polarfun(r,theta),0,Inf,'ArrayValued',true);
n = 5;
v = (0:2*pi/n:2*pi).';
t = timeit(@() arrayfun(p,v));
ta = timeit(@() pa(v));
第一个选项的时间t
= 0.057581秒。而第二个选项的时间ta
= 0.010085秒。但它可能取决于fun
,我在这里发明的这是一个非常简单的函数。