Está en la página 1de 12

Universidad Industrial de Santander

Escuela de Ingenierías Eléctrica, Electrónica y de Telecomunicaciones


Métodos Numéricos
Taller: Introducción a MATLAB

Introducción
En este laboratorio veremos cómo escribir vectores, funciones, programas y gráficos de trama en
MATLAB.

Iniciando MATLAB
En esta sección, veremos algunos comandos de MATLAB. Estos son válidos para la mayoría (o
todas) las versiones de MATLAB, y muchos de ellos son válidos para el clon de MATLAB llamado
Octave.

1. Inicie MATLAB. La ventana predeterminada se divide en tres paneles. El de la izquierda, el


panel Carpeta actual, muestra la estructura de directorios de su directorio de trabajo actual. El
de la derecha, el panel Espacio de trabajo, muestra las variables que se han creado en la
sesión actual junto con sus tipos de datos y valores. El que está en el medio, el panel de la
ventana de comandos, es donde escribirá los comandos de MATLAB. En el lado izquierdo de
esta ventana de comandos, en algún lugar, aparecerán los símbolos >>. Sus comandos
escritos van al lado de este mensaje.

MATLAB almacena todos los comandos que escribe en la ventana de comandos para que,
incluso cuando la cierre y vuelva a abrir en otro momento, pueda acceder a los comandos que
escribió allí. Puede acceder a estos simplemente presionando las teclas de flecha hacia arriba
y hacia abajo en su teclado.

2. Es una buena idea organizar su trabajo en directorios (o carpetas). Para ello, use el panel de
ventana Directorio actual de MATLAB para navegar dentro de sus documentos y carpetas.
Tenga en cuenta que si la ubicación de los scripts que quiere ejecutar no coincide con el
directorio actual, su script no será ejecutado. Siempre podemos encontrar el nombre del
directorio actual con el comando ​pwd.

3. El panel Historial de comandos es conveniente para recordar qué comandos ha utilizado


recientemente. Puede recuperar comandos anteriores usando la tecla de flecha hacia arriba y
luego puede cambiarlos usando las teclas de flecha derecha e izquierda.

Matrices
Las matrices son los elementos básicos del entorno MATLAB. Una matriz es un arreglo bidimensional
que consta de ​m filas y ​n columnas. Los vectores columna (n = 1) y los vectores fila (m = 1) son
casos especiales. En esta sección, ilustraremos cómo aplicar diferentes operaciones en matrices. Se
discuten los siguientes temas: vectores y matrices en MATLAB, el inverso de la matriz, los
determinantes y la manipulación de la matriz. MATLAB admite dos tipos de operaciones, conocidas
como operaciones matriciales (​matrixoperations)​ y operaciones sobre arreglos (​arrayoperations)​. Las
operaciones matriciales se discutirán primero.

Generación de Matrices

Las matrices son fundamentales para MATLAB, por lo tanto, debemos familiarizarnos con su
generación y manipulación. Las matrices en MATLAB se pueden generar de varias maneras y el
propósito de esta sección es mostrar cómo crear vectores y matrices. Un vector es un caso especial
de una matriz. Como se discutió anteriormente, una matriz de dimensión 1 x n se llama vector fila,
mientras que una matriz de dimensión m x 1 se llama vector columna. Los elementos de un vector en
MATLAB están encerrados entre corchetes y están separados por espacios o por comas. Por
ejemplo, para ingresar un vector de fila, v, escriba

>> v = [1 4 7 10 13]
v =
1 4 7 10 13

Los vectores columna se crean de manera similar, sin embargo, se usa el punto y coma (;) para
separar los componentes de un vector de columna.

>> w = [1;4;7;10;13]
w =
1
4
7
10
13

Por otro lado, un vector de fila se puede convertir en un vector de columna utilizando el operador de
transposición. El operador de transposición se denota con un apóstrofe o una comilla simple (’).

>> w = v’
w =
1
4
7
10
13

Operaciones aritméticas entre matrices

MATLAB permite realizar operaciones aritméticas en matrices. Así:


>> A+B o B+A es válido si A y B son del mismo tamaño
>> A*B es válido si el número de columnas de A es igual al número de
filas de B
>> A^2 es válido si A es una matriz cuadrada y es igual a A*A
>> k*A o A*k multiplica cada elemento de A por k

Operaciones aritméticas entre arreglos

Por otro lado, las operaciones aritméticas sobre arreglos, o ​arrayoperations​, se realizan elemento por
elemento. El carácter del punto, ., las distingue de las operaciones matriciale. Sin embargo, dado que
las ​matrixoperations y ​arrayaoperations son las mismas para sumas y restas, los pares de caracteres
(.+) y (.-) no se usan. La pricipales ​arrayoperations ​son:

>> A.*B es equivalente a un producto punto.


