【发布时间】:2016-03-16 17:18:44
【问题描述】:
我有一个函数
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 个变量的函数的问题完全难以解决?
【问题讨论】:
-
那么,你想运行你的函数
1e20次吗?如果每个都需要一毫秒,那么您将运行 数千 年。优化是数学中一个巨大的领域的原因是为了避免做这样的事情...... -
我基本上是在想一种方法来收集这个函数的数据(稍后用于插值),而不需要大量的数据点。
-
破旧的东西是开始的方法。
-
所以本质上这个函数的变量太多了,没有办法离散化吗?
-
您在这里使用了错误的术语,您不是在“离散化”。您正在尝试评估函数 1e20 次。如果你想优化它,那是数学中的一个巨大领域,没有人通过给出值并查看哪个是最小值来解决它。如果这是可能的,那么今天将解决大量未解决的问题
标签: matlab function memory matrix discretization