11 votos

Trazado de funciones a trozos en Matlab

¿Es posible en Matlab para trazar una función uniforme a trozos como:

$ f(x) = \begin{cases} 3t , 0 < t < \pi \\ -3t , -\pi \le t \le 0 \end{cases}$

que tiene un periodo de $2\pi$ .

No consigo encontrar la forma de trazar una función a trozos correctamente. Puedo conseguirlo trazando dos gráficas separadas y utilizando la función hold on capacidad.

12voto

solusipse Puntos 145

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).

7voto

ValdaR Puntos 11
function y=f(t)
    y1=(-3*t).*(-pi<=t & t<=0);
    y2=(3*t).*(0<t & t<pi);
    y=y1+y2;

end

Desde el espacio de trabajo de matlab, llame a la función y trace lo siguiente

 x=-pi:.01:pi;
 y=f(x);
plot(x,y);

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X