0% encontró este documento útil (0 votos)
166 vistas

Introducción A La Programación en MatLab©

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
166 vistas

Introducción A La Programación en MatLab©

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 61

Introducción a la

Programación en MatLab ©

Esteban Reiner

1
Índice
• Entorno Matlab
• Formatos, Operadores y Comandos Básicos
• Manejo de Vectores
• Manejo de Matrices
• Entrada y Salida de Datos
• Control de Flujo
• Comandos Gráficos
• Ejemplos

2
Formatos de Salida
Estilo Resultado Ejemplo

short Punto decimal fijo con 4 dígitos después del punto decimal 3.1416
(por defecto)
long Punto decimal fijo con 15 dígitos después del punto decimal 3.141592653589793

short e Notación científica con 4 dígitos después del punto decimal 3.1416e+00

long e Notación científica con 15 dígitos después del punto decimal 3.141592653589793e+00

short g Elige el formato mas compacto entre short y short e con 4 3.1516
dígitos
long g Elige el formato mas compacto entre long y long e con 15 3.14159265358979
dígitos
short eng Notación científica corta con 4 dígitos después del punto 3.1416e+000
decimal y exponente múltiplo de 3
long eng Notación científica larga con 15 dígitos después del punto 3.14159265358979e+000
decimal y exponente múltiplo de 3
hex Representación en el sistema hexadecimal 400921fb54442d18

bank Formato de moneda con 2 dígitos después del punto decimal 3.14

rational Expresa los números racionales como cocientes de enteros 355/113

3
Operadores Aritméticos y
Expresiones Lógicas y de Relación
Operador Función Definición Operador Definición
+ plus Suma & y lógico
- minus Resta | o lógico
* mtimes Multiplicación < menor que
‘ transpose Transpuesta <= menor o igual que
^ mpower Potenciación > mayor que
\ mldivide División Izquierda >= mayor o igual que
/ mrdivide División Derecha == igual que
~= distinto que

4
Comandos Varios
Variables predefinidas:
MatLab tiene una serie de variables reservadas que tienen valores específicos:
i= unidad imaginaria, −1
pi = número π=3.1415927…..
Inf = infinito positivo = +∞
NaN = número indefinido (Not a Number)
eps = número flotante mas pequeño que maneja MatLab = 1/252 = 2.2204x10-16

Comandos de utilidad:
close all % cierra todas las ventanas con las figuras activas
clf % borra la figura actual pero deja la ventana que tenía la figura abierta
clear % limpia el Workspace
clc % Limpia el Command Window

5
Comandos Varios
Comandos de utilidad (cont.):
Si queremos que Matlab muestre en pantalla el valor de una variable pero no el nombre:
disp(var)
Si queremos que Matlab muestre en pantalla un texto cualquiera:
disp(‘texto a imprimir’)
Si queremos que Matlab deje una línea en blanco:
disp(‘ ’)
Ejemplo:
K=[20,-20;-20,20];
disp(‘----------Matriz de Rigidez----------’) ----------Matriz de Rigidez----------
disp(‘ ‘) 20 -20
disp(K) -20 20

6
Comandos Varios
Comandos de utilidad (cont.):
who % Lista los nombres de todas las variable activas al momento
Your variables are:
K
whos % Lista los nombres de todas las variable activas con su tamaño y tipo
Name Size Bytes Class Attributes
K 2x2 32 double

Comando num2str:
num2str(var) % convierte el valor numérico var en una variable alfanumérica
iter=7;
msg=[‘==> Numero de iteraciones = ‘,num2str(iter)]
msg =
'==> Numero de iteraciones = 7'

7
Manejo de Vectores
Creación de Vectores
• Vectores Filas: MATLAB va a mostrar:
vx=[2 6 3 -8 2] es igual a escribir vx =
vx=[2,6,3,-8,2] 2 6 3 -8 2
(,) =pasa la siguiente Columna

MATLAB va a mostrar:
• Vectores Columna: vy =
vy=[-1;2;4;-5;1] -1
(;) =pasa la siguiente Fila 2
4
Transponer un vector Fila -5
vy=[-1 2 4 -5 1]’ 1

8
Manejo de Vectores
Creación Automática de Vectores
• Vectores igualmente separados:
Comando:
linspace: (“linearly spaced”)

Ejemplo:
inf=-2 (límite inferior)
sup=4 (límite superior)
n=10 (número de puntos en el intervalo)

v=linspace(inf,sup,n) o directamente,
v=linspace(-2,4,10)

MATLAB va a mostrar:
v=
-2 -1.3333 -0.66667 0 0.66667 1.3333 2 2.6667 3.3333 4
9
Manejo de Vectores
Creación Automática de Vectores
• Vectores con un determinado incremento entre elementos:
Comando:
Valor inicial:incremento:valor_final
(:)= operador dos puntos (“colon operator”)