>> A./B divide cada elemento de A, por un elemento de B
>> A.^2 eleva al cuadrado cada elemento de A y es igual a A.*A

Resolviendo ecuaciones lineales

Uno de los problemas más frecuentes en la computación científica es la solución de sistemas de


ecuaciones lineales simultáneas. Con la notación matricial, un sistema de ecuaciones lineales
simultáneas se escribe
Ax = b

donde hay tantas ecuaciones como desconocidas. A es una matriz cuadrada dada de orden n, b es
un vector de columna dado de n componentes y x es un vector de columna desconocido de n
componentes. En álgebra lineal, aprendemos que la solución a este sistema se puede escribir como
x = A−1 * b

donde A​-1​ es el inverso de A.

Por ejemplo, considere el siguiente sistema de ecuaciones lineales

x + 2y + 3z = 1
4x + 5y + 6z = 1
7x + 8y = 1
Hay dos maneras de resolver esto con MATLAB. La primera es usar la matriz inversa, ​inv:

>> A = [1 2 3; 4 5 6; 7 8 0];
>> b = [1; 1; 1];
>> x = inv (A) * b
x =
-1.0000
1.0000
-0.0000

La segunda es usar el operador de barra diagonal inversa. El algoritmo numérico detrás de este
operador es computacionalmente eficiente. Esta es una forma numéricamente confiable de resolver
un sistema de ecuaciones lineales utilizando un proceso bien conocido de eliminación gaussiana.

>> A = [1 2 3; 4 5 6; 7 8 0];
>> b = [1; 1; 1];
>> x = A\b
x =
-1.0000
1.0000
-0.0000

Funciones matriciales

MATLAB proporciona muchas funciones matriciales para diversas manipulaciones de matrices y


vectores; vea la siguiente tabla.

det determinante

diag Matrices diagonales y diagonales de matrices

eig Valores y vectores propios

inv Matriz inversa

norm Norma de matrices y vectores

rank Número de filas o columnas linealmente independientes

Puede usar la ayuda en línea de MATLAB para encontrar cómo usar estas funciones.

Linspace y Logspace

Las funciones ​linspace y logspace proporcionan otras herramientas útiles para generar vectores de
puntos espaciados. La función linspace genera un vector de fila de puntos igualmente espaciados.
Tiene la forma ​linspace (x1, x2, n)​ que genera n puntos entre x1 y x2. Por ejemplo,

>> linspace (0, 1, 6)


ans =
0 0.2000 0.4000 0.6000 0.8000 1.0000

Si se omite la n, la función genera automáticamente 100 puntos.


La función ​logspace genera un vector de fila que está logarítmicamente igualmente espaciado. Tiene
la forma ​logspace(x1, x2, n) que genera n puntos logarítmicamente equidistantes entre las décadas
10​X1​ y 10​X2​. Por ejemplo,

>> logspace (-1, 2, 4)


ans = 0.1000 1.0000 10.0000 100.0000

Si se omite n, genera automáticamente 50 puntos.

Creando Gráficas Simples


El procedimiento básico para graficar en MATLAB, por ejemplo en 2D, es tomar un vector de
coordenadas X, X = (x1, ... xn) y un vector de coordenadas Y, Y = (y1, ...., yN ); ubicar los puntos (xi,
yi), con i = 1,2, ..., n y luego unirlos por líneas rectas. Necesita preparar el vector X y el vector Y en la
misma forma matricial; a saber, X e Y son vectores filas o vectores columnas de la misma longitud. El
comando MATLAB para trazar un gráfico es plot (X, Y). Los vectores X = (1,2,3,4,5,6) e Y = (3,
-1,2,4,5,1) producen la gráfica. En la ventana de comandos, escriba lo siguiente

>> X = [1 2 3 4 5 6];
>> Y = [3 -1 2 4 5 1];
>> plot (X,Y)

Esto producirá una gráfica así:

Figura 1: Gráfica de puntos unidos por una línea.

Si se quieren graficar los puntos representados por símbolos, se puede usar:

>> plot (x ,y , ’*’)


>> plot (x ,y , ’o’)
>> plot (x ,y , ’.’)
MATLAB le permite agregar etiquetas de eje y títulos. Por ejemplo, usando una gráfica de una onda
sinusoidal, agregue etiquetas de los ejes x e y. El siguiente código MATLAB se puede usar para
etiquetar el eje y titular el gráfico

>> xlabel (’x = 0:2\pi’)


>> ylabel (’Sine of x’)
>> title(’Plot of the Sine function’)

Figura 2: Gráfica con título y etiquetas en los ejes.

Funciones

Los datos como representación de una función

