Está en la página 1de 37

FACULTAD DE CIENCIAS E INGENIERÍA

RESISTENCIA DE MATERIALES 1

TUTORÍA

TALLER DE PROGRAMACIÓN CON


MATLAB
Objetivos de la tutoría

• Definir el contenido mínimo requerido en los trabajos de


programación.

• Explicar la secuencia lógica para resolver los problemas


en cada trabajo.

• Familiarizarse con el lenguaje de programación


empleado en Matlab.
¿Por qué tenemos que resolver un
problema de programación?

En el mundo actual, toda ingeniería y especialidad requiere


habilidades en la programación para generar herramientas
que permitan sistematizar y agilizar el cálculo.

Por ejemplo, un ingeniero civil no debe tener complejidad en


desarrollar herramientas para el cálculo de propiedades
geométricas, de fuerzas internas en estructuras simples,
determinar el periodo de vibración de un oscilador, cálculo
de refuerzo en elementos simples de concreto armado, etc.
Cómo resolvemos un problema de
programación

Planteamiento
Escribir lasdede
Identificación
la secuencia
datos de
de entrada,
funciones
solución
datos y ylos
(diagrama
de salida,
programas.
restricciones.
de flujo)

Ar
ma
r la
pre
sen
tac
ión
de
los
dat
os
de
sali
da
(G
UI
o
ven
tan
a
de
co
ma
nd
os)
.
Lenguaje De Programación Matlab

MATLAB: MATrix LABoratory

Fabricante: Mathworks Inc.


Software matemático que ofrece un IDE con un
lenguaje de programación propio.
Permite: manipular matrices, representar datos y
funciones, implementar algoritmos, creación de GUI y
comunicación con otros programas.
Definición de variables

MATLAB permite trabajar con números de tipo entero con y


sin signo, así como punto flotante de doble precisión, la cual
es la condición por defecto al crear una variable. Para crear
una variable escalar, sólo se le debe asignar un valor a un
nombre:

>> var1 = 3.14 %var1 es tipo double: ocupa 64 bits

Reglas para nombrar variables: Debe comenzar con una letra,


no puede haber espacios entre caracteres, distingue entre
mayúsculas y minúsculas.
Definición de variables

Una vez que ha sido asignada con un valor, ésta se muestra en el


Workspace y puede ser utilizada para crear otras variables:

>> var2 = 1.3*45+2*var1

Como se observa, se han utilizado operaciones aritméticas como


sumas y multiplicaciones de manera bastante sencilla para definir
var2. Si no se desea mostrar algún resultado, se debe finalizar la línea
respectiva con un punto y coma:

>> num_comp = 1+(4*5-7/3)*i % num_comp = Número complejo

Ejercicio: Definir algunas otras variables y cargar valores.


Definición de vectores
Para definir vectores, se debe tener en cuenta si se trata de un
vector fila o columna, dado que MATLAB los trata de manera
diferente. Para definir vectores fila se escriben valores
separados por espacios o comas encerrados entre corchetes:

>> row = [1 2 5.4 -6.6]

Mientras que para definir un vector columna, los valores deben


estar separados por punto y coma encerrados siempre entre
corchetes:

>> column = [4 ; 2 ; 7 ; 4]
Definición de vectores

También es posible direccionar directamente los elementos de un vector


para leer o corregir un componente específico.

>> row(2) = pi %Permite corregir el segundo elemento de row


>> column(3) = 10 %Permite corregir el tercer elemento de column
>> g = row (4) %Permite guardar en g el cuarto componente
>> h = column (1) %Permite guardar en h el primer elemento

Ejercicio: Definir otros vectores y manipular sus elementos.


Definición de vectores

Notación rápida de MATLAB: Si se desea definir un vector,


cuyo primer elemento es “a” y el último es “b” igualmente
espaciados “h” (ejemplo típico: definir un intervalo de
tiempo), entonces es conveniente usar la siguiente notación:

