Vous êtes sur la page 1sur 18

IC/UNSA Calculo Computarizado de Estructuras

Científicos e Ingenieros Prefieren el MATLAB


Por: Prof. Fidel Copa Pineda, IC/UNSA

1.1 Introducción
El entorno MATLAB (MATrix LABoratory) es un software cuya marca comercial es
de MathWorks, Inc., Se trata de un sistema de programación integrado, incluyendo
interfaces gráficas y un gran número de cajas de herramientas especializadas. El
MATLAB es usado ampliamente por ingenieros y científicos.

En esta sección se presentan algunas nociones básicas necesarias para la comprensión


del MATLAB, los ejemplos pueden ser copiados y pegados al editor del MATLAB para
su aplicación con el interpretador o. Un estudio más profundo de MATLAB puede
obtenerse a partir de muchos libros de MATLAB aplicado a la ingeniería y la ayuda
muy útil de MATLAB.
1.2 Matrices
Las matrices son el objeto fundamental de MATLAB y son particularmente útiles en la
ingeniería. Las matrices pueden ser creados en MATLAB de muchas formas, la más
simple obtenido por los comandos

>> a=[1 2; 3 4]
a=
1 2
3 4

Tenga en cuenta el punto y coma al final de cada línea separa las filas matriz. También
podemos generar matrices por funciones predefinidas, tales como matrices aleatorias

>> rand(2)
ans =
0.8147 0.1270
0.9058 0.9134

Matriz aleatoria rectangular


>> rand(2,4)
ans =
0.5144 0.5880 0.1999 0.7487
0.8843 0.1548 0.4070 0.8256

Matriz diagonal
>> eye(2)

ans =
1 0
0 1

Fidel Copa Pineda 1


IC/UNSA Calculo Computarizado de Estructuras
Matriz de ceros
>> zeros(2)
ans =
0 0
1 0

Matriz de ones
>> ones(2)
ans =
1 1
1 1
1.3 Operaciones matriciales
Podemos sumar, restar, multiplicar y adaptar matrices. Por ejemplo, podemos obtener
una matriz: c = a + b, por los siguientes comandos

>> a=rand(2,4)
a=
0.7900 0.5341 0.1117 0.6787
0.3185 0.0900 0.1363 0.4952

>> b=rand(2,4)
b=
0.1897 0.1476 0.8507 0.9296
0.4950 0.0550 0.5606 0.6967

>> c=a+b
c=
0.9797 0.6817 0.9624 1.6083
0.8135 0.1449 0.6969 1.1918
1.4 declaraciones (Statements)
Las declaraciones son operadores, funciones y variables, siempre produciendo una
matriz que puede ser utilizado más tarde. Algunos ejemplos de declaraciones:

>> a=7
a=
7

>> b=2*a
b=
14

>> e=2*magic(2)
e=
2 6
8 4

Sintaxis
M = magic(n)

Fidel Copa Pineda 2


IC/UNSA Calculo Computarizado de Estructuras

Descripción
M = magic (n), devuelve una matriz n-by-n construida a partir de los enteros 1 a n^2
cuyas sumas de fila y columna son iguales. El orden n debe ser un escalar mayor o igual
que 3.

>> magic(2)
ans =
1 3
4 2

>> magic(3)
ans =
8 1 6
3 5 7
4 9 2

Los valores de los números son de acuerdo al tamaño del orden por ejemplo n=3, por
tanto la matriz es cuadrada de 3x3 = 9 y se ensambla la matriz con los números del 1 al
9, y la suma de cada fila siempre da 15 del mismo modo las columnas.

1.5 Funciones matriciales y ensamble de matrices en base a submatrices


Algunas funciones matriciales útiles se dan en la tabla 1.1

Tabla 1.11 Algunas funciones útiles para matrices


eye Identidad
zeros Una matriz de ceros
ones Una matriz de unos
diag Crea o extrae la diagonal
rand matriz aleatoria
magic Matriz mágica (1;nxn)

Algunos ejemplos de estas funciones se dan en los siguientes comandos (aquí para
construir matrices por bloques, es decir, ensamble de la matriz en base a submatrices)

>> [diag(eye(2)), eye(2), rand(2)]


ans =
1.0000 1.0000 0 0.0005 0.6126
1.0000 0 1.0000 0.8654 0.9900

