首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >离散化匿名函数

离散化匿名函数
EN

Stack Overflow用户
提问于 2016-08-04 01:30:24
回答 1查看 61关注 0票数 1

我有一个名为fun的函数,需要运行以下代码:

代码语言:javascript
复制
polarfun = @(r,theta) fun(r.*cos(theta),r.*sin(theta)).*r;
p = @(theta) integral(@(r)polarfun(r,theta),0,Inf);

在此之后,我需要构建一个由函数p的样本组成的向量

我是这样做的(n是之前定义的):

代码语言:javascript
复制
v = 0:2*pi/n:2*pi;
for i=1:n+1
    samplesofp(i) = p(v(i)); 
end

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-04 15:48:25

您可以按照注释中的建议使用arrayfun

代码语言:javascript
复制
samplesofp = arrayfun(p,v);

或者为数组输入设置integral

代码语言:javascript
复制
p = @(theta) integral(@(r)polarfun(r,theta),0,Inf,'ArrayValued',true);
samplesofp = p(v);

第二种选择可能更快:

代码语言:javascript
复制
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,它是我在这里作为一个非常简单的函数发明的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38750183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档