>> a = 0; %Valor inicial


>> b = 10; %Valor final
>> h = 0.1; %Intervalo entre componentes, “paso”
>> t = a: h: b; %Notación rápida de MATLAB para vector
Definición de vectores

Comando “linspace”: Si lo que se requiere es crear un vector


con una cierta cantidad de elementos N entre dos límites
conocidos “a” y “b”, entonces el comando “linspace” es más
conveniente.

>> a = 0;
>> b = 2*pi;
>> N = 1000;
>> t2= linspace (a, b, N); %Crea un vector de 1000 elementos entre a y b
Definición de matriz

Las matrices se pueden definir como los vectores, esto es,


especificando cada elemento de manera individual o
concatenando vectores fila, columna o incluso matrices más
pequeñas (tener siempre en consideración las dimensiones).

Elemento por elemento:

>> a = [1 2; 3 4] % fila 1 de a es [1 2], fila 2 de a es [3 4]

Ejercicio: Definir una matriz de tamaño 3x3 y 5x4


Definición de matriz

Por concatenación de vectores:

>> c1 = [2; 5; 8];


>> c2 = [1; 10; 2];
>> mc12 = [c1 c2] % Matriz concatena dos columnas

>> f1 = [5 12 47];
>> f2 = [20 15 35];
>> mf12 = [f1; f2] % Matriz concatena dos filas
Direccionamiento en matrices
De la misma forma que para vectores, también es posible
direccionar directamente los elementos de una matriz para su
lectura o escritura.

>> a(1,2) = 5; %Permite editar fila 1, columna 2 de a


>> a(2,2) = 6; %Permite editar fila 2, columna 2 de a

>> g = a(1,1) %Permite grabar en g fila 1, columna 1 de a


>> h = a(1,:) %Permite grabar en h fila 1 de a
>> k = a(:,2) %Permite grabar en k columna 2 de a
>> x = mc([1 2], [4 5]) %Extrae sub-matriz
>> y = mc([1 3], 2:5) %Extrae sub-matriz
Construcción de
curvas 2D
La facilidad y elegancia en la
construcción de curvas planas
y en el espacio es una de las
características más resaltantes
de MATLAB. Para el caso de
curvas en un plano, la
instrucción “plot” permite
graficar un vector de puntos X
contra un vector Y, como se
muestra a continuación.
Construcción de curvas 2D
%Ejemplo de uso de instrucción “plot”

t = 0:0.05:10; %Define tiempo en notación corta t є [0 10], h = 0.05s


y = 4*exp(-t/3).*sin(2*t); % Define funciones a graficar
z = 2*exp(-t/5).*cos(t);
plot (t, y, 'o', t, z, 'x') % Plot XY con marcador ‘o’ para la curva 1 y
% ‘x’ para la curva 2
grid % Habilita líneas de grilla
title('Probando los gráficos', 'FontSize', 24) % Título de la gráfica,
% tamaño de letra 24
xlabel('Segundos') % Etiqueta para el eje X
ylabel('Amplitud') % Etiqueta para el eje Y
legend('y=4*exp(-t/3)*sin(2*t)','2*exp(-t/5)*cos(t)'); % Leyenda
Construcción de curvas 2D
Construcción de superficies 3D

Para el caso de una superficie en 3D, se presenta el


siguiente código de ejemplo:

[X,Y] = meshgrid(-8:.5:8); % Genera una malla en XY


R = sqrt(X.^2 + Y.^2) + eps; % Define función R (x, y),
%eps: el número más pequeño
Z = sin(R)./R; % Evalúa función sinc(R)
mesh(Z); % Genera superficie en 3D
Construcción de superficies 3D
Ejercicios:

1. Dados:

Se le pide calcular:

2. Dibuje la campana de Gauss para una variable “x” con promedio u =


5.7 y σ = 1.5. Presente el gráfico para x = [-10 10].

3. Dibuje las siguientes curvas polares:


