0

解きたい次の方程式があります。

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

unknownsと. _ b0, b(q+1)_ B既知の行列のサイズは次のとおりです。

H=(42 x 42)

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

l = (42 x 1)

M' = (42 x 4)

そこで、ベクトルの求め方を知りたいです。

これを行うために実行できる組み込みコマンドはありますか?

これはこの論文から来ています

編集::未知数のサイズは次のとおりです(すべて列ベクトルです):

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戻すことができます。b0B(Q+1)B

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

このままでは、この問題には確かに自由度が多すぎます。もちろん、いくつかの制約がありますが、どのような制約があるかを知らなければ、どのソリューションを提案すればよいか本当にわかりません。

上限と下限のみが設定されていて、どこでも 1 であることがb(Q+1)わかっていると仮定するとb0、問題は制約付き線形最小二乗問題になります。

あなたのためにそれを行うことができる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 個の係数

合計 84 個の係数に対して 42 個の方程式しかありません。

追加の制約を加えて、問題を洗練する必要があります。十分な制約があれば、係数を見つけるために線形最小二乗法を使用できるはずです。

42 個の制約と変数の場合、関数は必要ありません。行列操作で十分です。H*X = Y のようなベクトル X を見つけたい

X の推定値は (H'*H)^-1*H'*Y です。

だからMatlabで:

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

H'H が条件付きで正定値であることを確認することを忘れないでください。

したがって、X で 3 つのベクトル係数を連結し、制約係数を H と Y に入れ、式を使用するだけです。

乾杯

于 2013-07-30T17:24:41.727 に答える