Length of Array of Symbolic Variables

5 visualizaciones (últimos 30 días)
Nathan Batta
Nathan Batta el 24 de En. de 2020
Comentada: Walter Roberson el 6 de Oct. de 2023
Hello! I have an array of several symbolic variables that I want to loop through. However, when I use the length function, it says the length of the array is 1. Does anyone know the issue? Thank you!
  2 comentarios
Alex Mcaulley
Alex Mcaulley el 24 de En. de 2020
Editada: Alex Mcaulley el 24 de En. de 2020
Can you upload your variable in a mat file? It should work
syms a b c d
A = [a;b;c;d];
length(A)
ans =
4
René Hochdahl
René Hochdahl el 6 de Oct. de 2023
Apparently, the length and size functions don't work if the symbolic variables are dependent. For instance,
syms t
syms a(t) b c d e
A = [a;b;c;d];
B = [b;c;d;e];
lA = length(A)
sA = size(A)
lB = length(B)
sB = size(B)
returns
lA =
1
sA =
1 1
lB =
4
sB =
4 1

Iniciar sesión para comentar.

Respuestas (1)

Dyuman Joshi
Dyuman Joshi el 6 de Oct. de 2023
Movida: Walter Roberson el 6 de Oct. de 2023
@René Hochdahl, that is because a(t) is not a symbolic variable, but a symbolic function (see below).
As a(t) is a symbolic function, A is also defined as a symbolic function. symfun objects, like function handles, are 1x1 in size.
syms t
syms a(t) b c d e
A = [a;b;c;d];
B = [b;c;d;e];
lA = length(A)
lA = 1
sA = size(A)
sA = 1×2
1 1
lB = length(B)
lB = 4
sB = size(B)
sB = 1×2
4 1
whos
Name Size Bytes Class Attributes A 1x1 8 symfun B 4x1 8 sym a 1x1 8 symfun b 1x1 8 sym c 1x1 8 sym cmdout 1x33 66 char d 1x1 8 sym e 1x1 8 sym lA 1x1 8 double lB 1x1 8 double sA 1x2 16 double sB 1x2 16 double t 1x1 8 sym
  1 comentario
Walter Roberson
Walter Roberson el 6 de Oct. de 2023
This is correct.
If you have a symbolic function in an expression and you are not invoking the expression with specific parameters, then the datatype of the result of the expression is almost always symfun -- and symfun are scalar .
It is not possible to have a [] array that has a symfun as an indexable component.
syms a(t)
C = [a, 5/(t-1)]
C(t) = 
C(2)
ans = 
C(1)
Error using indexing
Division by zero.
You can see that C(2) is not indexing C at location 2, and is instead invoking C with parameter 2, and C(1) is not indexing C at location 1, and is instead invoking C with parameter 1. C was created as a single function that returns an array, not as an array of functions or an array in which the first element is a function and the second is a non-function.

Iniciar sesión para comentar.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by