MATLAB:如何离散化 10 个变量的函数(目前使用 ndgrid 和 arrayfun)?

MATLAB: how to discretize a function of 10 variables (currently using ndgrid and arrayfun)?

我有一个功能

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 个变量的函数离散化的问题是否完全难以解决?

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

您可以使用您的策略预先计算函数的计算密集型子项。通过 100^3 查找仅用三个变量替换成本非常高的术语 table 可能会在不使用太多内存的情况下显着提高性能。