У меня есть функцияMATLAB: как дискретизировать функцию из 10 переменных (в настоящее время используется ndgrid и arrayfun)?
function [output1 output2] = func(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10)
, что я хочу, чтобы дискретизацию. Я собираюсь выполнить оптимизацию, которая включает эту функцию, и я думаю, что эффективность оптимизации выиграет от дискретизации функции, а затем сделает сплайн-интерполяцию данных вместо того, чтобы оценивать непрерывную функцию. По сути, я хотел бы получить 10-D double для каждого из output1 и output2, который коррелирует с различными значениями 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' раз? Если каждый займет миллисекунду, вы будете использовать это для * тысяч * лет. Оптимизация причины - огромное поле в математике - это избегать подобных действий .... –
Я в основном пытаюсь понять, как я могу собирать данные по этой функции (для интерполяции позже), не требуя смешной суммы точек данных. – user178831
Поврежденная вещь - это подход к началу. –