无约束非线性优化函数



我想在MATLAB中使用fminunc函数优化一个无约束多变量问题。这里有一个例子:

最小化函数f(w)=x'Ax

创建一个文件myfun.m:

function f = myfun(x)
f = x'*A*x + b'x

然后调用fminuncx0:附近找到myfun的最小值

[x,fval] = fminunc(@myfun,x0).

我的问题是,在我的算法中,myfun.m中的矩阵A和向量b不是固定的,但可以在循环中更改,所以我无法手动键入它们。如何将值传递给Ab

有几个选项可以将额外的参数传递给目标函数。对于像您这样的简单函数,您可以创建一个匿名函数,该函数将在创建时保存Ab的值:

A = myMatA();
b = myVecb();
myfun = @(x) x.'*A*x + b.'*x;
[x,fval] = fminunc(myfun,x0);  % use no @ with an  anonymous function

另外两个选项是全局变量(没错!)和嵌套函数。嵌套函数版本如下所示:

function [x,fval] =  myopt(A,B,x0) 
[x,fval] = fminunc(@myfunnested,x0);
    function y = myfunnested(x)
        y = x.'*A*x + b.'*x;
    end
end

但我认为你不会用fminunc来解决x'Ax + b'x的最小化。。。

最新更新