在Matlab匿名函数中,我希望有像这样的函数fun_total
fun_total = @(x) [ 0;
1*x(1);
1*x(1);
2*x(2);
2*x(2);
...
100000*x(100000);
100000*x(100000);]
这是我的密码
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输出为文本文件,然后改为函数。这个能用吗?还是有人有其他有效的解决方案?谢谢!!
发布于 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迭代<向量化代码。
因此,作为向量化解决方案的中间步骤,您可以使用:
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
生成函数句柄。
发布于 2015-02-04 09:47:19
也许试一试:
fun_total = @(x)reshape(repmat(1:numel(x).*x, 2, 1),[],1)
或
fun_total = @(x)reshape([1;1]*(1:numel(x).*x),[],1)
https://stackoverflow.com/questions/28318095
复制相似问题