Ensamble una matriz en base a submatrices

>> a
a=
1 2 3
4 5 6
7 8 9

>> b = [a, zeros(3,2); zeros(2,3), ones(2)]

Fidel Copa Pineda 3


IC/UNSA Calculo Computarizado de Estructuras

b=
1 2 3 0 0
4 5 6 0 0
7 8 9 0 0
0 0 0 1 1
0 0 0 1 1

1.6 Los condicionales, if y switch

A menudo una función necesita diversificarse en base a las condiciones de tiempo de


ejecución. MATLAB ofrece estructuras de este similares a los de la mayoría de los
lenguajes. He aquí un ejemplo que ilustra la mayoría de las características de sí.

x=0;
if x==0
disp('Bad input!')
elseif max(x) > 0
y = x+1;
else
y
end

Bad input!

unid='A'
switch unid
case 'A'
disp('Se eligio A')
case 'B'
disp('se eligio A')
otherwise
disp('no se completo')
end

Se eligio A

1.7 Lazos: for y while


Muchos programas de ingeniería requieren iteración, o la ejecución de la repetición de
un bloque de instrucciones. Una vez más, MATLAB es similar a otros idiomas aquí.
Este código de cálculo de los 8 primeros números de la serie de Fibonacci ilustra el tipo
más común de para / final del bucle:

>> f=[1 2]
f=
1 2

>> for i=3:8;f(i)=f(i-1)+f(i-2);end;


>> f
f=
1 2 3 5 8 13 21 34

Fidel Copa Pineda 4


IC/UNSA Calculo Computarizado de Estructuras

>> for i=0:5:20, i, end

i=
0

i=
5

i=
10

i=
15

i=
20

El bucle condicional, itera mientras se cumpla la condición, ejemplo

>> x=36; while x>1; x=x/3, end


x=
12

x=
4

x=
1.3333

x=
0.4444

1.8 Relaciones
Relaciones en MATLAB son mostradas en la tabla 1.2.

Note la diferencia entre ‘=’ e igual lógico ‘==’. El operador lógico esta dado en
la tabla 1.3. El resultado es 0 (falso) o 1 (verdadero), como en

>> 3<5
ans =
1
>> 3>5
ans =
0
>> 3==5
ans =
0

Fidel Copa Pineda 5


IC/UNSA Calculo Computarizado de Estructuras
Tabla 1.2 Algunas relaciones de operadores
< Less than
> Greater than
<= Less or equal than
>= Greater or equal than
== Equal to
∼= Not equal

Tabla 1.3 Operador Lógico


& and
| or

∼ not

>> a=rand(4), b=triu(a), a==b

a=
0.8147 0.6324 0.9575 0.9572
0.9058 0.0975 0.9649 0.4854
0.1270 0.2785 0.1576 0.8003
0.9134 0.5469 0.9706 0.1419

b=
0.8147 0.6324 0.9575 0.9572
0 0.0975 0.9649 0.4854 Matriz triangular superior matriz up
0 0 0.1576 0.8003
0 0 0 0.1419

ans =
1 1 1 1
0 1 1 1
0 0 1 1
0 0 0 1

1.9 Relación Escalar

>> a=rand(3,4)

a=
0.4387 0.7952 0.4456 0.7547
0.3816 0.1869 0.6463 0.2760
0.7655 0.4898 0.7094 0.6797

Fidel Copa Pineda 6


IC/UNSA Calculo Computarizado de Estructuras
Table 1.4 Funciones escalares
sin asin exp abs round
cos acos log sqrt floor
tan atan rem sign ceil

>> a=rand(2,3)
a=
0.8909 0.5472 0.1493
0.9593 0.1386 0.2575

>> b=sin(a)
b=
0.7776 0.5203 0.1487
0.8188 0.1382 0.2547

>> c=sqrt(b)
c=
0.8818 0.7213 0.3857
0.9049 0.3717 0.5047

1.10 Funciones vectoriales


Funciones de MATLAB Sum operan sobre vectores solamente, tales como los
ilustrados en la tabla 1.5.

Tabla 1.5 Función Vectorial


max sum median any
min prod mean all

Considere por ejemplo vector X = 1: 10. La suma, la media y los valores máximos son
evaluados como

>> x=1:10
x=
1 2 3 4 5 6 7 8 9 10

>> sum(x)
ans =
55