Ejemplos:
t0=0 (límite inferior)
tf=4 (límite superior)
delta=0.02 (número de puntos en el intervalo)
t=t0:delta:tf; (;)= supresión de resultados
t=0:0.02:4
Si se omite el número de puntos en el intervalo:
t1=0:4 % que sería igual a escribir t1=[0 1 2 3 4]

MATLAB va a mostrar:
t1 =
0 1 2 3 4
10
Manejo de Vectores
Operaciones con Vectores
• Producto escalar y vector: (*) • Producto de vectores: (*)
t1=[0 1 2 3 4]; vx=[2,6,3,-8,2]
vy=[-1;2;4;-5;1]
a=0.1;
P=vy*vx
x=a*t1
El resultado es: El resultado es:
t1 = P=
0 0.1 0.2 0.3 0.4 -2 -6 -3 8 -2
• Suma y Resta de Vectores: 4 12 6 -16 4
S2= 8 24 12 -32 8
S1=vx+vy’
-10 -30 -15 40 -10
S2=vx’+vy 1
2 6 3 -8 2
El resultado es: 8
P=vx*vy
S1= 7 El resultado es:
1 8 7 -13 3 -13 P=
3 64 σ5𝑖=1 𝑣𝑥 𝑖 ∗ 𝑣𝑦(𝑖)

11
Manejo de Vectores
Operaciones con Vectores
• Operación producto elemento a elemento: Operación división elemento a elemento :
(.*) (./)
a=[2,6,3,-8,2]; a=[2,6,3,-8,2];
b=[-1,2,4,-5,1] b=[-1,2,4,-5,1]
Se quiere hacer: Se quiere hacer :
Pp=[2*(-1),6*2,3*4,(-8)*(-5),2*1] Pp=[2/(-1),6/2,3/4,(-8)/(-5),2/1]
Se usará: Se usará :
Pp=a.*b Pp=a./b
El resultado es: El resultado es:
Pp = Pp =
-2 12 12 40 2 -2 3 0.75 1.6 2
 Los dos vectores deben tener el mismo
número de elementos
 Los dos vectores deben ser ambos filas o
columnas

12
Manejo de Vectores
Operaciones con Vectores
• Operación exponenciación elemento  Exponencial: (𝑒 𝑐(𝑖) )
a elemento: (.^)
c2=exp(c)
a=[2,6,3,-8,2];
c2 =
W=a.^2
8103.1 148.41 7.3891 2.7183 22026
El resultado es:
W=
4 36 9 64 4  Raíz cuadrada:
c3=sqrt(c)
• Función de vectores: c3 =
c=[9,5,2,1,10]; 3 2.2361 1.4142 1 3.1623
 Logaritmo:
c1=log(c)
c1 =
2.1972 1.6094 0.69315 0 2.3026

13
Manejo de Vectores
Operaciones con Vectores
• Función de vectores: • Función de vectores (cont.):
c=[9,5,2,1,10];  Ordenar (descendente):
 Ordenar (ascendente): c5=sort(c,’descend’)
c4=sort(c) c5 =
c4 = 10 9 5 2 1
1 2 5 9 10

Funciones trigonométricas:
c6=sin(c) % seno de cada elemento de c en radianes
c7=cos(c) % coseno de cada elemento de c en radianes
c8=sind(c) % seno de cada elemento de c en grados
c9=cosd(c) % coseno de cada elemento de c en grados
c10=tan(c) % tangente de cada elemento de c en radianes
c11= cotan(c) % cotangente de cada elemento de c en radianes
c12=tand(c) % tangente de cada elemento de c en grados

14
Manejo de Vectores
Operaciones con Vectores
• Funciones trigonométricas (cont.):
atan(var) % tangente inversa var en radianes entre –π/2 y π/2
atand(var) % tangente inversa var en radianes entre –90° y 90°

• Concatenación de funciones:
b=[-1,2,4,-5,1];
b1=sqrt(abs(b))
b1 =
1 1.4142 2 2.2361 1
• Funciones para manejo de datos:
r=[-2,4,0,0,-3,0,10];
Indices diferentes a 0
r1=find(r)
r1 =
1 2 5 7

15
Manejo de Vectores
Operaciones con Vectores
• Funciones para manejo de datos (cont.): • Funciones para manejo de datos (cont.):
r=[-2,4,0,0,-3,0,10]; r=[-2,4,0,0,-3,0,10];
Indices mayores a 0 Invertir el orden de los elementos
r2=find(r>0) r5=fliplr(r) % flip left to right
r2 = r5 =
2 7 10 0 -3 0 0 4 -2
Indices menor o igual a 3 r6=flipud(r’) % flip up-down
r3=find(r<=3) r6=
r3 = 10
1 3 4 5 6 0
Índices mayor a 0 y menor a 3 -3
r4=find(r>0 & r<3) 0
r4 = 0
1×0 empty double row vector 4
-2

