How to calculate A matrix if C1=A*C2*A' ?

조회 수: 2 (최근 30일)
Ahmad Fakih
Ahmad Fakih 2019년 4월 19일
편집: Ahmad Fakih 2019년 4월 20일
Dear members,
How to calculate matrix A using matlab if C1 and C2 are known?
Capture.PNG
  댓글 수: 6
David Wilson
David Wilson 2019년 4월 20일
편집: David Wilson 2019년 4월 20일
Any other conditions, such as symmetry, positive definiteness etc?
Have you looked at the Riccati equation and friends?
Below I've tried a crude numerical minimisation strategy, but it is, as expected, very sensitive.
n = 3; % start small, and then work up to say n=10.
Ax = rand(n,n); % true value
C2 = rand(n,n);
C1 = Ax*C2*Ax';
f = @(A) norm(A*C2*A' - C1)
g = @(a) f(reshape(a,n,n));
optns = optimoptions('fminunc','MaxIterations',1e3,'MaxFunctionEvaluations',1e5)
a0 = randn(n^2,1); % start guess for the elements of [A] in a column.
a = fminunc(g,a0,optns)
A = reshape(a);
I've also tried a symbolic version with just 2*2 and random numbers. I get multiple solutions, so are you sure this problem is well formed, say with a unique solution?
n = 2; % test dimension
syms a11 a12 a21 a22 real
A = [a11, a12; a21 a22];
Ax = [1,2;3,5]; % true solution
C2 = [4,-2;0,6]; % arbitrary constants
C1 = Ax*C2*Ax';
Asoln = solve(A*C2*A'==C1,A) % symbolic toolbox
for i = 1:length(Asoln.a11) % look at each solution & residual
Ar = double([Asoln.a11(i), Asoln.a12(i);
Asoln.a21(i), Asoln.a22(i)]);
res = Ar*C2*Ar' - C1
end
Ahmad Fakih
Ahmad Fakih 2019년 4월 20일
편집: Ahmad Fakih 2019년 4월 20일
Yeah sorry forgot to tell you the matrices are Symmetrical. @David thanks for the interesting answer. Anyway I found an exact solution, but this requires C2 to be a diagonal ones matrix but that's not a problem for me. Also, cov is basically C1.Thanks all!

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Linear Algebra에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by