Но увеличение размерности задачи, как правило, приводит к усложнению вычислений. Так что, лично я бы преобразовывал к одномерному массиву, а потом назад к матрице.
К усложнению вычислений приводит увеличение количества элементов массива, а не его размерность. Так что не важно, в каком виде массив представлен. fminsearch всё равно раборает с отдельными значениями.
Так я и не понял ни требований, ни успехов, ни проблем.
Хорошо, давайте забудем про структуру массива, пусть он 1-мерный. Массив x из n элементов.
Есть непрерывная функция f от n аргументов, заведомо имеющая минимум.
В ходе прогона программы много раз потребуется минимизировать f (одну и ту же f), фиксируя разные наборы x-ов. Какие именно x-ы нужно зафиксировать на очередном шаге программы, заранее не известно, это решается программно на каждом шаге цикла.
Формально ничего не мешает зафиксировать часть переменных.
Формально – да, а фактически как это сделать по-простому, я не знаю. В этом вопрос и состоит.
f = @(x) (x(1,1)-1)^2+(x(1,2)-2)^2 +(x(2,1)-3)^2 + (x(2,2)-4)^2;
f = @(x) (x(1,1)-1)^2+(3-2)^2 +(x(2,1)-3)^2 + (x(2,2)-4)^2;
f = @(x) (x(1,1)-1)^2+(3-2)^2 +(4-3)^2 + (x(2,2)-4)^2;
Здесь Вы не зафиксировали часть переменных, а изменили функцию – вручную вместо переменной вписали константу.
Если бы мне требовалось 3 раза по-разному зафиксировать, я бы тоже так сделал. Но в моем случае речь идет о сотнях минимизаций. И при этом (еще раз) какие именно фиксировать в очередной раз – заранее никто не знает.
Верно ли я понял: у вас есть инжектор ВНУТРИ оптимизируемой функции
...
который распихивает
Если я правильно догадываюсь, что Вы называете инжектором (не встречал использование этого слова в таком контексте), то нет. Никто ничего не распихивает.
Скажем так. Вот в ходе выполнения программы появился (не важно откуда) некий список
[2, 9, 25, 33, 56].
Это означает, что элементы массива x с указанными номерами мы провозглашаем константами, и fminsearch их трогать не должна, и при поиске минимума f менять все остальные элементы массива x, кроме указанных в списке. При этом при вычислении самого значения f все x-ы участвуют.
В следующий раз (не при следующем запуске программы, а на следующем шаге) список будет другой.
«Распихивать» можно. Видимо, так и придется делать. Это геморно, поэтому я и надеялся, что есть какие-то штатные средства.