16
Manejo de Vectores
Operaciones con Vectores
• Funciones para manejo de datos (cont.): • Funciones estadísticas (cont.):
r=[-2,4,0,0,-3,0,10]; Valor mínimo:
Número de elementos tmin=min(t)
nro=length(r) tmin =
nro = -4.5
7 Valor medio:
• Funciones estadísticas: tmed=mean(t)
t=-4.5:2.5 tmed =
Valor máximo: -1
tmax=max(t) Desviación estándar:
tmax = tdes=std(t)
2.5 tdes =
2.4495

17
Manejo de Vectores
Operaciones con Vectores
• Otras funciones: • Otras funciones (cont.):
Sumar y multiplicar entre si todos los R=norm(r)
elementos de un vector
R=
r=[-2,4,0,0,-3,0,10]
11.358
rsum=sum(r)
Suma acumulada: 𝑠𝑢𝑚𝑟 𝑖 = σ𝑖𝑘=1 𝑟(𝑘)
rsum =
sumr=cumsum(r)
9
sumr =
rprod=prod(r)
-2 2 2 2 -1 -1 9
rprod =
Producto acumulado: 𝑟𝑝𝑟𝑜𝑑 𝑖 = ς𝑖𝑘=1 𝑟(𝑘)
0
prodr=cumprod(r)
Norma euclídea o Norma 2: 𝑅 = σ𝑛𝑖=1 𝑟𝑖 2
prodr =
R=sqrt(sum(r.^2))
-2 -8 0 0 0 0 0
R=
11.358

18
Manejo de Vectores
Operaciones con Vectores
Manipulación de índices: Manipulación de índices (cont.):
Extraer o recuperar un único elemento de un Recuperar elementos no consecutivos
vector indicado por un escalar (índice): separados por una constante:
vector(indice) vector(indice1:k:indice2)
t=-4.5:2.5; timp=t(1:2:7)
Se recupera el Segundo elemento: timp =
t2=t(2) -4.5 -2.5 -0.5 1.5
t2 = Recuperar elementos con índices arbitrarios:
-3.5 ind=[indice1,indice2,indicen]
Recuperar elementos consecutivos: vector(ind)
vector(indice1:indice2) ind=[1,2,5];
t25=t(2:5) % del elemento 2 al 5 t125=t(ind)
t25 = t125 =
-3.5 -2.5 -1.5 -0.5 -4.5 -3.5 -0.5

19
Manejo de Vectores
Operaciones con Vectores
• Manipulación de índices (cont.): • Eliminación de elementos de vectores:
t(1:3) vector(indice1:indice2)=[ ]
ans =
-4.5 -3.5 -2.5 t=[-4.5,-3.5,-2.5,-1.5,-0.5,0.5,1.5,2.5]
t(4:6)=[ ]
t(1:3)=[-2 0 -3] t=
t= -4.5 -3.5 -2.5 1.5 2.5
-2 0 -3 -1.5 -0.5 0.5 1.5 2.5
t=[-4.5,-3.5,-2.5,-1.5,-0.5,0.5,1.5,2.5]
t([1,2,7])=[0 0 0] Ind=[1,2,5];
t= t(ind)=[ ]
0 0 -3 -1.5 -0.5 0.5 0 2.5 t=
-2.5 -1.5 0.5 1.5 2.5
Es igual a escribir t([1 2 5])=[ ]

20
Manejo de Vectores
Operaciones con Vectores
• Funciones para manejo de datos (cont.):
rand(N) % Genera una matriz NxN de números aleatorios distribuidos uniformemente (0, 1)
rand(M,N) % Genera una matriz MxN de números aleatorios distribuidos uniformemente (0, 1)
fix(x) % Redondea x al entero más próximo
round(x) % Redondea x al entero más próximo
round(x,n) % Redondea x al entero más próximo n dígitos ala derecha del punto decimal
floor(x) % Redondea x al entero más próximo hacia menos infinito
ceil(x) % Redondea x al entero más próximo hacia mas infinito
fix(x) % Redondea x al entero más próximo hacia cero
rem(x,y) % Resto después de division. Calcula x-fix(x./y).*y si y~=0

Ejercicio:
Crear un vector de 20 columnas de números reales enteros positivos no consecutivos y dividirlo
en:
• Dos vectores que contengas los números pares e impares respectivamente
• Dos vectores que contengas los números en posiciones pares e impares del vector original
respectivamente

21
Manejo de Matrices
Se quiere crear en MatLab la matriz [A]: Crear matrices con vectores:
x=[2,6,3,-8,2];
3 2 5 1 0
6 7 0 1 −2 y=[-1,2,4,-5,1];
𝐴 =
1 −3 7 1 0
0 2 1 1 −2
B=[x;y]
Se muestra:
A=[3,2,5,1,0;6,7,0,1,-2;1,-3,7,1,0;…
B=
0,2,1,1,-2]
2 6 3 -8 2
Se muestra:
-1 2 4 -5 1
A=
B=[x,y]
3 2 5 1 0
Se muestra:
6 7 0 1 -2
B=
1 -3 7 1 0
2 6 3 -8 2 -1 2 4 -5 1
0 2 1 1 -2

