Способы избежать использования глобальной переменной при передаче данных в функцию fminbnd в Matlab

У меня есть очень простая функция в Matlab:

function [val] = rmsMin(z)
    Z1 = mainFig.UserData.Z1;
    Z2 = mainFig.UserData.Z2;
    val = rms(Z1 - Z2 + z);
end

Я пытаюсь найти минимальное значение этой функции, выполняющей оптимизацию 1 переменной с помощью функции fminbnd:

[minZ, minRms] = fminbnd(@rmsMin, -5, 5);

Моя проблема: я не могу/(не знаю, как) передать данные (Z1 и Z2) в функцию rmsMin, поэтому мне приходится использовать глобальную переменную mainFig, которую я пытаюсь избежать. Есть ли способ сделать это?


person Artyom Emelyanenko    schedule 21.07.2017    source источник


Ответы (1)


Используйте дескриптор вспомогательной функции, который принимает один вход и вызывает основную функцию с другими дополнительными переменными:

Скрипт:

fun=@(z) rmsMin(z, mainFig.UserData.Z1,mainFig.UserData.Z2);
[minZ, minRms] = fminbnd(fun, -5, 5);

Основная функция:

function [val] = rmsMin(z,Z1,Z2)
    val = rms(Z1 - Z2 + z);
end
person Mendi Barel    schedule 21.07.2017