我有一个无约束的二次优化问题 - 我必须找到 u 来最小化范数 (u^H * A_k *u - d_k)) 其中 A_k 是 4x4 矩阵 (k=1,2...180) 并且 u 是 4x1 向量(H 表示厄米特)。
MATLAB 中有几个函数可以解决优化问题,但我无法弄清楚我需要为我的 OP 使用的方法。如果有人给我一些提示或建议以在 MATLAB 中解决此问题,我将不胜感激。
我有一个无约束的二次优化问题 - 我必须找到 u 来最小化范数 (u^H * A_k *u - d_k)) 其中 A_k 是 4x4 矩阵 (k=1,2...180) 并且 u 是 4x1 向量(H 表示厄米特)。
MATLAB 中有几个函数可以解决优化问题,但我无法弄清楚我需要为我的 OP 使用的方法。如果有人给我一些提示或建议以在 MATLAB 中解决此问题,我将不胜感激。
如果 A 是对称的、正定的,则矩阵 A 定义了一个范数。这个范数称为 A 范数,写作 ||x||_A = x' A x。您的问题minimize (over x) |x'*A*x - d|
等同于搜索x
“A 范数”等于的向量d
。通过简单地按比例放大或缩小任何非零向量直到它具有适当的大小,这样的向量很容易找到。
y
(不能全为零)。例如。y = [1; zeros(n-1, 1)]
; 或y = rand(n, 1)
;x = c*y
和x'Ax=d
。代入我们得到c^2 y'Ay=d
:。y = [1; zeros(n-1)]; %Any arbitrary y will do as long as its not all zero
c = sqrt(d / (y'*A*y))
x = c * y`
x
现在解决了你的问题。无需工具箱!
options = optimoptions('fminunc','GradObj','on','TolFun',1e-9,'TolX',1e-9);
x = fminunc(@(x)qfun(x,A,d),zeros(4,1),options);
和
function [y,g]=qfun(x,A,d)
y=(x'*A*x-d);
g=2*y*(A+A')*x;
y=y*y;
似乎工作。