我有一个名为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我想知道是否有更好的方法来做到这一点,因为我需要它尽可能快地运行。
发布于 2016-08-04 15:48:25
您可以按照注释中的建议使用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,它是我在这里作为一个非常简单的函数发明的。
https://stackoverflow.com/questions/38750183
复制相似问题