【问题标题】:Ways to avoid using global variable while passing data to function fminbnd in Matlab在 Matlab 中将数据传递给函数 fminbnd 时避免使用全局变量的方法
【发布时间】:2017-12-27 18:44:51
【问题描述】:

我在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。有什么办法吗?

【问题讨论】:

    标签: matlab global-variables nested-function


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      相关资源
      最近更新 更多