2017-12-26 3 views
0

행렬 방정식에서 행렬 B를 찾을 수 있습니까? 즉해결 방정식 벡터가 아닌 행렬을 가질 때

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

는 내가이 있고 C와 나는 B

+0

도대체 C++에서이 함께 할 수 있는가? – StoryTeller

+0

죄송합니다. 당신을 얻지 못했습니다. – shere

+0

코드없이 대수 문제는 C++과 관련이 있습니까? 당신은 C++로 태그를 붙였습니다. – StoryTeller

답변

0

당신은 일반화 역무어 - 펜로즈 역 개념을 살펴 봐야 찾고 있습니다.

B가 존재하지 않을 수 있으며 여러 가지 해결책이있을 수 있습니다.

또 다른 접근법은 열당 열을 해결하는 것입니다.

+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

당신은 우리를 말하지 않았다 m>n 또는 m=n 또는 m<n 여부.

선형 시스템이 지나치게 결정되었는지 또는 과소 평가되었는지 또는 정확한 해결책이 있는지 여부는 알 수 없습니다.

정확한 해결책이 둘 이상있을 수 있습니다. 정확한 해결책이 없을 수도 있습니다. 정확한 솔루션은 아니지만 오류를 최소화하는 솔루션을 찾고있을 수 있습니다.

언급 된 세 가지 경우 각각 mn에 대한 값을 사용하여 다음 메이플 코드를 실험 해보십시오. (코드는 당신이 교란 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); 
관련 문제