在Matlab中将数据传递给函数fminbnd时避免使用全局变量的方法

时间:2017-07-21 16:14:20

标签: matlab global-variables nested-function

我在Matlab中有一个非常简单的函数:

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

我试图通过函数fminbnd:

找到运行1变量优化的此函数的最小值
[minZ, minRms] = fminbnd(@rmsMin, -5, 5);

我的问题是:我不能/(不知道如何)将数据(Z1和Z2)传递给函数rmsMin,所以我必须使用全局变量mainFig,我试图避免。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:3)

使用接受单个输入的辅助函数句柄,并使用其他补充变量调用main函数:

脚本:

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