フィルターのクリア

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 Center および File ExchangeNumber Theory についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by