0

我有一个功能

function [output1 output2] = func(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10)

我想离散化。我将执行涉及此函数的优化,我认为优化的效率将受益于离散函数,然后对数据进行样条插值,而不必评估连续函数。本质上,我希望 output1 和 output2 中的每一个都有一个 10 维双精度,它们与 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 个变量的函数的问题完全难以解决?

4

1 回答 1

0

你走在一条完全错误的道路上。假设你有无限的内存,你会在最后一行调用你的函数 100^10 次。那将需要很多时间。没有合理的优化策略会多次调用您的函数,这就是开发所有这些复杂策略的原因。

您可以使用您的策略来预先计算函数的计算密集型子项。用 100^3 查找表仅用三个变量替换成本密集型术语可能会显着提高性能,而无需使用太多内存。

于 2016-03-16T17:32:12.547 回答