Вы находитесь на странице: 1из 37

FACULTAD DE CIENCIAS E INGENIERA

RESISTENCIA DE MATERIALES 1

TUTORA

TALLER DE PROGRAMACIN CON MATLAB


Objetivos de la tutora

Definir el contenido mnimo requerido en los trabajos de


programacin.

Explicar la secuencia lgica para resolver los problemas


en cada trabajo.

Familiarizarse con el lenguaje de programacin


empleado en Matlab.
Por qu tenemos que resolver un
problema de programacin?

En el mundo actual, toda ingeniera y especialidad requiere


habilidades en la programacin para generar herramientas
que permitan sistematizar y agilizar el clculo.

Por ejemplo, un ingeniero civil no debe tener complejidad en


desarrollar herramientas para el clculo de propiedades
geomtricas, de fuerzas internas en estructuras simples,
determinar el periodo de vibracin de un oscilador, clculo
de refuerzo en elementos simples de concreto armado, etc.
Cmo resolvemos un problema de
programacin

Planteamiento de la secuencia de
solucin (diagrama de flujo)

Identificacin de datos de entrada,


datos de salida, y restricciones.

Escribir las funciones y los programas.

Armar la presentacin de los datos de


salida (GUI o ventana de comandos).
Lenguaje De Programacin Matlab

MATLAB: MATrix LABoratory

Fabricante: Mathworks Inc.


Software matemtico que ofrece un IDE con un
lenguaje de programacin propio.
Permite: manipular matrices, representar datos y
funciones, implementar algoritmos, creacin de GUI y
comunicacin con otros programas.
Definicin de variables

MATLAB permite trabajar con nmeros de tipo entero con y


sin signo, as como punto flotante de doble precisin, la cual
es la condicin por defecto al crear una variable. Para crear
una variable escalar, slo 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
maysculas y minsculas.
Definicin 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 aritmticas como


sumas y multiplicaciones de manera bastante sencilla para definir
var2. Si no se desea mostrar algn resultado, se debe finalizar la
lnea respectiva con un punto y coma:

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

Ejercicio: Definir algunas otras variables y cargar valores.


Definicin 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]
Definicin de vectores

Tambin es posible direccionar directamente los elementos de un


vector para leer o corregir un componente especfico.

>> 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.


Definicin de vectores

Notacin rpida de MATLAB: Si se desea definir un vector,


cuyo primer elemento es a y el ltimo es b igualmente
espaciados h (ejemplo tpico: definir un intervalo de
tiempo), entonces es conveniente usar la siguiente notacin:

>> a = 0; %Valor inicial


>> b = 10; %Valor final
>> h = 0.1; %Intervalo entre componentes, paso
>> t = a: h: b; %Notacin rpida de MATLAB para vector
Definicin de vectores

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


con una cierta cantidad de elementos N entre dos lmites
conocidos a y b, entonces el comando linspace es ms
conveniente.