A menudo estamos interesados ​en una determinada función y = f (x), pero la única información que
tenemos sobre esta función es un conjunto discreto de datos (xi, yi). Al trazar los datos, como hicimos
anteriormente, se puede pensar en visualizar la función utilizando solo los datos. Más adelante
descubriremos que también podemos hacer otras cosas con la función, como diferenciar e integrar,
simplemente usando los datos disponibles. Los métodos numéricos, el tema de este curso, significa
hacer matemáticas por computadora. Dado que una computadora solo puede almacenar una
cantidad finita de información, casi siempre estaremos trabajando con un conjunto finito y discreto de
valores de la función (datos), en lugar de una fórmula para la función.
Funciones integradas

Si deseamos tratar con fórmulas para funciones, Matlab contiene una serie de funciones integradas,
incluidas todas las funciones habituales, como sin (), exp (), etc. El significado de la mayoría de ellas
es claro. La variable dependiente (entrada) siempre va entre paréntesis en Matlab. Por ejemplo

sin (pi)

debería devolver el valor de sen π, que por supuesto es 0 y

exp (0)

devolverá e​0​, que es 1. Más importante aún, las funciones integradas pueden operar no solo en
números únicos sino también en vectores.

>> x = linspace(0,2*pi,40)
>> y = sin(x)
>> plot(x,y)

El código anterior devolverá una gráfica de sen x en el intervalo [0, 2π].

Algunas de las funciones incorporadas en Matlab incluyen: cos (), tan (), sinh (), cosh (), log ()
(logaritmo natural), log10 () (log base 10), asin () (seno inverso) ), acos (), atan (). Para obtener más
información sobre una función, use el comando de ayuda; intente con

>> help plot

Programas en MATLAB
En Matlab, los programas se pueden escribir y guardar en archivos con un sufijo .m llamado M-files.
Vamos a ver cómo escribir nuestras propias funciones en archivos .m.

Programas de funciones

Comience haciendo clic en el nuevo icono del documento en la esquina superior izquierda de la
ventana de Matlab (parece una hoja de papel vacía). En la ventana del documento, escriba lo
siguiente:

function y = myfunc (x)


y = 2*x.^2 - 3*x + 1;
end

Guarde este archivo como: myfunc.m en su directorio de trabajo. Este archivo ahora se puede usar en
la ventana de comandos al igual que cualquier función de Matlab predefinida; en la ventana de
comando ingrese:
>> x = -2:.1:2; % Produces a vector of x values
>> y = myfunc (x); % Produces a vector of y values
>> plot (x,y)

Tenga en cuenta que el hecho de que usamos x e y en el programa de funciones y en la ventana de


comandos fue solo una coincidencia. De hecho, es el nombre del archivo myfunc.m lo que realmente
importaba, no cómo se llamaba nada en él.

Mire de nuevo el programa. Todos los programas de funciones son como este y sus elementos
esenciales son:

● Comience con la palabra función.


● Hay una entrada y una salida.
● La salida, el nombre de la función y la entrada deben aparecer en la primera línea.
● El cuerpo del programa debe asignar un valor a las variables de salida.
● El programa no puede acceder a las variables en el espacio de trabajo actual a menos que se
ingresen.
● Las variables internas dentro de una función no aparecen en el espacio de trabajo actual.

Las funciones pueden tener múltiples entradas, que están separadas por comas. Por ejemplo:

function y = myfunc2d (x,p)


y = 2*x.^p - 3*x + 1;
end

Las funciones pueden tener múltiples salidas, que se recopilan en un vector. Abra un nuevo
documento y escriba:

function [x2 x3 x4] = mypowers(x)


x2 = x.^2; x3 = x.^3; x4 = x.^4;
end

Guarde este archivo como mypowers.m. En la ventana de comandos, podemos usar los resultados
del programa para hacer gráficos:

>> x = -1:.1:1
>> [x2 x3 x4] = mypowers (x);
>> plot (x, x, ’black’, x, x2, ’blue’, x, x3, ’green’, x, x4, ’red’)

Comentarios del programa

Para los programas que tienen más de un par de líneas, es importante incluir comentarios. Los
comentarios permiten que otras personas sepan lo que hace su programa y también le recuerdan a sí
mismo lo que hace su programa si lo reserva y vuelve más tarde. Es mejor incluir comentarios no solo
en la parte superior de un programa, sino también con cada sección. En Matlab, todo lo que aparece
en una línea después de un % es un comentario.

Para una función, los comentarios deben al menos dar el propósito, las entradas y las salidas. Una
versión debidamente comentada de la función con la que comenzamos esta sección es:

function y = myfunc ( x )
% Computes the function 2 x ^2 -3 x +1
% Input : x -- a number or vector ;
% for a vector the computation is elementwise
% Output : y -- a number or vector of the same size as x
y = 2* x.^2 - 3*x + 1;
end

A menudo es útil incluir el nombre de la función al inicio del script. Por ejemplo:

