我必须设置一个具有特定概率分布的音素表来编码。 现在有22个基本元素(每个元素具有指定的概率,总和100%),它应映射到12元素表,其具有期望的元素概率(总和100%)。
因此,最小化的一部分是合并几个基本元素以获得12个表元素。每个基本元素必须恰好出现一次。
此外,该表有3行。因此,22个基本元素的相同12个元素组成必须最小化3个目标向量的误差。让我们说给定的目标向量是b1,b2,b3 (维度12x1),给定的基本向量是x (维度22x1)并且它们通过以下方式连接: 未知矩阵A (12x22)by:
B1 + ERR1 =斧
B2 + ERR2 =斧
B3 + ERR3 =斧
总结一下:找到A,使得dot_prod(err1 + err2 + err3,err1 + err2 + err3)= min(最小二乘)。并且 - 根据上面的解释 - A必须只包含1和0,而每列只有1个。
不幸的是我不知道如何解决这个问题。它能以不同于矩阵向量形式的方式表达吗? matlab中的哪些工具可以做到?
答案 0 :(得分:0)
我想我在解析Matlab文档的某些部分时找到了答案。
首先,问题可以改写为:
errSum = ERR1 + ERR2 + ERR3 = 3AX-B1-B2-B3
=> dot_prod(errSum,errSum)= min(A)
应用点积(最小二乘)产生二次标量表达式。
语法方面,优化框中的 fmincon 工具可以完成这项工作。它有约束参数,允许强制Aij为二进制,每列总和为1。
但显然fmincon对于算法二进制问题并不理想,应该使用 ga 工具,可以用类似的方式调用。
由于这个等式在我的情况下会很长并且需要写出来,所以我还没有尝试过。如果我错了,请纠正我。或者添加更多解决方案方法(如果有)。