0

I have the following equation that I want to solve:

H*b0 = M(Q+1)b(Q+1)+l+M'B

The unknowns are b0, b(q+1) and B. The sizes of the known matrices are:

H=(42 x 42)

M(Q+1) = (42 x 21-P)

l = (42 x 1)

M' = (42 x 4)

So I want to figure out how to find the vectors.

Is there a built in command that I could do to do this?

This comes from This paper

EDIT:: Size of unknowns should be (all are column vectors):

b0 = 21
b(q+1) = 21-P (P=4 in this case)
B = P (4 in this case)
4

3 回答 3

2

首先,重新排列你的方程:

H b0 - M(Q+1) B(Q+1) - M' B = l

现在,您可以连接变量。您将得到一个X大小为 42 + 21 + 4 = 67 的未知向量 ( )。以及一个A大小为 42 x 67 的系数矩阵 ( )

X = [b0;  B(Q+1);  B ];   % <- don't need to execute this; just shows alignment
A = [ H, -M(Q+1), -M'];

现在你有一个形式的方程:

A X = l

现在您可以使用运算符在最小二乘意义上解决这个问题\

X = A \ l

X可以变回b0, B(Q+1), 并B反过来使用上面的恒等式:

b0 = X(1:42);
B(Q+1) = X(43:63);
B = X(64:67);
于 2013-08-06T14:01:39.867 回答
0

事实上,这个问题肯定有太多的自由度。当然你有一些限制,但不知道你有什么样的限制,我真的不知道要建议哪种解决方案。

假设您只有上限和下限b(Q+1)并且知道b0到处都是 1,那么问题将简化为受约束的线性最小二乘问题。

Matlab 中有一个函数可以为您做到这一点:http: //www.mathworks.nl/help/optim/ug/lsqlin.html

调用此函数有多种可能的方法,我认为最简单的方法仍然可以为您解决问题:

x = lsqlin(C,d,A,b,Aeq,beq,lb,ub)

我不是这个领域的专家,但如果你能想出一个技巧来用这种形式写你的问题,那肯定是最简单的解决方案。


出于实际目的:如果您找不到解决这个复杂问题的方法,也许可以尝试修复b0一些合理的值以获得一个体面的解决方案。

于 2013-08-06T12:51:42.603 回答
-1

您的问题可以有很多解决方案;确实你有:

b0 的 42 个系数 B(q+1) 的 21 个系数 B 的 21 个系数

你只有 42 个方程,总共 84 个系数!

您的问题必须得到改进,并带有额外的限制。一旦你有足够的约束,你应该能够使用线性最小二乘法来找出你的系数。

对于 42 个约束和变量,您不需要函数,矩阵操作就足够了。您想找到向量 X,例如 H*X = Y

X 的估计值为 (H'*H)^-1*H'*Y。

所以在 Matlab 中:

X ~ (H'*H)\H'*Y

不要忘记检查 H'H 是否条件良好且为正定。

所以你所要做的就是在 X 中连接你的 3 个向量系数,把你的约束系数放在 H 和 Y 中,使用公式。

干杯

于 2013-07-30T17:24:41.727 回答