2017-12-26 10 views
0

私は以下の行列の式で行列Bを見つけることができますか?私はAとCを持っていると私はあなたが一般逆ムーア・ペンローズ逆に概念を見なければならないBベクトルの代わりに行列があるときの行列の方程式

+0

何地球上のC++はこれと関係があるのでしょうか? – StoryTeller

+0

申し訳ありませんが私はあなたを得る – shere

+0

あなたの代数的な問題は、コードなしで、C + +と関係がありますか?あなたはそれをC++とタグ付けしました。 – StoryTeller

答えて

0

を探していますつまり

AB=C 
A is n*m 
B is m*m 
C is n*m 

Bが存在しない可能性があり、複数の解決策がある可能性があります。

もう1つの方法は、列ごとに列を解決することです。あなたがm>nまたはm=nまたはm<nかどうかを私たちに語っていない

+0

C++やメイプルでサンプルコードを教えていただけますか?ありがとう – shere

0

メープル

(必要に応じてAとCの定義)

> with(LinearAlgebra): 
> A:=Matrix([[0,0,0],[0,0,0],[0,0,0]]); 
> C:=Matrix([[0,0,0],[0,0,0],[0,0,0]]); 
> Multiply(A^(-1),C) 
+0

しかしAは正方行列ではありません!それは大丈夫ですか? – shere

+0

[この記事では]質問と回答を読んでみてください(https://stackoverflow.com/questions/7892990/solving-a-system-of-linear-equations-in-a-non-square-matrix)。この種の問題について理解を与えてください。 – Marathon55

0

また、リニアシステムが過剰決定されているのか、過小決定されているのか、正確な解決策があるのか​​などはわかりません。

解決策が複数ある可能性があります。正確な解決策がないかもしれません。正確な解決策ではないが、エラーを最小限に抑えるソリューションを探しているかもしれません。

上記の3つのケースのそれぞれについて、mnの値を使用して、次のMapleコードを試してみてください。 (コードを使用すると、摂動Cは何の厳密解は存在しないと発生します近似解を得るための効果を見ることができるように正確なC=A.Bを摂動。)

restart; 
randomize(): 
with(LinearAlgebra): 

# Experiment with the following computations, using case each of: 
# 1) m > n 
# 2) n > m 
# 3) m = n 
m,n:=2,3; 

A:=RandomMatrix(n,m, generator=-10..10); 
B:=RandomMatrix(m,m, generator=-10..10); 

C:=A.B; 
C[2,..]:=C[2,..]*1.01: # add some error 
C[..,2]:=C[..,2]*1.01: # add some error 
C; 

Bhat1:=LeastSquares(A, C, method=SVD); 

A.Bhat1, C; 
Norm(A.Bhat1 - C); 

Bhat2:=LinearAlgebra:-MatrixInverse(A) . C; 

A.Bhat2, C; 
Norm(A.Bhat2 - C); 
関連する問題