如何解决通过求解函数求解矩阵方程 - 对称矩阵
我尝试解决 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)])
-
我不明白为什么
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
- 我如何确定哪里出了问题?
奇怪的是,如果我不使用上面的这个技巧强制对称,我会得到 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]
- 我不明白,我使用对称的事实应该简化求解,但是如果我对
FISH_GCsp
和FISH_XC
矩阵使用这个对称特性,Matlab 找不到解决方案,而如果我不要强迫它,有解决方案(不确定它们是否正确)。
RECALL:鉴于这两个矩阵是 Fisher 矩阵,它们必须是对称的。例如,我在 FISG_GCsp_SYM
矩阵上通过技巧做到了这一点:
FISH_GCsp_SYM = sym('sp_',1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。