22
Manejo de Matrices
Combinar matrices y vectores Se muestra:
C=
3 2 5 1 0
6 7 0 1 −2 3 2 5 1 0
𝐴 =
1 −3 7 1 0 6 7 0 1 -2
0 2 1 1 −2
1 -3 7 1 0
x=[2,6,3,-8,2];
0 2 1 1 -2
z=[0;-8;-9;-1];
2 6 3 -8 2

Se quiere:
D=
C=[A;x];
0 3 2 5 1 0
D=[z,A]
-8 6 7 0 1 -2
-9 1 -3 7 1 0
-1 0 2 1 1 -2

23
Manejo de Matrices
Matrices Especiales: eye(2,4)
 Matriz identidad: ans =
eye(n,m) % Crea una matriz de tamaño nxm 1 0 0 0
 Matriz llena de ceros: 0 1 0 0
zeros(n,m) % Crea una matriz de tamaño nxm zeros(3)
ans =
Ejemplos: 0 0 0
eye(3) 0 0 0
ans = 0 0 0
1 0 0 zeros(2,4)
0 1 0 ans =
0 0 1 0 0 0 0
0 0 0 0

24
Manejo de Matrices
Matrices Especiales (cont.): 1 1 1 1
0 0 0 0
Se desea crear la siguiente matriz: 𝐴1010 =
1 1 1 1
0 0 0 0
1 1 1 1 v0=zeros(1,4);
1 1 1 1
𝐴01 = v1=ones(1,4);
0 0 0 0
0 0 0 0 A1010=[V1;V0;V1;V0]

A01=[ones(2,4);zeros(2,4)]
Se muestra:
Se muestra:
A1010 =
A01 =
1 1 1 1
1 1 1 1
0 0 0 0
1 1 1 1
1 1 1 1
0 0 0 0
0 0 0 0
0 0 0 0

25
Manejo de Matrices
Matrices Especiales: Mat=rand(4)
 Matriz aleatoria: vec=diag(mat)
rand(n,m) % Crea una matriz de tamaño nxm Se muestra:
Mat =
 Matriz diagonal: 0.95717 0.42176 0.65574 0.67874
vector=[2,6,3,-8,2]; 0.48538 0.91574 0.035712 0.75774
Dd=diag(vector) 0.80028 0.79221 0.84913 0.74313
Dd = 0.14189 0.95949 0.93399 0.39223
2 0 0 0 0 vec =
0 6 0 0 0 0.95717
0 0 3 0 0 0.91574
0 0 0 -8 0 0.84913
0 0 0 0 2 0.39223

26
Manejo de Matrices
Matrices Especiales (cont.): Suma, Resta y Producto de Matrices:
 Transponer matrices: A1=rand(2,3)
transpose(matriz) A2=rand(2,3)
A=[3,2,5,1,0;6,7,0,1,-2;1,-3,7,1,0;0,2,1,1,-2] S1=A1+A2
At= transpose(A); % También At=A’ A1 =
At = 0.65548 0.70605 0.27692
3 6 1 0 0.17119 0.031833 0.046171
2 7 -3 2 A2 =
5 0 7 1 0.097132 0.69483 0.95022
1 1 1 1 0.82346 0.3171 0.034446
0 -2 0 -2 S1 =
Las matrices generadas con el comando rand 0.75261 1.4009 1.2271
(“aleatorio”) serán diferentes cada vez que se
use el comando. 0.99464 0.34893 0.080617

27
Manejo de Matrices
Función Definición Ejemplo Resultado

blkdiag(A,B) Crea una matriz diagonal de sub Y=blkdiag(A,B) 𝐴 0


matrices 0 𝐵
triu(a) Forma una matriz triangular triu(ones(4,4)) 1 1 1 1
superior a partir de una matriz 0 1 1 1
A 0 0 1 1
0 0 0 1
tril(a) Forma una matriz triangular tril(ones(4,4)) 1 0 0 0
inferior a partir de una matriz A 1 1 0 0
1 1 1 0
1 1 1 1
flipud(A) Devuelve la matriz A con las 1 4 3 6
columna volteadas en la 𝐴= 2 5 2 5
dirección arriba-abajo 3 6 1 4
fliplr(A) Devuelve la matriz A con las 1 4 4 1
columna volteadas en la 𝐴= 2 5 5 2
dirección izquierda-derecha 3 6 6 3
reshape(A,M,N) Devuelve una matriz de tamaño 1 4 1 3 5
MxN cuyos elementos se toman 𝐴= 2 5 2 4 6
por columna de la matriz A 3 6

28
Manejo de Matrices
Suma, Resta y Producto de Matrices (cont.):  Producto de matrices:
 Producto de una matriz por un escalar:
1 0
Pi=pi*ones(3) 0 1 20 −20
𝐿1 = ;𝐾 =
Se muestra: 0 0 −20 20
0 0
Pi =
L1=eye(4,2);
3.1416 3.1416 3.1416
K=20*[1,-1;-1,1];
3.1416 3.1416 3.1416
3.1416 3.1416 3.1416
L1*K
 Producto de una matriz por un vector:
ans =
𝜋 𝜋 𝜋 1 3𝜋 20 -20
𝜋 𝜋 𝜋 1 = 3𝜋 -20 20
𝜋 𝜋 𝜋 1 3𝜋
0 0
0 0
F=Pi*ones(3,1);

29
Manejo de Matrices
Suma, Resta y Producto de Matrices (cont.):  División:
 Operaciones elemento a elemento: E=K./H
Sean: E=
𝐶 𝑖, 𝑗 = 𝐴 𝑖, 𝑗 ∗ 𝐵(𝑖, 𝑗)
200 200
C=A.*B
200 200

Ejemplo:
 Exponenciación:

20 −20 0.1 −0.1 F=E.^(1/3)


𝐾= ;𝐻 =
−20 20 −0.1 0.1 F=
K.*H
5.848 5.848
ans =
5.848 5.848
2 2
2 2

30
Manejo de Matrices
Otras operaciones:
 sqrt(A); % calcula la raíz cuadrada de cada elemento de la matriz [A]
 abs(A); % calcula el valor absoluto de cada elemento de la matriz [A]
 sin(A); % calcula el seno de cada elemento de la matriz [A]
 exp(A); % calcula el exponencial de cada elemento de la matriz [A]
 log(abs(A)); % calcula el log natural del valor abs de cada elemento de la matriz [A]

 G=A^2; % calcula el producto de A por si mismo; es decir [A]*[A]


 H=A^n; % calcula el producto de A por si mismo n veces
 K=expm(A); % calcula la función exponencial matricial de [A]

31
Manejo de Matrices
Otras operaciones (cont.): Otras operaciones (cont.):
 Determinante:  Sistema de ecuaciones lineales:
det(mat) x=A\b
A=[200,-100,0;-100,180,-80;0,-80,80]; Ejemplo:
200𝑥1 − 100𝑥2 + 0𝑥3 = 10
det(A) −100𝑥1 + 180𝑥2 − 80𝑥3 = 50
ans = 0𝑥1 − 80𝑥2 + 80𝑥3 = 90
8e+05
Otras operaciones (cont.): A=[200,-100,0;-100,180,-80;0,-80,80];
 Matriz inversa: b=linspace(10,90,3)’; % b=[10;50;90]
inv(mat) x=A\b
Ainv=inv(A) x=
Ainv = 1.5
0.01 0.01 0.01 2.9
0.01 0.02 0.02 4.025
0.01 0.02 0.0325
32
Manejo de Matrices
Ejemplo 2: Ejemplo 3: Ejemplo 4:

4𝑥 − 𝑦 + 𝑧 = 7 −2𝑥 + 𝑦 + 3𝑧 = 12 3𝑥 + 2𝑦 − 5𝑧 = 0
4𝑥 − 8𝑦 + 𝑧 = −21 𝑥 + 2𝑦 + 5𝑧 = 10 −𝑥 + 2𝑦 − 𝑧 = −8
−2𝑥 + 𝑦 + 5𝑧 = 15 6𝑥 − 3𝑦 − 9𝑧 = 24 −2𝑥 + 𝑦 + 𝑧 = −7

33
Manejo de Matrices
Otras operaciones (cont.):  Autovalores y autovectores:
 El problema de Autovalores: [Phi,D]=eig(A)

𝐴 Φ𝑗 = 𝜆𝑗 Φ𝑗 ; 𝑗 = 1,2, … , 𝑛
Ejemplo:
Donde n es el número de filas de la matriz [Phi,D]=eig(A)
lamda=eig(A) phi =
-0.31726 0.67112 -0.67003
Ejemplo: -0.57338 0.42702 0.69921
A=[200,-100,0;-100,180,-80;0,-80,80]; -0.75537 -0.60601 -0.24932
eig(A) D=
lamda = 19.275 0 0
19.275 0 136.37 0
136.37 0 0 304.35
304.35

34
Manejo de Matrices
Otras operaciones (cont.):
 Variaciones al comando eig:
eigs(A); % calcula los 6 (por omisión) mayores autovalores de [A] en valor absoluto
eigs(A,k); % calcula los k mayores (por omisión) autovalores de [A] en valor absoluto
eigs(A,k,’sm’); % calcula los k menores autovalores de [A] en valor absoluto.

Si [K] y [M] son dos matrices cuadradas, el problema de autovalores generalizado es:

𝐾 Φ𝑗 = 𝜆𝑗 𝑀 Φ𝑗 ; 𝑗 = 1,2, … , 𝑛
Ejemplo:

10.24 −5.12 0 0 0.010194 0 0 0


−5.12 10.24 −5.12 0 0 0.010194 0 0
𝐾= ; 𝑀=
0 −5.12 10.24 −5.12 0 0 0.010194 0
0 0 −5.12 5.12 0 0 0 0.010194