% mygraphs
% plots the graphs of x , x ^2 , x ^3 , and x ^4
% on the interval [ -1 ,1]
% fix the domain and evaluation points
x = -1:.1:1;
% calculate powers
% x1 is just x
x2 = x.^2;
x3 = x.^3;
x4 = x.^4;
% plot each of the graphs
plot (x, x, ’black’, x, x2, ’blue’, x, x3, ’green’, x, x4, ’red’)

El comando de ayuda de Matlab imprime el primer bloque de comentarios de un archivo. Si


guardamos lo anterior como mygraphs.m y luego hacemos

help mygraphs

veremos en la ventana de comados:

mygraphs plots the graphs of x , x ^2 , x ^3 , and x ^4 on the interval [


-1 ,1]

Control de flujo y operadores


MATLAB es también un lenguaje de programación. Al igual que otros lenguajes de programación de
computadoras, MATLAB tiene algunas estructuras de toma de decisiones para el control de la
ejecución de comandos. Estas estructuras de flujo de control o toma de decisiones incluyen bucles
for, bucles while y construcciones if-else-end. Las estructuras de flujo de control a menudo se usan en
scripts y funciones. Al crear un archivo con la extensión .m, podemos escribir y ejecutar programas
fácilmente. En un programa simple como se muestra en los capítulos anteriores, los comandos se
ejecutan uno tras otro. Aquí presentamos la estructura de control de flujo que hace posible omitir
comandos o ejecutar un grupo específico de comandos.

La estructura "if ... end"

MATLAB admite las variantes de la construcción "if".


● if ... end
● if ... else ... end
● if ... elseif ... else ... end

La forma más simple de la declaración (if) es

if expression
statements
end

Algunos ejemplos basados en la fórmula cuadrática familiar se ven en los códigos a continuación.

(a) discr = b*b - 4*a*c;


if discr < 0
disp(Warning: discriminant is negative, roots are imaginary);
end

(b) discr = b*b - 4*a*c;


if discr < 0
disp(Warning: discriminant is negative, roots are imaginary);
else
disp(Roots are real, but may be repeated);
end

(c) discr = b*b - 4*a*c;


if discr < 0
disp(Warning: discriminant is negative, roots are imaginary;
elseif discr == 0
disp(Discriminant is zero, roots are repeated)
else
disp(Roots are real)
end
El ciclo “for … end”

En el ciclo for ... end, la ejecución de un comando se repite en un número fijo y predeterminado de
veces. La sintaxis es

for variable = expression


statements end

Un ejemplo es

for i = 1: 5 x = i*i end

El ciclo “while … end”

Este ciclo se usa cuando no se especifica el número de pasadas. El bucle continúa hasta que se
cumpla una condición establecida. El ciclo while tiene la forma:

x = 1
while x <= 10
x = 3*x
end

Es importante tener en cuenta que si la condición dentro del bucle no está bien definida, el bucle
continuará indefinidamente. Si esto sucede, podemos detener la ejecución presionando Ctrl-C.

Ejercicios
1. Escriba un programa de funciones bien comentado que grafica las funciones sin x, sin 2x, sin
3x, sin 4x, sin 5x y sen 6x en el intervalo [0, 2π] en un gráfico. Use un tamaño de paso
suficientemente pequeño para suavizar todos los gráficos. Entregue el programa y el gráfico.
2. Un circuito eléctrico simple que consiste en una resistencia, un condensador y un inductor. La
carga en el condensador q (t) en función del tiempo se puede calcular como

donde t = tiempo, q0 = la carga inicial, R = la resistencia, L = inductancia y C = Capacitancia.


Use MATLAB para generar una gráfica de esta función de t = 0 a 0.8, dado que q0 = 10, R =
60, L = 9 y C = 0.00005.
3. Si se aplica una fuerza F(N) para comprimir un resorte, su desplazamiento x(m) a menudo se
puede modelar por la ley de Hookes:
F = kx
donde k = la constante del resorte (N / m). La energía potencial almacenada en el resorte U (J)
se puede calcular como
U = 21 kx2
Se prueban cinco resortes y se compilan los siguientes datos:

F(N) 14 18 8 9 13

x(m) 0.013 0.02 0.009 0.010 0.012

Use MATLAB para almacenar F y x como vectores y luego calcule los vectores de las
constantes de resorte y las energías potenciales. Use la función max para determinar la
energía potencial máxima.

4. La curva de una mariposa está dada por las siguientes ecuaciones paramétricas:

Genere valores de x e y para valores de t de 0 a 100 con ∆t = 1/16 Construya gráficas de:
a. x e y versus t.
b. y versus x. Use ​subplot​ mostrar ambas gráficas en una sola.
Incluya títulos y etiquetas de eje.

También podría gustarte