r = 1 (circunferencia)
r = sin (2θ)
Ejercicio: grafica función

1. Implementar la siguiente función y graficar:


EJEMPLO 1
Dibujar el DFC y el DMF de una viga simplemente apoyada
y sometida a diferentes cargas puntuales.
PLANTEAMIENTO DE LA SECUENCIA DE
SOLUCIÓN (DIAGRAMA DE FLUJO)

IDENTIFICACIÓN DE DATOS DE ENTRADA Y


RESTRICCIONES

ESCRIBIR LAS FUNCIONES Y LAS SECUENCIAS

ARMAR LA PRESENTACIÓN DE LOS DATOS DE


SALIDA

Si se conocen las cargas y sus ubicaciones, se pueden


calcular las reacciones. Luego se puede dibujar el DFC.
OJO que cada “x” tiene dos puntos en el DFC.
Con las áreas de cada tramo del DFC, se puede dibujar el
DMF con líneas rectas.
PLANTEAMIENTO DE LA SECUENCIA DE
Ingresar «L» SOLUCIÓN (DIAGRAMA DE FLUJO)

IDENTIFICACIÓN DE DATOS DE ENTRADA Y


Ingresar «n» RESTRICCIONES

Contador ESCRIBIR LAS FUNCIONES Y LAS SECUENCIAS


i=1
ARMAR LA PRESENTACIÓN DE LOS DATOS DE
SALIDA
Ingresar «Pi» y «xi»

xi ≤ L Ingresar «xi»
N

i=i+1 Y

i=n
N

Y
Y
PLANTEAMIENTO DE LA SECUENCIA DE
SOLUCIÓN (DIAGRAMA DE FLUJO)
Contador
i=1
IDENTIFICACIÓN DE DATOS DE ENTRADA Y
RESTRICCIONES

RAi = Pi·(L – xi) / L ESCRIBIR LAS FUNCIONES Y LAS SECUENCIAS


RBi = Pi·xi / L
ARMAR LA PRESENTACIÓN DE LOS DATOS DE
SALIDA

DFC(izqXi) = DFC(izqXi) + RAi

DFC(derXi) = DFC(derXi) – RBi

i=i+1

Y
i=n Imprimir DFC
N
Y
PLANTEAMIENTO DE LA SECUENCIA DE
SOLUCIÓN (DIAGRAMA DE FLUJO)
Contador
i=1
IDENTIFICACIÓN DE DATOS DE ENTRADA Y
RESTRICCIONES

RAi = Pi·(L – xi) / L ESCRIBIR LAS FUNCIONES Y LAS SECUENCIAS


RBi = Pi·xi / L
ARMAR LA PRESENTACIÓN DE LOS DATOS DE
SALIDA

DMF(izqXi) = DMF(izqXi) + RAi·xi

DMF(derXi) = DMF(derXi) – RBi·(L – xi)

i=i+1

Y
i=n Imprimir DMF
N
Código en Matlab: Fuerzas_viga.m
% ************************************************************
% INICIO DEL ANÁLISIS DE LA VIGA
% ************************************************************
%% FILOSOFÍA DE LA SOLUCIÓN
% Se realizará el análisis para cada carga de manera independiente. Luego,
% por superposición se sumarán las respuestas para obtener la respuesta
% total. El gráfico de los diagramas se realiza de manera discretizada.
% Nota: El programa no calcula las reacciones de cargas puntuales ubicadas sobre los
apoyos

