viernes, 27 de enero de 2017

Funciones definidas a trozos en MATLAB

Hoy voy a hablar de una cosa que es muy pero que muy tonta pero que no sabía hacer y tuve que buscar en Internet:

Como representar funciones definidas a trozos en MATLAB.

Primero tenemos que hablar de los operadores lógicos. Ahora vamos a usar el concepto de que 'true'=1 y 'false'=0. Si tenemos en una ecuación una desigualdad que está multiplicando algo y si ésta desigualdad es verdad (porque se cumple) entonces ésta genera una valor 'true' y por lo tanto lo que multiplica esta desigualdad será multiplicado por '1'. Mientras que si la desigualdad no se cumple entonces nos devolverá un valor 'false' que es igual a '0' y por lo tanto todo lo que esté multiplicando a la desigualdad desaparecerá.

Después de esta pequeña introducción vamos a ver como hacerlo, el código es muy simple.
Primero debemos definir un variable que vamos a usar como abscisa, para ello usaremos un paso de 0,1. Esta variable la definimos en un intervalo por ejemplo 0 y 10. Por lo tanto tenemos que escribir la siguiente línea de código:

x = 0:0.1:10; (el formato es: comienzo_intervalo:paso:fin_intervalo)

Luego tenemos que definir la función a trozos que vamos a representar. En este caso representaremos ésta:


Para ello vamos a usar los operadores lógicos. Una cosa que hay que mencionar antes es que entre los operadores lógicos y la función hay que usar .* para que no se produzca ningún error:

f=(x<=1).*(-x+1)+(x>1).*log(x);

Ya sólo queda usar el comando para poder representar la función:

plot(x,f);

De tal forma que usando las siguientes líneas de código,

x = 0:0.1:10 ;
f = (x<=1).*(-x+1)+(x>1).*log(x) ;
plot(x,f) ;
grid on
xlabel('x')
ylabel('f(x)')

Obtenemos:


Como podemos observar cuando x<=1 sólo aparece el término -x+1 mientras que cuando x>1 sólo esta el término log(x).




4 comentarios:

  1. Hola! y que pasa si en una funcion a trozos sale ejem " 0 para otro t" ?
    como puedo escribir eso en matlab?

    ResponderEliminar
    Respuestas
    1. Debes buscar que intervalo de la variable es el que va a ser cero y lo escribes como en el ejemplo.

      Eliminar
  2. Sería interesante que explicaras cómo se hace para 3 o más tramos, ya que el código cambiaría y no es tan intuitivo.

    ResponderEliminar
  3. hey gracias me sirvió, saludosss!!!

    ResponderEliminar