匿名函数中的 Matlab 大行
Matlab large rows in Anonymous Functions
在 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 输出为文本文件,
然后改变功能。
这行得通吗?或者有人有其他有效的解决方案?
谢谢!!
也许试试:
fun_total = @(x)reshape(repmat(1:numel(x).*x, 2, 1),[],1)
或
fun_total = @(x)reshape([1;1]*(1:numel(x).*x),[],1)
问题显然是,您正在生成 100000 个匿名函数 fun_temp
(和 100000 个嵌套函数 fun_total
)。这与生成所有 m 文件函数基本相同
function result=xTimes1(x)
、function result=xTimes2(x)
、function result=xTimes3(x)
、...当你这样看时,这完全是荒谬的。最好的解决方案当然是使用像 Dan 这样的矢量化解决方案,但您也可以始终考虑使用单个 m 函数文件。
就效率而言,您应该期望此层次结构:
Lots of (anonymous) function calls < lots of for
-loop iterations <
vectorized code.
因此,作为矢量化解决方案的中间步骤,您可以使用:
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
生成函数句柄。
在 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 输出为文本文件, 然后改变功能。 这行得通吗?或者有人有其他有效的解决方案? 谢谢!!
也许试试:
fun_total = @(x)reshape(repmat(1:numel(x).*x, 2, 1),[],1)
或
fun_total = @(x)reshape([1;1]*(1:numel(x).*x),[],1)
问题显然是,您正在生成 100000 个匿名函数 fun_temp
(和 100000 个嵌套函数 fun_total
)。这与生成所有 m 文件函数基本相同
function result=xTimes1(x)
、function result=xTimes2(x)
、function result=xTimes3(x)
、...当你这样看时,这完全是荒谬的。最好的解决方案当然是使用像 Dan 这样的矢量化解决方案,但您也可以始终考虑使用单个 m 函数文件。
就效率而言,您应该期望此层次结构:
Lots of (anonymous) function calls < lots of
for
-loop iterations < vectorized code.
因此,作为矢量化解决方案的中间步骤,您可以使用:
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
生成函数句柄。