>> mean(x)
ans =
5.5000

1.11 Funciones matriciales


Algunas funciones de matriz importantes se enumeran en la tabla 1.6.

Tabla 1.6 Matriz de funciones


eig Eigenvalues and eigenvectors Valores propios y vectores propios
chol Cholesky factorization factorización Cholesky
inv Inverse inversa

Fidel Copa Pineda 7


IC/UNSA Calculo Computarizado de Estructuras
lu LU decomposition descomposición LU
qr QR factorization factorización QR
schur Schur decomposition Schur descomposición
poly Characteristic polynomial polinomio característico
det Determinant Determinante
size Size of a matrix Tamaño de una matriz
norm 1-norm, 2-norm, F-norm, ∞-norm 1-norma, 2-norma, F-norma, ∞-norma
cond Conditioning number of 2-norm número acondicionado de 2-norma
rank Rank of a matrix Rango de una matriz

En algunos casos estas funciones pueden utilizar más de un argumento de salida, como
en

>> A=rand(2)
A=
0.1966 0.6160
0.2511 0.4733

Si queremos obtener los valores propios solamente,

>> y=eig(A)
y=
-0.0820
0.7519

Si queremos obtener los vectores propios y valores propios de la matriz A

>> [V,D]=eig(A)
V=
-0.9112 -0.7428
0.4120 -0.6695

D=
-0.0820 0
0 0.7519