35
Manejo de Matrices
K=[10.24,-5.12,0,0;-5.12,10.24,-5.12,0;0,-5.12,10.24,-5.12;0,0,-5.12,5.12]; % matriz de Rigidez
M=0.010194*eye(4); % matriz de Masas
[phi,w2]=eig(K,M); % autovalores y autovectores
w=sqrt(diag(w2)); % frecuencia. Concatenación de funciones
[w,id]=sort(w); % ordena en forma ascendente y muestra el orden (id)
T=2*pi./w; % periodos. Producto escalar matriz y división elemento a elemento
Mn=phi’*M*phi; % matriz de masa modal. Producto triple de matrices
Mn=diag(Mn); % masa modal. Diagonaliza la matriz [Mn]

La rutina anterior es típica para calcular, dado la matriz de masa y rigidez, los desplazamiento
modales, frecuencia, período y masa modal de una estructura y nos permite repasar varios
concepto ya explicados.

36
Manejo de Matrices
Manipulación de índices:
Dada una matriz [A], para extraer o modificar elementos de la fila i y columna j:
A(i,j) % matriz de “ifilas” y “jcolumnas”
A(nfila,:) % recupera todas las columna de la fila “nfila” de la matriz [A]
A(:,ncol) % recupera todas las filas de la columna “ncol” de la matriz [A]
Ejemplo:
3 2 5 1 0
6 7 0 1 −2
𝐴=
1 −3 7 1 0
0 2 1 1 −2
A=[3,2,5,1,0;6,7,0,1,-2;1,-3,7,1,0;0,2,1,1,-2]; ac4=A(:,4)
af3=A(3,:)
ac4 =
af3 =
1 -3 7 1 0 1
1
1
1
37
Manejo de Matrices
 Eliminar filas y columnas:
A(nfila,:)=[ ] % elimina todas las columna de la fila “nfila” de la matriz [A]
A(:,ncol)=[ ] % elimina todas las filas de la columna “ncol” de la matriz [A]
Ejemplo:
De la matriz [A] anterior
A(3,:)=[ ] A(:,4)=[ ]
A= A=
3 2 5 1 0 3 2 5 0
6 7 0 1 -2 6 7 0 -2
0 2 1 1 -2 0 2 1 -2
No se pueden combinar estos dos comandos.
A(3,4)=[ ] % Muestra un mensaje de error
A null assignment can have only one non-colon index.

38
Manejo de Matrices
Extraer y eliminar filas y columnas (cont.):
 De forma consecutiva:
A(fini:ffinal,:) % extrae desde la fila fini hasta la ffinal de la matriz [A]
A(:,cini:cfinal) % extrae desde la columna cini hasta la cfinal de la matriz [A]
A(fini:ffinal, cini:cfinal) % extrae los rangos especificados de la matriz [A]

A(fini:ffinal,:)= [ ] % elimina desde la fila fini hasta la ffinal de la matriz [A]


A(:,cini:cfinal)= [ ] % elimina desde la columna cini hasta la cfinal de la matriz [A]

 Eliminar en forma específica:


elim=[1,3,4];
A(:,elim)=[ ]; % Tambien se puede escribir A(:,[1,3,4])=[ ]
A(elim,:)=[ ]; % Tambien se puede escribir A([1,3,5],:)=[ ]

39
Manejo de Matrices
Formato Uso/Propósito
A(:,j) Es la j-ésima columna de A
A(i,:) Es la iésima fila de A
A(:,:) Para una matriz es igual a A
A(j:k) Es A(j),A(j+1),…A(k)
A(:,j:k) Es A(:,j),A(:,j+1),…A(:,k)
A(:,:,k) Es la k-ésima de una array de
tres dimensiones A
A(:) Todos los elementos de A en
una sola columna

40
Manejo de Matrices
Funciones varias de utilidad:
 Tamaño de una matriz
size(A) % el resultado son dos escalares: el número de filas y columnas
De la matriz [A]:
[nf,nc]=size(A); % en este caso se almacenan los resultados en las variables nf y nc
nf =
4 % Numero de filas
nc =
5 % Numero de Columnas

41
Manejo de Matrices
Construir la matriz diagonal de 10x10:
7 −4 1 0 0 0 0 0 0 0
−4 6 −4 1 0 0 0 0 0 0
1 −4 6 −4 1 0 0 0 0 0
0 1 −4 6 −4 1 0 0 0 0
0 0 1 −4 6 −4 1 0 0 0
𝐾=
0 0 0 1 −4 6 −4 1 0 0
0 0 0 0 1 −4 6 −4 1 0
0 0 0 0 0 1 −4 6 −4 1
0 0 0 0 0 0 1 −4 6 −4
0 0 0 0 0 0 0 2 −8 7

