Siempre puedes concatenar los datos de tus dos funciones antes de trazarlos. Sin embargo, aquí hay una solución similar a la de @user1772257 que utiliza indexación lógica para evitar la multiplicación extra, la adición, y también establece los valores fuera de ambos rangos a NaN:
function y = f(t)
t1 = (t>0 & t<pi); % (0, pi)
t2 = (t>=-pi & t<=0); % [-pi, 0]
y = NaN(size(t)); % Pre-allocate and set for [-Inf, -pi), [pi, Inf]
y(t1) = 3*t(t1);
y(t2) = -3*t(t2);
Nótese que este esquema tiene cuidado de evaluar cada pieza sólo en los valores para los que es válida. Esto puede ser útil si las funciones más complejas son computacionalmente costosas o generan errores o extremos en valores fuera de rango. Si lo quiere periódico, tendrá que añadir mod
en varios lugares. Sin embargo, si sabes que tu aportación será siempre $[-\pi, \pi)$ o no le importa, entonces se puede utilizar la siguiente optimización
function y = f(t)
t1 = (t>0 & t<pi);
y(t1) = 3*t(t1);
t1 = ~t1;
y(t1) = -3*t(t1);
A continuación, trazar con
t = -pi:0.01:pi;
plot(t,f(t))
También podría considerar añadir la línea y = zeros(size(t));
en la segunda función antes de que se evalúen los trozos para evitar la reasignación ocasional de memoria en algunos casos (probablemente no sea costoso en la versión actual de Matlab a menos que la función tenga muchos trozos y/o sea llamada muchas veces).