我需要用Matlab符号计算以下表达式:


"l“是符号变量的向量,"C_l”也是(与"l“相同的长度,也就是l_max -l_min = 3000-10=2990)。
为了计算这个,我做了:
clear
syms l_min l_max fsky Np var1D varO1
l_min = 10
l_max = 3000
l = sym('l_',[1 (l_max - l_min)])
C_l = sym('C_l_',[1 (l_max -l_min)])
% First observable
var1D = symsum(2/((2*l+1)*fsky*Np^2), l, l_min, l_max)
varO1 = var1D/symsum(C_l, l_min, l_max)^2
Error using symengine
Invalid operands.
Error in sym/privBinaryOp (line 1030)
Csym = mupadmex(op,args{1}.s, args{2}.s, varargin{:});
Error in / (line 373)
X = privBinaryOp(A, B, 'symobj::mrdivide');
Error in inequality (line 9)
var1D = symsum(2/((2*l+1)*fsky*Np^2), l, l_min, l_max)我不知道继续计算上面sigma_o,1^2的表达式。
更新1
第一个方差sigma_{o,1}^2已正确编码。现在,我对第二个方差有困难,但我在计算第二个方差(sigma_{o,2}^2)方面取得了一些进展:
现在,我做到了:
clear
syms l_min l_max fsky Np var1D var2D varO1 varO2
l_min = 10
l_max = 3000
syms l
%l = sym('l_',[1 (l_max - l_min)])
C_l = sym('C_l_',[1 (l_max -l_min)])
% First observable
var1D = symsum(2/((2*l+1)*fsky*Np^2), l, l_min, l_max)
varO1 = var1D/sum(C_l)^2
% Second observable
var2D = symsum(((2*l+1)*fsky*Np^2), l, l_min, l_max)
varO2 = var2D/symsum((2*l+1)*C_l, l, l_min, l_max)^2但我在最后一行仍然有一个错误:
var2D =
9005901*Np^2*fsky
Error using symengine
Not a square matrix.
Error in sym/privBinaryOp (line 1030)
Csym = mupadmex(op,args{1}.s, args{2}.s, varargin{:});
Error in ^ (line 330)
B = privBinaryOp(A, p, 'symobj::mpower');
Error in inequality (line 15)
varO2 = var2D/symsum((2*l+1)*C_l, l, l_min, l_max)^2问题是,我不知道如何混合经典的"sum“函数和"symsum”符号函数,因为我在除法器中有以下表达式:
varO2 = var2D/symsum((2*l+1)*C_l, l, l_min, l_max)^2这里有解决办法吗?
更新2
@CrisLuengo:
按照你的建议,我试着:
clear
syms l_min l_max fsky Np var1D var2D varO1 varO2
l_min = 10
l_max = 15
syms l
%l = sym('l_',[1 (l_max - l_min)])
C_l = sym('C_l_',[1 (l_max -l_min)])
assume(C_l > 0)
% First observable
var1D = symsum(2/((2*l+1)*fsky*Np^2), l, l_min, l_max)
varO1 = var1D/sum(C_l)^2
% Second observable
var2D = symsum(((2*l+1)*fsky*Np^2), l, l_min, l_max)
varO2 = var2D/(symsum(((2*l+1)*C_l), l, l_min, l_max)).^2并得到错误:
varO1 =
45894056/(97698825*Np^2*fsky*(C_l_1 + C_l_2 + C_l_3 + C_l_4 + C_l_5)^2)
var2D =
156*Np^2*fsky
Error using symengine
Invalid operands.
Error in sym/privBinaryOp (line 1030)
Csym = mupadmex(op,args{1}.s, args{2}.s, varargin{:});
Error in / (line 373)
X = privBinaryOp(A, B, 'symobj::mrdivide');
Error in inequality (line 16)
varO2 = var2D/(symsum(((2*l+1)*C_l), l, l_min, l_max)).^2我只想象征性地表示以下数量(我有一组夫妻数据(l,C_l),也就是说,我对每个"l“值都有一个相关的"C_l”值。

错误可能从何而来?
更新3
以上第二量的表达可能会引起混淆。我有i=1:N值对(l_i,C_l_i),数量如下所示:

不幸的是,当我在做:
% Second observable
var2D = symsum(((2*l+1)*fsky*Np^2), l, l_min, l_max)
varO2 = var2D./(sum(symsum(((2*l+1).*C_l), l, l_min, l_max))).^2我上了终端Matlab:

正如您所看到的,我有一个因子156,它出现在每个C_l上,这是错误的,因为我希望将每个C_l的因子 (2*l+1)作为实数:(2*l+1)的计算必须用一个实值,而不是作为符号系数。
更新4
我表达了我的问题:在@drakon101的答复中提出了解决方案,我的加权值总是相同的。
我想得到的是分隔符的以下符号表达式:

如何将变量"l“改为实值(3,5,7,…,5999)?
发布于 2021-12-15 16:19:32
我不知道你想要什么输出,但是根据你上面显示的公式,你的第二条可观察的线条应该是:
% Second observable
var2D = 2*symsum(((2*l+1)), l, l_min, l_max)./(fsky.*Np.^2)
varO2 = var2D./(symsum(((2.*l+1).*C_l), l, l_min, l_max)).^2发布于 2021-12-18 13:06:02
(代表问题作者发布解决方案,将其移至答案空间)。
我通过编码找到了以下解决方案:
clc
clear all
syms fsky Np l
l_min = 10
l_max = 15
C_l = sym('C_l_',[1 (l_max)]);
assume(C_l > 0);
% Second observable
var2D = symsum(((2*l+1)*fsky*Np^2), l, l_min, l_max)
below=0;
for l=l_min:l_max
below= below + (2*l+1)*C_l(l);
end
varO2= var2D/(below)^2https://stackoverflow.com/questions/70290338
复制相似问题