Why doesn't matlabFunction properly vectorize the state of an ode system?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Hey all,
i have reduced my problem to this simple demo case, where i define some ode, reduce its order with odeToVectorField and convert it to a matlab function.
t = sym('t');
c = sym('c');
d = sym('d');
x = str2sym('x(t)');
V = odeToVectorField(diff(diff(x)) == c + d);
matlabFunction(V, 'vars', {t, 'Y', [c; d]})
Outputs:
@(t,Y,in3)[Y(2);in3(1,:)+in3(2,:)]
With the parameters, it correctly vectorizes the parameter access, e.g. in3(2,:) instead of in3(2).
How can i get matlabFunction to vectorize the state as well, e.g. Y(2,:) instead of Y(2)?
Desired output:
@(t,Y,in3)[Y(2,:);in3(1,:)+in3(2,:)]
0 Kommentare
Antworten (1)
Divija Aleti
am 25 Sep. 2020
The symbols 'c' and 'd' can either be scalars or vectors.The vectorization for 'in3' is done as 'in3(1,:)' and 'in3(2,:)' so that they access the entire first and second rows of the matrix '[c; d]' respectively. However, the function 'odeToVectorField' returns a symbolic vector. Hence, the output shows 'Y(2)' and not 'Y(2,:)'.
Have a look at the following link to understand the algorithm used and what the symbol 'Y' means. A few examples are given too.
Siehe auch
Kategorien
Mehr zu Symbolic Math Toolbox finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!