defining symbolic piecewise function

12 visualizaciones (últimos 30 días)
Francesco Collini
Francesco Collini el 20 de Dic. de 2017
Respondida: Francesco Collini el 28 de Feb. de 2019
Good evening, I have an issue trying to define a piecewise symbolic function in matlab.
I already tried using the piecewise predefined function as shown in the next piece of code:
a = sym('a'); l = sym('l');
r_i = symfun(r_c(a) + r_1, a); l_i = symfun((pi/2)*r_c(a), a); l_2 = symfun(l_i(a) + r_2 - r_i(a), a);
r = symfun(piecewise((0 <= l) && (l < l_i(a)),...
r_1 + r_c(a) * (1 - cos(l / r_c(a))),...
(l_i(a)<=l) && (l<l_2(a)),...
r_i(a) + l - (pi/2) * r_c(a)),...
[l, a]);
but it shows this error "Conversion to logical from sym is not possible.".
I guess it is because I can not use a symbolic function in the chain of inequalities, but I do not know how to fix this, so please could anyone help me? Thankyou very much and merry Christmas!!
PS
This piece of code is contained in a function.m file.

Respuesta aceptada

Francesco Collini
Francesco Collini el 28 de Feb. de 2019
I found out that the solution for this problem is:
a = sym('a'); l = sym('l');
r_i = symfun(r_c(a) + r_1, a); l_i = symfun((pi/2)*r_c(a), a); l_2 = symfun(l_i(a) + r_2 - r_i(a), a);
r = symfun(piecewise((0 <= l) & (l < l_i(a)),...
r_1 + r_c(a) * (1 - cos(l / r_c(a))),...
(l_i(a)<=l) & (l<l_2(a)),...
r_i(a) + l - (pi/2) * r_c(a)),...
[l, a]);
The problem was in the definition of the intervals, where a single character "&" must be used instead two "&&" to define an interval under more than one condition.

Más respuestas (0)

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by