【问题标题】:fminsearch with two variablesfminsearch 有两个变量
【发布时间】:2017-04-16 19:23:37
【问题描述】:

我正在尝试使用 fminsearch 最小化一个 5 变量函数。我只想最小化两个变量的函数。 我尝试了以下方法,但没有运气:

func = @(x,b) myfunction( x, y, z, a, b ); 
fminsearch(func,[x0,b0]);

xNxM 维的矩阵,bY strong>xZ 维度,因此维度不同。起始条件 x0b0 相同。

我看到过一些类似的问题,但我仍然无法解决这个问题。

我在运行脚本时得到以下输出:

Error using horzcat
Dimensions of matrices being concatenated are not consistent.

【问题讨论】:

    标签: matlab fminsearch


    【解决方案1】:

    通常fminsearch 函数只允许三个输入:函数句柄、初始值向量和优化选项,例如:fminsearch(@fun,x0,options)

    幸运的是,有一个小技巧可以做,你可以在选项后面加上额外的参数,像这样:fminsearch(@fun,[x0 b0],options,z,a,b)

    如果你没有使用任何选项,它应该是这样的:fminsearch(@fun,[x0 b0],[],z,a,b)

    请记住,您应该在函数内部解包变量ab,类似于:

    function[obj]=func(x0,z,a,b)
    
    x=x0(1)
    y=x0(2)
    
    %rest of the function
    
    end
    

    【讨论】:

    • 感谢您的回答!我不太明白解压变量的最后一部分。
    • 我会的。我尝试了您的解决方案,但没有运气。由于矩阵 x 和 b 的大小不同,我将它们存储在一个单元格中。像这样; c1{1}=x 和 c1{2}=b。然后我运行了以下脚本; func = @(c1) myfunction(c1, y, z, a); fminsearch(func,[c1{1} c1{2}]);。我仍然收到与以前相同的错误消息。
    • 让我看看我是否明白,您是否试图通过使用两个矩阵作为变量来最小化目标函数?
    • 是的,我是。不过,我想通了。
    • 当然,我将矩阵组合成一个矩阵,并将其附加到一个变量上。这解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多