问题请参考附图。在该图中,变量q,g和h是向量,其中sigma是标量。我使用MATLAB fminunc来处理优化问题的单个参数,无论它是标量还是向量。
但我无法使用此问题
答案 0 :(得分:0)
这只是重新排列数据的问题,因此所有优化变量都在一个数组中。
例如,考虑以下超级简单的目标函数
function obj_val = my_obj(q, g, h, sigma)
obj_val = sigma*(q.'*q) + (h.'*h)*(g.'*g);
end
我们希望为常量q
和g
找到最佳h
和sigma
。然后我可以做以下
% constants
h = randn(6,1);
sigma = abs(randn());
% initial guess
q0 = randn(5,1);
g0 = randn(10,1);
% get dimensions of the variables
nq = numel(q0);
sq = size(q0);
ng = numel(g0);
sg = size(g0);
% Single variable containing both initial guesses
x0 = [q0(:); g0(:)];
% wrapper function which just takes x and distributes it to the arguments of my_obj
f = @(x) my_obj(reshape(x(1:nq), sq), reshape(x(nq+1:nq+ng), sg), h, sigma);
% solve for optimal x
x_opt = fminunc(f, x0);
% recover optimal q and g
q_opt = reshape(x_opt(1:nq), sq);
g_opt = reshape(x_opt(nq+1:nq+ng), sg);
fprintf('Resulting objective: %g\n', my_obj(q_opt, g_opt, h, sigma));
注意:显然,最佳点是( q,g )=( 0 , 0 )这个例子。