%% INGRESO DE DATOS
clear; clc; close all; % limpia variables, limpia pantalla y cierra figuras
display('Ingresar las ubicaciones y el valor de las cargas correspondientes dejando un
espacio.')
display('El signo negativo de las cargas indican el sentido de la gravedad')
tit = 'Viga sometida a Cargas Puntuales';
prompt = {'Long. Viga (m)','Ubicación Xi de la fuerza Pi (i=1..n) [m]',...
'Fuerza Aplicada Pi [kN]‘,’ACA AGREGO LA DISTRIBUIDA´ };
def = {'4.5', '1.8 3.6', '-60 -60'};
resp = inputdlg(prompt,tit,[1 50],def);
L=1000*sscanf(resp{1},'%f'); %Longitud total de la viga
X=1000*sscanf(resp{2},'%f'); %Ubicación Xi de las cargas aplicadas
P=sscanf(resp{3},'%f')*10^3; %Valor de las cargas aplicadas [N]
ACA AGREGO LA DISTRIBUIDA %DISTRIBUIDA
%Signo negativo = sentido de gravedad
%Signo positivo = sentido hacia arriba
%Respuestas serán en m y N. Y las gráficas se escalarán para kN y kN*m
%***********************************************************************
%% CÁLCULOS PRELIMINARES
n=size(X,1); %Número de cargas aplicadas en el sistema
Xr=L-X; %Longitud complementaria a la ubicación de cada carga

% Creación de Vectores para almacenar las respuestas


Ra=zeros(n,1); %Reacción en A
Rb=zeros(n,1); %Reacción en B
%**************************************************************************

%% Cálculo de reacciones en A y B para cada carga independiente

for i=1:n;
Rb(i)=-P(i)*X(i)/L ACA AGREGO LA DISTRIBUIDA; %Reacción en B.
Ra(i)=-P(i)*Xr(i)/L ACA AGREGO LA DISTRIBUIDA ; %Reaccion en A.
end

%**************************************************************************

%% Creación de vectores para almacenar respuestas para las gráficas

% Se discretizará la viga para su análisis y respuesta

Xgraf=0:1:L; %Posición en X para cada punto graficado


igraf=length(Xgraf); %Discretizando de la viga
VgrafP=zeros(1, igraf); %Fuerza cortante por Cargas Puntuales para la gráfica
MgrafP=zeros(1, igraf); %Momento flector para la gráfica por P
% Cada elemento de estos vector fila corresponde a cada punto de la discretización
%**************************************************************************

%% Fuerza Cortante V
%(sentido positivo hacia abajo)
%Aporte de las cargas puntuales P Y DISTRIBUIDA

for i=1:n
Vizq=Ra(i); %Fuerza cortante a la izquierda de la carga + DISTRIBUIDA
Vder=Ra(i)+P(i)+ DISTRIBUIDA; %Fuerza cortante a la derecha de la carga + DISTRIBUIDA
for j=1:X(i)
VgrafP(j)=VgrafP(j)+Vizq;
%Suma de todas las fuerzas cortantes generadas a la izquierda de las cargas aplicadas y
almacenadas en Vgraf
end
for j=X(i)+1:L+1
VgrafP(j)=VgrafP(j)+Vder;
%Suma de todas las fuerzas cortantes generadas a la derecha de las cargas aplicadas y
almacenadas en Vgraf
end

% Forma alternativa
% VgrafP = Vizq*heaviside(X) + (Vder-Vizq)*heaviside(X-X(i));

end

RA=sum(Ra); %Reacción total en el apoyo A [N]


RB=sum(Rb); %Reacción total en el apoyo B [N]
% Gráfica de la Fuerza Cortante [kN]
figure('Color','white');
stem(Xgraf/1000,VgrafP/1000,'Fill','blue','MarkerEdgeColor',...
'red','MarkerSize',4,'Marker','.')
axis([-inf,L/1000,-inf,inf])
title('Diagrama de Fuerza Cortante en la viga')
xlabel('Distancia [m]') % etiqueta x-axis
ylabel('Fuerza Cortante, V [kN]') % etiqueta y-axis
%**************************************************************************
%% Momento Flector M
%(valor positivo cuando genere tensiones debajo de la viga
%Aporte de las cargas puntuales P Y DE LAS DISTRIBUIDAS

for i=1:n
for j=1:X(i)
Mizq=Ra(i)*Xgraf(j); % Función del momento flector por la izquierda
MgrafP(j)=MgrafP(j)+Mizq; % Acumula momentos para cada carga
%Suma de todos los momentos flectores generadas a la izquierda de las cargas aplicadas
y almacenadas en Mgraf
end

for j=X(i)+1:L+1
Mder=Rb(i)*(L-Xgraf(j)); % Función del momento flector por la derecha
MgrafP(j)=MgrafP(j)+Mder; % Acumula momentos para cada carga
%Suma de todos los momentos flectores generadas a la derecha de las cargas aplicadas y
almacenadas en Mgraf
end
end

Mgraf=MgrafP/1000; %Conversión de kN-m


[Mmax, LocationJ] = max(Mgraf(:)); %Extracción del valor máximo
Mmax; %Momento Flector máximo de la viga
Xmax=Xgraf(LocationJ)/1000; %Ubicación del Momento Flector máximo

% Gráfica del Momento Flector [kN-m]


figure('Color','white');
stem(Xgraf/1000,-Mgraf/1000,'Fill','red','MarkerEdgeColor','red','MarkerSize',4,'Marker','.')
axis([-inf,L/1000,-inf,inf])
title('Diagrama del Momento Flector en la Viga')
xlabel('Distancia, [m]') %x-axis label
ylabel('Momento Flector, [kN-m]') %y-axis label

%**********************************************************************
%FIN DEL ANALISIS DE VIGA
%**********************************************************************
EJEMPLO 2
Calcular el momento de inercia centroidal respecto al eje x
de una sección tubular de forma circular o elíptica.
Código en Matlab: MI_CircElipTubo.m
%RESISTENCIA DE MATERIALES 1 (ING 215) - 2016-2
%************************************************************

%% FILOSOFÍA DE LA SOLUCIÓN
%El momento de inercia Ix es el integral de y^2 por el diferencial de área dA
%Como existe simetria con los dos ejes, se determinará el momento de inercia como 4 veces
%la suma de dos areas (A1 y A2) en el primer cuadrante.
%A1 es la area entre los dos perímetros, definida entre x=0 y x=r1
%A2 es la area entre los dos perímetros, definida entre x=r1 y x=R1

%**************************************************************************
%% INGRESO DE DATOS DEL PROBLEMA
%**************************************************************************

clear; clc; close all; % limpia todo


tit = 'Dimensiones de la elipse/círculo tubular';
prompt = {'Distancia interior r1 en x [m]','Distancia interior r2 en y [m]',...
'Distancia exterior R1 en x [m]','Distancia exterior R2 en y [m]'};
def = {'2', '3', '4','6'};
resp = inputdlg(prompt,tit,[1 40],def);
r1=sscanf(resp{1},'%f');
r2=sscanf(resp{2},'%f');
R1=sscanf(resp{3},'%f');
R2=sscanf(resp{4},'%f');

%Gráfica de la seccion
t = linspace(0,2*pi);
xlabel('eje x');
ylabel('eje y');
patch([R1*cos(t),r1*cos(t)],[R2*sin(t),r2*sin(t)],'b','FaceAlpha',0.2,'EdgeColor','b');
%***********************************************************************
%% CÁLCULO DEL MOMENTO DE INERCIA
%**************************************************************************

syms x y; %definicion de variables simbólicas


y1=r2*sqrt(1-x^2/r1^2); %definicion del perímetro interior
y2=R2*sqrt(1-x^2/R1^2); %definicion del perímetro exterior
I1 = int(int(y^2, y, y1, y2), x, 0, r1); %cálculo del momento de inercia del área A1,
desde x=0 hasta x=r1
I2 = int(int(y^2, y, 0, y2), x, r1, R1); %cálculo del momento de inercia del área A2,
desde x=r1 hasta x=R1
Ixgeneral = 4 * (I1 + I2); %momento de inercia total
Ixgeneral_exp=vpa(Ixgeneral, 5);
msgbox(['Ix= ', char(Ixgeneral_exp)]);

También podría gustarte