42
Entrada y Salida de Datos
Crear Tablas:
• tbl=table(var1,…,varN)
• tbl=table(var1,…,varN,Name,Value)
• tbl.Properties.VariableNames = {‘Tit1’ ‘Tit2’ ….’TitN’}
• tbl=table(var1,var2,…,varN, ’RowNames’, titulo)
• summary(tbl)
Ejemplos:
Modos Periodos Frecuencias Masa_Modal
_____ ________ ___________ __________
1 0.80727 7.7833 1
2 0.28036 22.411 1
3 0.18299 34.336 1
4 0.14918 42.119 1

43
Entrada y Salida de Datos
Entrada de datos interactiva:
• var=input(‘Mensaje de texto’)
• var=input(‘Mensaje de texto’,’s’) % si el dato a ingresar es un texto
• var=menu(‘Título del menú’,’opción_1’, ’opción_2’,…, ’opción_n)

Importación y Exportación de datos:


save nombre_del_archivo
load nombre_de_achivo

save(‘nombre_directorio_subdirectorios\nombre_archivo’,’variable’, '-ASCII’, '-append')


writetable(tabla, ‘nombre_del _archivo’,'WriteRowNames',true);

44
Control de Flujo
Comandos if/elseif/else: Se escribe en el workspace de MatLab el
siguiente código:
Estructura general:
if expresiones lógicas 1
x=input('Valor de x = ‘);
comandos 1
if x<0
elseif expresiones lógicas 2
sig = -1
comandos 2
elseif x ==0
else
sig =0
comandos 3
else
end
sig=1
Ejemplo:
end
−1, 𝑥<0
𝑠𝑖𝑔(𝑥) = ቐ 0, 𝑥<0
+1, 𝑥>0

45
Control de Flujo
Comandos switch/case/otherwise: Se escribe en el workspace de MatLab el
siguiente código:
Estructura general:
Switch expression de entrada
x=input('Valor de x = ');
case valor 1
switch x/abs(x+eps)
comandos 1
case 1
case valor 2
sig=1
comandos 1
case -1
case …
sig=-1
comandos …
otherwise
Otherwise
sig=0
comandos n
end
Ejemplo:
Usando el mismo ejemplo anterior

46
Control de Flujo
Otros comandos de control de flujo:
pause(segundos) % detiene la ejecución por tantos segundos, ejem. (0.01 seg)
pause % detiene la ejecución hasta que el usuario apriete una tecla
break % detiene la ejecución dentro de un programa
error(‘mensaje’) % detiene la ejecución e imprime un mensaje
keyboard % detiene en forma temporal la ejecución de un programa. Para
continuar hay que escribir return en el área de trabajo

47
Control de Flujo
Lazos o bucles:
Lazo for (“para”) tiene la siguiente estructura:
for variable = valor_inicial:incremento:valor_final
comandos a ejecutar
end

Lazo while (“mientras”) repite una serie de comandos mientras una expresión lógica sea
verdadera.
while expresión lógica
comandos a ejecutar
end

48
Control de Flujo
Lazos o bucles: Lazos o bucles:
Ejemplo: Ejemplo:
% Ciclo % Vectorizacion
tic tic
v=fix(rand(1000000,1)*10); s=cumsum(v);
n=length(v); t2=toc;
s=0;
for i=1:n t1/t2
s=s+v(i);
end
disp(s)
t1=toc;

49
Control de Flujo
Ejemplo de ciclo while:
Metodo de Newton-Raphson para calcular la raíz de:
𝑓 𝑥 = 𝑒 −𝑥 − 𝑥, 𝑐𝑜𝑛 𝑣𝑎𝑙𝑜𝑟 𝑖𝑛𝑖𝑐𝑖𝑎𝑙 𝑥0 = 0

Fórmula de Newton-Raphson:

𝑓 𝑥𝑖 𝑥𝑖 − 𝑥0
𝑥(𝑖+1) = 𝑥𝑖 − , 𝑒𝑟𝑟𝑜𝑟 =
𝑓 ′𝑥𝑖 𝑥𝑖

Ejemplo del ciclo for:


• Con los vectores:
x = [1 2 3 4 5] ; y = [0 0 0 0 0]
se quiere:
xy = [1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 4 0 0 0 0 0 5 0 0 0 0 0]

• Hacer un script que multiplique elemento a elemento dos matrices A de 40x40 (por
ejemplo A=magic(40) y comparar el tiempo de ejecución con la vectorización A.*A.
En ambos ejemplos compare tiempo de ejecución del ciclo for y su vectorización

50
Comandos Gráficos
Se quiere dibujar dos funciones:

𝑦1 = sin 𝑡 ; 𝑦2 = 𝑒 −0.1𝑡 ∙ cos 𝑡 ; 𝑡 = 0 ℎ𝑎𝑠𝑡𝑎 10𝜋


t=0:0.1:10*pi; % vector t con incrementos de 0.1
y1=sin(t); % función 1
y2=exp(-0.1*t).*cos(t); % función 2
% Graficando
figure
plot(t,y1)

51
Comandos Gráficos
Mejorando la gráfica (Comandos):
title(´Título del gráfico´) % coloca título en el gráfico
grid on % coloca cuadrícula en el gráfico
xlabel(‘texto del eje x’) % coloca título en el eje de abscisas
ylabel(‘texto del eje y’) % coloca título en el eje de ordenadas
t=0:0.1:10*pi; % vector t con incrementos de 0.1
y1=sin(t); % función 1
y2=exp(-0.1*t).*cos(t); % función 2
figure
plot(t,y1)
title(‘Graficas')
grid on
xlabel('tiempo [seg]')
ylabel('Funcion y_1')

52
Comandos Gráficos
Graficando ambas funciones en un solo gráfico
plot(datosX1,datosY1,datosX2,datosY2)

Se adiciona la legenda para identificar ambas funciones


legend('Funcion y_1(t)','Funcion y_2(t)')

53
Comandos Gráficos
Cambiando el formato de las líneas, el código final queda:
t=0:0.1:10*pi; % vector t con incrementos de 0.1
y1=sin(t); % función 1
y2=exp(-0.1*t).*cos(t); % función 2
% Graficando
figure
plot(t,y1,'-sr',t,y2,'--k','linewidth’,1.5,'markersize',4)
title('Graficas')
grid on
xlabel('tiempo [seg]')
ylabel('Funcion y_1(t) y y_2(t)')
legend('Funcion y_1(t)','Funcion y_2(t)')
axis([0 35 -1.2 1.2])

54
Comandos Gráficos
Comando subplot:
subplot(m,n,p)
Divide la ventana de figuras en una matriz de m filas, n columnas donde el gráfico se hará en
el casillero p. Ejemplo, se quiere hacer dos gráficas que se dispondrán en 2 filas y 1 columna:

subplot(2,1,1)
subplot(1,2,1) subplot(1,2,2)
subplot(2,1,2)

subplot(2,4,1) subplot(2,4,2) subplot(2,4,3) subplot(2,4,4)

subplot(2,4,5:8)

55
Comandos Gráficos
Comando subplot (cont.):
Graficando las funciones y1 y y2 el código queda:
t=0:0.1:10*pi;
y1=sin(t);
y2=exp(-0.1*t).*cos(t);
figure
subplot(2,1,1)
plot(t,y1,'b','linewidth’,2);grid on
title('Funcion sin(t)')
subplot(2,1,2)
plot(t,y2,'r','linewidth’,2);grid on
title('Funcion e^-^0^.^1^t cost(t)')
xlabel('Tiempo [seg]')

56
Ejemplo 1
Sistema de 1 gdl:

Datos:
Propiedades Mecánicas
Col1 Col2 Col3 Col4 Col5
D (in) = HSS14X.625 HSS16X.500 HSS18X.625 HSS18X.75 HSS20X.75
L (cm) = 400.00 600.00 1000.00 1200.00 1600.00
Ag (cm2) = 158.51 146.27 205.43 244.50 272.88
(cm4)
Ix,Iy = 23,112 28,435 50,271 59,072 82,101
Wpp (Kgf/m) = 133.359 123.182 172.963 205.750 229.710

E (Tonf/cm2) = 2,040.00
W (Tonf) = 0.3
ξ (%)= 0.02

57
Ejemplo 1
Se quiere:
Cálculos de las respuesta en el tiempo usando el método de Newmark lineal
Tabular los resultados de desplazamiento máximo por columna
Graficar el desplazamiento de cada columna
Comparar los resultados.
Variar el amortiguamiento en 2%, 5% y 10% y comparar las respuestas de la columna 3

58
Ejemplo 1

Tomado de: Dinámica de


Estructuras de Anil K
Chopra, capítulo 5
59
Ejemplo 2
Desarrolle un algoritmo para administrar la relación fuerza-deformación (R vs u) de un
modelo elastoplástico. Tenga presente que el “esqueleto activo” de la curva (válido para un
instante t) varía cada vez que se ingresa a la zona plástica, cada vez que cambia la
deformación plástica y cada vez que ocurre descarga desde la zona plástica.
Dese un conjunto/secuencia de valores arbitrarios de u(t) y señale el valor de R(t) que
corresponde a cada uno de ellos según su modelo. Use numerosos valores de u de modo de
representar diversas condiciones (carga, descarga, zonas elásticas, zonas plásticas, distintas
alternativas cíclicas). Plotee R vs. u destacando todos los puntos de secuencia.

60
Ambas figuras son tomadas de Dinámica de Estructuras de Anil K Chopra, capítulo 7
Conclusiones

El principio KISS establece que la


Pensar y analizar antes de tipear mayoría de sistemas funcionan mejor
si se mantienen simples que si se
hacen complejos; por ello,
la simplicidad debe ser mantenida
como un objetivo clave del diseño, y
cualquier complejidad innecesaria
debe ser evitada.
Fuente Wikipedia

61

También podría gustarte