OPERADORES ARITMÉTICOS
MATLAB puede operar con matrices por medio de operadores y por medio de
funciones. Se han visto ya los operadores suma (+), producto (*) y traspuesta ('), así
como la función invertir inv( ).

Fidel Copa Pineda 8


IC/UNSA Calculo Computarizado de Estructuras
Tabla 1.6b Los operadores matriciales de MATLAB son los siguientes:
+ adición o suma
– sustracción o resta
* multiplicación
' traspuesta
^ potenciación
\ división-izquierda
/ división-derecha
.* producto elemento a elemento
./ y .\ división elemento a elemento
.^ elevar a una potencia elemento a elemento

>> A=[1 2;-1 2], b=[2;1],x=A\b


A=
1 2
-1 2
b=
2
1
x=
0.5000
0.7500
1.12 Submatrices
En MATLAB que es posible manipular matrices con el fin de hacer que el código más
compacto o más eficiente. Por ejemplo, usando el colon podemos generar vectores,
como en

>> x=10:0.5:13

x=
10.0000 10.5000 11.0000 11.5000 12.0000 12.5000 13.0000

>> x=0:pi/4:pi

x=
0 0.7854 1.5708 2.3562 3.1416

>> b=sin(x)
b=
0 0.7071 1.0000 0.7071 0.0000

>> [x' b']

ans =
0 0
0.7854 0.7071
1.5708 1.0000

Fidel Copa Pineda 9


IC/UNSA Calculo Computarizado de Estructuras
2.3562 0.7071
3.1416 0.0000

Este tipo de programación por vectorización es bastante eficiente, no se utilizan ciclos for/end.
Esta eficiencia se puede ver en la generación de una tabla de senos,

>> a=rand(2,3)
a=
0.8407 0.8143 0.9293
0.2543 0.2435 0.3500

>> a(2,2)
ans =
0.2435

>> a=rand(2,3)

a=
0.3517 0.5853 0.9172
0.8308 0.5497 0.2858

>> a(2,2)
ans =
0.5497

>> a(1:2,2:3)
ans =
0.5853 0.9172
0.5497 0.2858

>> a(1,end)
ans =
0.9172

>> a(1,:)
ans =
0.3517 0.5853 0.9172

>> a(:,3)
ans =
0.9172
0.2858

Es interesante notar que las matrices se almacenan en la memoria de forma lineal, a partir de
la primera dimensión, segundo, y así sucesivamente. Así podemos acceder a los vectores, de
hecho, por un solo índice, como se muestra a continuación.

a=
0.3517 0.5853 0.9172
0.8308 0.5497 0.2858

>> a(1)

Fidel Copa Pineda 10


IC/UNSA Calculo Computarizado de Estructuras
ans =
0.3517

>> a(2),a(3),a(4),a(5)
ans =
0.8308
ans =
0.5853
ans =
0.5497
ans =
0.9172

Otra forma de introducir los subíndices y obtener los elementos de la matriz

>> a([1 2 3 4 5 6])

ans =

0.3517 0.8308 0.5853 0.5497 0.9172 0.2858

>> a(:)
ans =
0.3517
0.8308
0.5853
0.5497
0.9172
0.2858

Operaciones con elementos de las matrices

>> a=rand(2,3)
a=
0.7572 0.3804 0.0759
0.7537 0.5678 0.0540

>> b=rand(1,3)
b=
0.5308 0.7792 0.9340

>> a(1,:)=b
a=
0.5308 0.7792 0.9340
0.7537 0.5678 0.0540

>> a(2,:)=0
a=
0.5308 0.7792 0.9340
0 0 0

>> a(2,3)=100

Fidel Copa Pineda 11


IC/UNSA Calculo Computarizado de Estructuras
a=
0.5308 0.7792 0.9340
0 0 100.0000

Note en el ejemplo como incrementa automáticamente el tamaño de la matriz

>> a(3,2)=20
a=
0.5308 0.7792 20.0000
0 0 100.0000
0 20.0000 0
1.12 indexación Lógica
En MATLAB que es posible

a=
0.5308 0.7792 20.0000
0 0 100.0000
0 20.0000 0

>> a>5
ans =
0 0 1
0 0 1
0 1 0

Indexación Lógica surgen de relaciones lógicas, resultando en una matriz lógica, con elementos
0 ó 1.

>> a(ans)=7
a=
0.5308 0.7792 7.0000
0 0 7.0000
0 7.0000 0

Esto será muy útil en los cálculos de elementos finitos, en particular cuando se imponen
condiciones de contorno.

1.14 M-archivos, scripts y funciones


Un archivo M es un archivo de texto plano con los comandos de MATLAB, guardados
con la extensión .m. Los archivos M pueden ser secuencias de comandos de funciones.
Al utilizar el editor de MATLAB podemos insertar comentarios o declaraciones y luego
guardar o compilar el archivo-m. Tenga en cuenta que el signo de porcentaje%
representa un comentario. Ninguna declaración después de este signo será ejecutada.
Los comentarios son muy útiles para documentar el archivo.

M-archivos son útiles cuando el número de declaraciones es grande, o cuando se quiere


ejecutarlo en una etapa posterior, o con frecuencia, o incluso para ejecutarlo en segundo
plano. Un ejemplo simple de una secuencia de comandos es la siguiente.

a=rand(3,4);
b=sin(a);

Fidel Copa Pineda 12


IC/UNSA Calculo Computarizado de Estructuras

Funciones
Actúan como subrutinas en Fortran, donde es un conjunto particular de tareas realizado.
Una función típica se da a continuación, donde en la primera línea que deberíamos
nombre a la función y dar los parámetros de entrada (m, n, p) entre paréntesis y la
parámetros de salida (a, b, c) en paréntesis cuadrados.

function [a,b,c] = fnombre(m,n,p)

1.15 Graphics

MATLAB le permite producir gráficos de una manera sencilla, ya sea ploteos en 2D o


3D.
1.15.1 Plot 2D
Usando el comando plot podemos producir plot 2D simples en una figura, utilizando
dos vectores con coordenadas x e y. Un ejemplo sencillo

x=-4:0.02:4; y=sin(x); plot(x,y)

Table 1.7 Algunos comandos gráficos


Title Title título
xlabel x-axis legend la leyenda del eje x
ylabel y-axis legend leyenda eje y
Axis([xmin,xmax,ymin,ymax]) Sets limits to axis Establece límites al eje
Axis auto Automatic limits límites automáticos
Axis square Same scale for both axis Misma escala para ambos ejes
Axis equal Same scale for both axis Misma escala para ambos ejes
Axis off Removes scale elimina incrustaciones
Axis on Scales again Escalas de nuevo

>> x=0:.01:2*pi; y1=sin(x); y2=sin(2*x); y3=sin(4*x);


>> plot(x,y1,’—‘,x,y2,’:’,x,y3,’+’)

Ejemplo
Crear un archivo de comandos y escriba el siguiente código -
x = [0 : 0.01: 10];

y = exp(-x).* sin(2*x + 3);

plot(x, y), axis([0 10 -1 1])

Fidel Copa Pineda 13


IC/UNSA Calculo Computarizado de Estructuras
Cuando se ejecuta el archivo, MATLAB genera el siguiente gráfico -

Generación de sub-graficas

Cuando se crea una serie de diagramas en la misma figura, cada una de estos
diagramas se llama un subplot. El comando trama secundaria se utiliza para la
creación de subplot.

Sintaxis del comando es

subplot(m, n, p)

donde, m y n son el número de filas y columnas de la matriz de la trama y p


especifica dónde poner un diagrama en particular.

Ejemplo.-
Graficar las dos funciones siguientes:
y = e−1.5xsin(10x)

y = e−2xsin(10x)

Crear un archivo de comandos y escriba el siguiente código:

x = [0:0.01:5];

y = exp(-1.5*x).*sin(10*x);

subplot(1,2,1)

plot(x,y), xlabel('x'),ylabel('exp(–1.5x)*sin(10x)'),axis([0 5 -1 1])

y = exp(-2*x).*sin(10*x);

subplot(1,2,2)

plot(x,y),xlabel('x'),ylabel('exp(–2x)*sin(10x)'),axis([0 5 -1 1])

Cuando se ejecuta el archivo, MATLAB genera el siguiente gráfico

Fidel Copa Pineda 14


IC/UNSA Calculo Computarizado de Estructuras

1.15.2 Plot 3D
Sintaxis

plot3(X1,Y1,Z1,...)
plot3(X1,Y1,Z1,LineSpec,...)
plot3(...,'PropertyName',PropertyValue,...)
plot3(axes_handle,...)
h = plot3(...)

Descripción
The plot3 function displays a three-dimensional plot of a set of data points.

plot3(X1,Y1,Z1,...), where X1, Y1, Z1 are vectors or matrices, plots one or more lines in three-
dimensional space through the points whose coordinates are the elements of X1, Y1, and Z1.

plot3(X1,Y1,Z1,LineSpec,...) creates and displays all lines defined by


the Xn,Yn,Zn,LineSpec quads, where LineSpec is a line specification that determines line style,
marker symbol, and color of the plotted lines.

plot3(...,'PropertyName',PropertyValue,...) sets line properties to the specified property


values for all the charting lines created by plot3. See Chart Line Properties for a description of the
properties you can set.

plot3(axes_handle,...) plots into the axes specified by axes_handle instead of into the current
axes (gca). The option, axes_handle can precede any of the input combinations in the previous
syntaxes.

h = plot3(...) returns a column vector of charting line handles, with one handle per object.

Fidel Copa Pineda 15


IC/UNSA Calculo Computarizado de Estructuras
Ejemplos
Dibuja una Helicoide en 3D

Plot 3-D de la hélice


Definir t como valores entre 0 @ 6π. Definir st y ct como vectores de valores de seno y coseno. Trazar
una hélice de 3-D.

sx(a) = 𝑎 ∙ 𝑠𝑒𝑛(𝑎)
cy(a) = 𝑎 ∙ 𝑐𝑜𝑠(𝑎)
z(a) = 𝑎

a = 0:pi/60:6*pi;
sx1 = a.*sin(a);
cy1 = a.*cos(a);
z1 = a;
sx2 = a/5.*sin(a);
cy2 = 1.5*a.*cos(a);
z2 = a/1.5;
figure
plot3(sx,cy,z1,sx2,cy2,z2)

Ejemplos de Lazos y archivos

ach loop requires the end keyword.


It is a good idea to indent the loops for readability, especially when they are nested (that is,
when one loop contains another loop):
A = zeros(5,100);
for m = 1:5
for n = 1:100
A(m, n) = 1/(m + n - 1);
end
end
You can programmatically exit a loop using a break statement, or skip to the next iteration of a
loop using a continue statement. For example, count the number of lines in the help for
the magic function (that is, all comment lines until a blank line):
fid = fopen('magic.m','r');
count = 0;
while ~feof(fid)
line = fgetl(fid);
if isempty(line)
break
elseif ~strncmp(line,'%',1)

Fidel Copa Pineda 16


IC/UNSA Calculo Computarizado de Estructuras
continue
end
count = count + 1;
end
fprintf('%d lines in MAGIC help\n',count);
fclose(fid);

Fidel Copa Pineda 17


IC/UNSA Calculo Computarizado de Estructuras

Fidel Copa Pineda 18

Vous aimerez peut-être aussi