微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过求解函数求解矩阵方程 - 对称矩阵

如何解决通过求解函数求解矩阵方程 - 对称矩阵

我尝试解决 2 个 3x3 矩阵之间的等式。在所有参数中,有 10 个未知数需要查找。

在下面的脚本中,您可以看到我如何构建 2 个矩阵(一个直接填充 3x3,另一个初始大小为 5x5 边缘化为 3x3):

clear;
clc;
format long;

% 2 Matrices symbolic : FISH_GCsp_SYM,FISH_XC_SYM - 2 cosmo params + 1 common bias
% Force symmetric
FISH_GCsp_SYM = sym('sp_',[3 3],'real');
FISH_GCsp_SYM = tril(FISH_GCsp_SYM.') + triu(FISH_GCsp_SYM,1)
FISH_XC_SYM = sym('xc_',[3,3],'real');
FISH_XC_SYM = tril(FISH_XC_SYM.') + triu(FISH_XC_SYM,1)

% 2 Matrices symbolic : FISH_GCsp_SYM,FISH_XC_SYM - 2 cosmo params + 2 bias + 1 new observable
% Force symmetric
FISH_GCsp_SYM2 = sym('sp2_',[5 5],'real');
FISH_GCsp_SYM2 = tril(FISH_GCsp_SYM2.') + triu(FISH_GCsp_SYM2,1)

FISH_XC_SYM2 = sym('xc2_','real');
FISH_XC_SYM2 = tril(FISH_XC_SYM2.') + triu(FISH_XC_SYM2,1)

FISH_GCsp_SYM2_SAVE = sym('sp2_','real');
FISH_GCsp_SYM2_SAVE = tril(FISH_GCsp_SYM2_SAVE.') + triu(FISH_GCsp_SYM2_SAVE,1)
FISH_XC_SYM2_SAVE = sym('xc2_','real');
FISH_XC_SYM2_SAVE = tril(FISH_XC_SYM2_SAVE.') + triu(FISH_XC_SYM2_SAVE,1)

% Link between 2 columns of bias into 5x5 and sum of bias into 3x3 common bias
FISH_GCsp_SYM(3,1:2) = FISH_XC_SYM2(3:4,1) + FISH_XC_SYM2(3:4,2)
FISH_GCsp_SYM(1:2,3) = FISH_XC_SYM2(1,3:4) + FISH_XC_SYM2(2,3:4)
FISH_GCsp_SYM(3,3) = FISH_XC_SYM2(3,3) + FISH_XC_SYM2(4,4)

% Sum for  Fisher matrices;
FISH_GCsp_XC_SYM(1:2,1:2) = FISH_GCsp_SYM(1:2,1:2) + FISH_XC_SYM(1:2,1:2);
FISH_GCsp_XC_SYM(3,2);
FISH_GCsp_XC_SYM(1:2,3:4);
FISH_GCsp_XC_SYM(3,4);
FISH_GCsp_XC_SYM

% Marginalise on 1 common bias
COV_GCsp_XC_SYM_common = inv(FISH_GCsp_XC_SYM);
COV_GCsp_XC_SYM_common([3],:) = [];
COV_GCsp_XC_SYM_common(:,[3]) = [];
FISH_GCsp_XC_SYM = inv(COV_GCsp_XC_SYM_common)

% Classical equivalent of big fisher matrix + 1 row/column of new observable
% Marginalise on 3 last rows/columns
COV_GCsp_SYM2 = inv(FISH_GCsp_SYM2);
COV_XC_SYM2 = inv(FISH_XC_SYM2);
COV_GCsp_SYM2([3 4 5],:) = [];
COV_GCsp_SYM2(:,[3 4 5]) = [];
COV_XC_SYM2([3 4 5],:) = [];
COV_XC_SYM2(:,[3 4 5]) = [];
FISH_GCsp_SYM2 = inv(COV_GCsp_SYM2);
FISH_XC_SYM2 = inv(COV_XC_SYM2);

% Summing the cosmo parameters
FISH_GCsp_XC_SYM2 = FISH_GCsp_SYM2 + FISH_XC_SYM2

% Matricial equation to solve
eqn = FISH_GCsp_XC_SYM == FISH_GCsp_XC_SYM2;

% Solving : matrix1 equal to matrix2
sol = solve(eqn,[FISH_GCsp_SYM2_SAVE(:,5) FISH_XC_SYM2_SAVE(:,5)])
  1. 我不明白为什么 solve function 找不到解决方案。我有以下错误消息:

    警告:无法象征性地解决。使用 vpasolve 返回数值解。

    解决中(第 304 行) 在 building_observable_to_find_FOR_STACK(第 61 行)

    溶胶 =

    带字段的结构:

     sp2_1_5: [1x1 sym]
     sp2_2_5: [1x1 sym]
     sp2_3_5: [1x1 sym]
     sp2_4_5: [1x1 sym]
     sp2_5_5: [1x1 sym]
     xc2_1_5: [1x1 sym]
     xc2_2_5: [1x1 sym]
     xc2_3_5: [1x1 sym]
     xc2_4_5: [1x1 sym]
     xc2_5_5: [1x1 sym]
    

即使将 solve 替换为 vpasolve,也找不到非零数值。但我想首先找到以下 10 个未知数的符号形式:

sp2_1_5,sp2_2_5,sp2_3_5,sp2_4_5,sp2_5_5,xc2_1_5,xc2_2_5,xc2_3_5,xc2_4_5,xc2_5_5
 
  1. 我如何确定哪里出了问题?

奇怪的是,如果我不使用上面的这个技巧强制对称,我会得到 10 个未知数的非空符号解:

Warning: Solutions are valid under the following conditions: xc2_3_3 + xc2_4_4 ~= 0 & sp2_3_3*sp2_5_4 ~= sp2_3_4*sp2_5_3 &
xc2_4_3*xc2_5_4 ~= xc2_4_4*xc2_5_3. To include parameters and conditions in the solution,specify the 'ReturnConditions'
value as 'true'.
> In solve>warnIfParams (line 482)
  In solve (line 357)
  In building_observable_to_find_FOR_STACK_NOT_FORCE_SYMMETRIC (line 65)

sol =

  struct with fields:

    sp2_1_5: [1x1 sym]
    sp2_2_5: [1x1 sym]
    sp2_3_5: [1x1 sym]
    sp2_4_5: [1x1 sym]
    sp2_5_5: [1x1 sym]
    xc2_1_5: [1x1 sym]
    xc2_2_5: [1x1 sym]
    xc2_3_5: [1x1 sym]
    xc2_4_5: [1x1 sym]
    xc2_5_5: [1x1 sym]
  1. 我不明白,我使用对称的事实应该简化求解,但是如果我对 FISH_GCspFISH_XC 矩阵使用这个对称特性,Matlab 找不到解决方案,而如果我不要强迫它,有解决方案(不确定它们是否正确)。

RECALL:鉴于这两个矩阵是 Fisher 矩阵,它们必须是对称的。例如,我在 FISG_GCsp_SYM 矩阵上通过技巧做到了这一点:

FISH_GCsp_SYM = sym('sp_',1)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。