离散匿名函数matlab

时间:2016-08-03 17:30:24

标签: matlab

我有一个名为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

我想知道是否有更好的方法,因为我需要它尽可能快地运行。

1 个答案:

答案 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,我在这里发明的这是一个非常简单的函数。