1

我有一个无约束的二次优化问题 - 我必须找到 u 来最小化范数 (u^H * A_k *u - d_k)) 其中 A_k 是 4x4 矩阵 (k=1,2...180) 并且 u 是 4x1 向量(H 表示厄米特)。

MATLAB 中有几个函数可以解决优化问题,但我无法弄清楚我需要为我的 OP 使用的方法。如果有人给我一些提示或建议以在 MATLAB 中解决此问题,我将不胜感激。

4

2 回答 2

2

数学预习:

如果 A 是对称的、正定的,则​​矩阵 A 定义了一个范数。这个范数称为 A 范数,写作 ||x||_A = x' A x。您的问题minimize (over x) |x'*A*x - d|等同于搜索x“A 范数”等于的向量d。通过简单地按比例放大或缩小任何非零向量直到它具有适当的大小,这样的向量很容易找到。

  1. 任意选择y(不能全为零)。例如。y = [1; zeros(n-1, 1)]; 或y = rand(n, 1)
  2. 求解一些标量 c 使得x = c*yx'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现在解决了你的问题。无需工具箱!

于 2015-11-23T20:52:55.137 回答
1
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;

似乎工作。

于 2015-11-23T19:46:59.533 回答