how we can define piecewise function in matlab?
Mostrar comentarios más antiguos
in maple we can use comamnd:(
f:= piecewise(0 <= t and t <= T1, f1, T1 < t and t < T2, 0, T2 <=t and t <= T3, f1, T3 < t and t < T4, 0)
but in matlab i can not define this function.
please give me som information ...
thanks
Respuesta aceptada
Más respuestas (3)
Walter Roberson
el 12 de Oct. de 2013
You cannot define that as a function in MATLAB. MATLAB functions need to have a defined value for the case where none of the conditions hold. If you were absolutely sure that one of the conditions will hold you would rewrite the Maple function without the final condition, as
piecewise(0 <= t and t <= T1, f1, T1 < t and t < T2, 0, T2 <=t and t <= T3, f1, 0)
This would be
function y = f(t, T1, T2, T3, f1)
y = zeros(size(t));
idx1 = 0 <= t & t <= T1;
y(idx1) = f1;
idx2 = T1 < t & t < T2;
y(idx2) = 0;
idx3 = T2 <= t & t <= T3;
y(idx3) = f1;
y(~(idx1 | idx2 | idx3)) = 0;
end
4 comentarios
ebi
el 12 de Oct. de 2013
Walter Roberson
el 12 de Oct. de 2013
You can only do fourier transforms symbolically, using the symbolic toolbox. For numeric values, you need to use fft (fast fourier transform) or the like.
If you want to use the symbolic toolbox to create the MuPAD equivalent of the Maple function, you need to change the syntax very slightly:
f_generic = sym('piecewise((0 <= t and t <= T1, f1), (T1 < t and t < T2, 0), (T2 <=t and t <= T3, f1), (T3 < t and t < T4, 0))');
Note: possibly the inner () should be [] instead.
Before using you would want to
f = subs(f_generic, {'T1', 'T2',, 'T3', 'f1'}, {0.02, 0.287, 0.307, 0.335});
Note that the result would be a symbolic formula, not a function. To get the function version, use
f_generic = sym('t -> piecewise((0 <= t and t <= T1, f1), (T1 < t and t < T2, 0), (T2 <=t and t <= T3, f1), (T3 < t and t < T4, 0))');
ebi
el 12 de Oct. de 2013
Walter Roberson
el 21 de Feb. de 2017
Note: my later experiments showed that using sym('t->...') cannot possibly create a symbolic function.
sixwwwwww
el 12 de Oct. de 2013
Dear ebi, You need something like this if I understood correctly:
syms f f1
t = input('Enter value of t: ');
% Assuming values of T1, T2 and T3 as follows
T1 = 10;
T2 = 20;
T3 = 30;
if ((t >= 0 && t <= T1) || (t >= T2 && t <= T3))
f = f1; % here you can define f1 as you wish
else
f = 0;
end
Is it ok?
Categorías
Más información sobre Number Theory en Centro de ayuda y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


