Globedia.com

×

Error de autenticación

Ha habido un problema a la hora de conectarse a la red social. Por favor intentalo de nuevo

Si el problema persiste, nos lo puedes decir AQUÍ

×
×
Recibir alertas

¿Quieres recibir una notificación por email cada vez que Demóstenes escriba una noticia?

Ciclos y Gráficos usando Matlab

14/05/2010 22:52 0 Comentarios Lectura: ( palabras)

El tipo de datos fundamental en Matlab (y en Octave) es la matriz y existen muchísimas funciones que manipulan este tipo de dato. Pero hoy nos vamos a ocupar de algo menos común y más algorítmico: como realizar ciclos en Matlab/Octave y como aprovecharlos para realizar gráficos de diferentes funciones.

Algunos conceptos previos:

Operador ':'

Se trata de una de las formas de definir vectores y matrices más usada y más fácil de utilizar, dada la rápida visualización de la salida sin necesidad de ver el resultado:

octave> x=1:1:10;

octave> x

x =

1 2 3 4 5 6 7 8 9 10

De alguna manera, el : representa un rango, en este caso desde 1 hasta 10 y en el centro se coloca el paso (o sea con que incremento se llega desde 1 hasta 10). Por defecto el paso es 1 pero puede ser cualquier número entero o real, positivo o negativo:

octave> x=10:-1:1

x =

10 9 8 7 6 5 4 3 2 1

Gráficos

plot() crea un gráfico a partir de vectores y/o columnas de matrices, con escalas lineales sobre ambos ejes.

Por ejemplo, vamos a hacer un gráfico de la función 0.1 * |x| * sin(x)

Graficaremos usando valores para x entre -2pi y 2pi

  • Generamos el vector x entre -2p y 2pi

octave> x = -2*pi:0.1:2*pi;

  • Dibujamos:

octave> plot(x, abs(0.1*x) .* sin(x));

.* Recordar que * es el producto de matrices. No funcionará con vectores, mientras que .* es el producto miembro a miembro de los elementos de cada vector

fig1

Generalicemos nuestra función: a * |x| * sin(x) y graficamos dando 3 diferentes valores a la variable a. Por ejemplo:

octave> plot(x, abs(0.1*x) .* sin(x));

octave> plot(x, abs(0.2*x) .* sin(x));

octave> plot(x, abs(0.3*x) .* sin(x));

¿Cómo hacemos si queremos ver los tres gráficos en una misma pantalla?

octave> hold on;

hold es una función que permite agregar gráficos a una figura ya existente, respetando su contenido

Otras funciones útiles:

grid: Muestra una cuadrícula en la pantalla del gráfico. Usando grid  on se activa y con off se desactiva title('titulo'): Coloca un título al gráfico xlabel('leyeda x'): Coloca una leyenda al eje x ylabel('leyeda y'): Coloca una leyenda al eje y

Por defecto, el color de las líneas del gráfico es rojo, pero eso se puede cambiar, así como también el estilo de las líneas. En las siguientes tablas se muestran las posibilidades de colores y estilos de líneas:

Símbolo

Color

y

Amarillo

m

Magenta

c

Celeste

r

Rojo

g

Verde

b

Azul

w

Blanco

k

Negro (por defecto)

Símbolo

Tipo de línea

.

Puntos

o

Con círculos

x

Marcas en x

+

Marcas en +

*

Marcas en *

s

Marcas cuadradas

d

Marcas en diamante

^

Triangulo apuntando arriba

Dibujemos, finalmente las 3 funciones en la misma hoja gráfica:

octave> hold on;

octave> plot(x, abs(0.1*x) .* sin(x));

octave> plot(x, abs(0.2*x) .* sin(x), 'r+');

octave> plot(x, abs(0.3*x) .* sin(x), 'mo');

fig2

Sentencia 'for'

Repite una serie de sentencias un número determinado de veces, sin importar los procesos que ocurran dentro, por lo que la única manera de salir del bucle es esperar que el ciclo acabe. La sintaxis de la sentencia sería:

for var = expression

                body

end

Cuando var llega al valor de expression, el ciclo se detiene.

Para el caso de nuestra función donde 'a' tomaba 3 valores diferentes: a * |x| * sin(x) podemos realizar el siguiente ciclo:

octave> close all;

octave> hold on;

octave> for a = 0.1:0.1:0.3

octave> plot(x, abs(a*x) .* sin(x));

octave> end;

Podíamos haber usado una sentencia while, cuya sintaxis es:

while (condition)

              body

end

El grupo de sentencias de body se repite mientras condition sea verdadera. Veamos un ejemplo usando for y usando while. Supongamos que necesitamos graficar la función de una recta para diferentes valores de x. Es decir, dado f(x)= 6x + 15, para 1000 valores diferentes de x (500 positivos y 500 negativos), realizamos el gráfico. El programa Matlab/Octave que realiza esto sería:

close all;

a=rand(1, 500)*100;

b=-rand(1, 500)*100;

vector=[a b];

hold on;

for x=vector;

        plot(x, 6*x + 15, '.')

end;

Realizamos el mismo programa usando while:

close all;

a=rand(1, 500)*100;

b=-rand(1, 500)*100;

vector=[a b];

hold on;

i=1;

while i< =1000 < br />         plot(vector(i), 6*vector(i) + 15, '.')

          i=i+1;

end;

Notar que estamos graficando usando un punto en cada ciclo, para que se vea bien el resultado. El gráfico, para ambos casos, queda:

recta

Cuantos más puntos se toman, se verá más nítida la figura de la recta


Sobre esta noticia

Autor:
Demóstenes (15 noticias)
Fuente:
algoritmosyobjetos.blogspot.com
Visitas:
19503
Licencia:
Copyright autor
¿Problemas con esta noticia?
×
Denunciar esta noticia por

Denunciar

Comentarios

Aún no hay comentarios en esta noticia.