Matlab symbolic : calculate expression with vector of symbolic variables

조회 수: 5 (최근 30일)
petit
petit 2021년 12월 9일
댓글: VBBV 2023년 11월 19일
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 ?
  댓글 수: 2
petit
petit 2021년 12월 16일
a small up to know if someone could help me for the symbolic expression of varO2 ?
VBBV
VBBV 2023년 11월 19일
@petit Use element wise division and power operators since they are now vectors

댓글을 달려면 로그인하십시오.

카테고리

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