>> a = 0;
>> b = 2*pi;
>> N = 1000;
>> t2= linspace (a, b, N); %Crea un vector de 1000 elementos entre a y b
Definicin 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 ms
pequeas (tener siempre en consideracin 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 tamao 3x3 y 5x4


Definicin de matriz

Por concatenacin 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, tambin 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
Construccin de
curvas 2D
La facilidad y elegancia en la
construccin de curvas planas
y en el espacio es una de las
caractersticas ms resaltantes
de MATLAB. Para el caso de
curvas en un plano, la
instruccin plot permite
graficar un vector de puntos X
contra un vector Y, como se
muestra a continuacin.
Construccin de curvas 2D
%Ejemplo de uso de instruccin plot

t = 0:0.05:10; %Define tiempo en notacin 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 lneas de grilla
title('Probando los grficos', 'FontSize', 24) % Ttulo de la grfica,
% tamao 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
Construccin de curvas 2D
Construccin de superficies 3D

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


siguiente cdigo de ejemplo:

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


R = sqrt(X.^2 + Y.^2) + eps; % Define funcin R (x, y),
%eps: el nmero ms pequeo
Z = sin(R)./R; % Evala funcin sinc(R)
mesh(Z); % Genera superficie en 3D
Construccin 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 grfico para x = [-10 10].

3. Dibuje las siguientes curvas polares:


r = 1 (circunferencia)
r = sin (2)
Ejercicio: grafica funcin

1. Implementar la siguiente funcin 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 SOLUCIN (DIAGRAMA DE FLUJO)

IDENTIFICACIN DE DATOS DE
ENTRADA Y RESTRICCIONES

ESCRIBIR LAS FUNCIONES Y LAS


SECUENCIAS

ARMAR LA PRESENTACIN 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 lneas rectas.
PLANTEAMIENTO DE LA SECUENCIA
Ingresar L DE SOLUCIN (DIAGRAMA DE FLUJO)

IDENTIFICACIN DE DATOS DE
Ingresar n ENTRADA Y RESTRICCIONES

ESCRIBIR LAS FUNCIONES Y LAS


Contador SECUENCIAS
i=1
ARMAR LA PRESENTACIN 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
Contador DE SOLUCIN (DIAGRAMA DE FLUJO)

i=1
IDENTIFICACIN DE DATOS DE
ENTRADA Y RESTRICCIONES

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


SECUENCIAS
RBi = Pixi / L
ARMAR LA PRESENTACIN 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
Contador DE SOLUCIN (DIAGRAMA DE FLUJO)

i=1
IDENTIFICACIN DE DATOS DE
ENTRADA Y RESTRICCIONES

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


SECUENCIAS
RBi = Pixi / L
ARMAR LA PRESENTACIN DE LOS
DATOS DE SALIDA
DMF(izqXi) = DMF(izqXi) + RAixi

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

i=i+1

Y
i=n Imprimir DMF
N
Cdigo en Matlab: Fuerzas_viga.m
% ************************************************************
% INICIO DEL ANLISIS DE LA VIGA
% ************************************************************
%% FILOSOFA DE LA SOLUCIN
% Se realizar el anlisis para cada carga de manera independiente. Luego,
% por superposicin se sumarn las respuestas para obtener la respuesta
% total. El grfico 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)','Ubicacin Xi de la fuerza Pi (i=1..n) [m]',...
'Fuerza Aplicada Pi [kN]'};
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'); %Ubicacin Xi de las cargas aplicadas
P=sscanf(resp{3},'%f')*10^3; %Valor de las cargas aplicadas [N]
%Signo negativo = sentido de gravedad
%Signo positivo = sentido hacia arriba
%Respuestas sern en m y N. Y las grficas se escalarn para kN y kN*m
%***********************************************************************
%% CLCULOS PRELIMINARES
n=size(X,1); %Nmero de cargas aplicadas en el sistema
Xr=L-X; %Longitud complementaria a la ubicacin de cada carga

% Creacin de Vectores para almacenar las respuestas


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

%% Clculo de reacciones en A y B para cada carga independiente

for i=1:n;
Rb(i)=-P(i)*X(i)/L; %Reaccin en B.
Ra(i)=-P(i)*Xr(i)/L; %Reaccion en A.
end

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

%% Creacin de vectores para almacenar respuestas para las grficas

% Se discretizar la viga para su anlisis y respuesta

Xgraf=0:1:L; %Posicin en X para cada punto graficado


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

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

for i=1:n
Vizq=Ra(i); %Fuerza cortante a la izquierda de la carga
Vder=Ra(i)+P(i); %Fuerza cortante a la derecha de la carga
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); %Reaccin total en el apoyo A [N]


RB=sum(Rb); %Reaccin total en el apoyo B [N]
% Grfica 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

for i=1:n
for j=1:X(i)
Mizq=Ra(i)*Xgraf(j); % Funcin 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)); % Funcin 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; %Conversin de kN-m


[Mmax, LocationJ] = max(Mgraf(:)); %Extraccin del valor mximo
Mmax; %Momento Flector mximo de la viga
Xmax=Xgraf(LocationJ)/1000; %Ubicacin del Momento Flector mximo

% Grfica 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 seccin tubular de forma circular o elptica.
Cdigo en Matlab: MI_CircElipTubo.m
%RESISTENCIA DE MATERIALES 1 (ING 215) - 2016-2
%************************************************************

%% FILOSOFA DE LA SOLUCIN
%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 permetros, definida entre x=0 y x=r1
%A2 es la area entre los dos permetros, definida entre x=r1 y x=R1

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

clear; clc; close all; % limpia todo


tit = 'Dimensiones de la elipse/crculo 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');

%Grfica 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');
%***********************************************************************
%% CLCULO DEL MOMENTO DE INERCIA
%**************************************************************************

syms x y; %definicion de variables simblicas


y1=r2*sqrt(1-x^2/r1^2); %definicion del permetro interior
y2=R2*sqrt(1-x^2/R1^2); %definicion del permetro exterior
I1 = int(int(y^2, y, y1, y2), x, 0, r1); %clculo del momento de inercia del rea A1,
desde x=0 hasta x=r1
I2 = int(int(y^2, y, 0, y2), x, r1, R1); %clculo 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)]);

Вам также может понравиться