我想在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
不是固定的,但可以通过循环进行更改,因此我无法手动输入它们。如何将值传递给A
和b
?
答案 0 :(得分:1)
passing additional arguments to an objective function有几个选项。对于像你这样的简单版本,你可以创建一个匿名函数,它会在创建时保存A
和b
的值:
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
的最小化...