0

我有一个101x82名为A. 使用这个变量矩阵,我计算了另外两个变量,称为:

1) B,一个1x1标量,和

2) C, 一个50x6矩阵。

我将 1)and2)与它们的类似变量3)and进行比较,它们4)的值是固定的:

3) D,一个1x1标量,和

4) E, 一个50x6矩阵。

现在,我想扰动/改变A矩阵的值,这样:

1)~ 3),即B几乎等于D,并且

2)~ 4),即C几乎等于E

请注意,在扰动ABC会改变,但不会DE

任何想法如何做到这一点?谢谢!

4

2 回答 2

1

我无法运行您的代码,因为它要求加载数据(我没有),并且如何计算 B 或 C 并不是很明显。

幸运的是,我或许能够回答您的问题。您正在描述一个优化问题,解决方案是使用fminsearch(或类似的东西)。

您所做的是定义一个函数,该函数返回一个包含两个元素的向量:

y1 = (B - D)^weight1;
y2 = norm((C - E), weight2);

重量是您允许可变性的强度(通常重量= 2就足够了)。
您的函数变量将是 A。

于 2011-04-25T23:52:05.087 回答
0

据我了解,您有一些功能。

fb(A) = B

fc(A) = C

你知道上面列出的函数,即你知道从 A 到每个函数的映射吗?如果你想尝试优化,使B接近D,你需要选择:

  1. 关闭是什么意思。您可以查看 B 和 D 情况的一些向量范数,例如最小化 ||BD||^2。这种不同元素的标准平方和可能会起作用并且在计算上很好。
  2. 如何优化。这在很大程度上取决于您的功能,无论您是想要本地还是全局 mimina 等。

所以基本上,现在我们将问题归结为最小化:

成本 = ||fb(A) - fd(A)||^2

您当然可以做的一件事是计算此成本函数相对于 A 的各个元素的梯度,然后使用具有合适“时间步长”的正向欧拉方法执行最小化步骤。这可能不会很快,但只要时间步长足够小,功能足够好,它至少可以让你达到局部最小值。

计算这个的梯度

grad_A(成本) = 2*||fb(A)-fd(A)||*(grad_A(fb)(A)-grad_A(fd)(A))

其中 grad_A 表示相对于 A 的梯度,而 grad_A(fb)(A) 表示在 A 处评估的函数 fb 相对于 A 的梯度等。

计算 grad_A(fb)(A) 取决于 fb 的形式,但这里有一些页面有“矩阵演算”的标识和解释。

矩阵演算恒等式 矩阵演算解释

然后,您只需通过前向 Euler 更新对 A 执行梯度下降:

A_next = A_prev - 时间步长 * grad_A(成本)

于 2011-04-29T01:51:56.597 回答