Matlab symbolic : calculate expression with vector of symbolic variables

2 次查看(过去 30 天)
Hello,
I need to calculate with Matlab symbolic the following expression :
"l" is a vector of symbolic variables and "C_l" also (same length than "l", that is to say, `l_max -l_min = 3000-10=2990`).
To calculate this, I did :
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)
I don't know to proceed to compute the expression of sigma_o,1^2 just above (varO1 in the code snippet).
Where is my error ?

回答(2 个)

VBBV
VBBV 2023-11-19
Use the element wise operator for / and ^ ... i.e. ./ and .^ as below
clear
syms l_min l_max fsky Np var1D var2D varO1 varO2
l_min = 10
l_min = 10
l_max = 300
l_max = 300
syms L
%l = sym('l_',[1 (l_max - l_min)])
C_l = sym('C_l_',[1 (l_max -l_min)])
C_l = 
% First observable
var1D = symsum(2/((2*L+1)*fsky*Np^2), L, l_min, l_max)
var1D = 
varO1 = var1D/sum(C_l)^2
varO1 = 
% Second observable
var2D = symsum(((2*L+1)*fsky*Np^2), L, l_min, l_max)
var2D = 
varO2 = var2D./symsum((2*L+1)*C_l, L, l_min, l_max).^2 % use element wise operator
varO2 = 

petit
petit 2021-12-9
have done some progress in investigation to compute the 2 variances :
Now, I did :
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
But I still get an error at the last line :
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
The issue is that I don't know how to mix the classical "`sum`" function and the "`symsum`" symbolic function because I have the following expression in divider :
varO2 = var2D/symsum((2*l+1)*C_l, l, l_min, l_max)^2
Anyone could see a workaround ?

类别

Help CenterFile Exchange 中查找有关 Physical Channels 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by