我有一个功能
function [output1 output2] = func(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10)
我想要离散化。我将进行涉及此功能的优化,我认为优化的效率将受益于离散化函数,然后对数据进行样条插值,而不必评估连续函数。基本上我希望output1和output2中的每一个都有一个10-D double,它与v1,v2,... v10的变化值相关。
有了无限的时间和记忆,我会做以下事情:
n_pts = 100;
v1 = linspace(v1_min, v1_max, n_pts);
...
v10 = linspace(v10_min, v10_max, n_pts);
[v1g v2g ... v10g] = ndgrid(v1, v2, ... v10);
[output1, output2] = arrayfun(@func, v1g, v2g, ... v10g);
时间和内存(执行ndgrid和arrayfun所需)显然不允许这样做。任何人都可以想到解决方法,或者这个离散10个变量函数的问题是否完全难以解决?
答案 0 :(得分:0)
你走错了路。假设你有无限的内存,你可以在最后一行调用你的函数100 ^ 10次。这需要很多时间。没有合理的优化策略可以多次调用你的函数,这就是为什么开发所有这些复杂策略的原因。
您可以使用策略预先计算函数的计算密集子项。仅使用具有100 ^ 3查找表的三个变量替换成本非常高的术语可能会显着提高性能,而无需使用大量内存。