首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >匿名函数中的Matlab大行

匿名函数中的Matlab大行
EN

Stack Overflow用户
提问于 2015-02-04 09:41:57
回答 2查看 65关注 0票数 0

在Matlab匿名函数中,我希望有像这样的函数fun_total

代码语言:javascript
运行
复制
fun_total = @(x) [ 0;
               1*x(1);
               1*x(1);
               2*x(2);
               2*x(2);
               ...
               100000*x(100000);
               100000*x(100000);]

这是我的密码

代码语言:javascript
运行
复制
fun_total = @(x) [0];
for i = 1 : 100000
  fun_temp = @(x) i*x(i);
  fun_total = @(x) [ fun_total(x); fun_temp(x) ];
  fun_total = @(x) [ fun_total(x); fun_temp(x) ];
end

我的问题是,当循环迭代变大时,速度太慢了。每次fun_total = @(x) fun_total(x);fun_temp(x);

fun_total(x)将首先展开,然后合并。

现在我有了一个解决方案,就是将我的fun_total输出为文本文件,然后改为函数。这个能用吗?还是有人有其他有效的解决方案?谢谢!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-04 11:00:21

问题显然是,您正在生成100000个匿名函数fun_temp (和100000个嵌套函数fun_total)。这与生成所有m文件函数function result=xTimes1(x)function result=xTimes2(x)function result=xTimes3(x)、.当你这样看的时候,这是完全荒谬的。最好的解决方案当然是像Dan这样的矢量化解决方案,但是您也可以始终考虑使用单个m函数文件。

就效率而言,您应该期望这种层次结构:

大量(匿名)函数调用<大量for-loop迭代<向量化代码。

因此,作为向量化解决方案的中间步骤,您可以使用:

代码语言:javascript
运行
复制
function total = fun_total(x)
total = zeros(2*length(x)+1,1);
for i = 1:length(x)
    total([2*i,2*i+1]) = [i*x(i); i*x(i)];
end

然后使用@fun_total生成函数句柄。

票数 3
EN

Stack Overflow用户

发布于 2015-02-04 09:47:19

也许试一试:

代码语言:javascript
运行
复制
fun_total = @(x)reshape(repmat(1:numel(x).*x, 2, 1),[],1)

代码语言:javascript
运行
复制
fun_total = @(x)reshape([1;1]*(1:numel(x).*x),[],1)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28318095

复制
相关文章

相似问题

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