无约束非线性优化函数

时间:2014-10-22 21:08:13

标签: matlab

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

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

创建一个文件myfun.m:

function f = myfun(x)

f = x'*A*x + b'x

然后致电fminunc,找到myfun附近x0的最低要求:

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

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

1 个答案:

答案 0 :(得分:1)

passing additional arguments to an objective function有几个选项。对于像你这样的简单版本,你可以创建一个匿名函数,它会在创建时保存Ab的值:

A = myMatA();
b = myVecb();
myfun = @(x) x.'*A*x + b.'*x;

[x,fval] = fminunc(myfun,x0);  % use no @ with an  anonymous function

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

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的最小化...