Está en la página 1de 43

“Año de la Unidad, la Paz y el Desarrollo”

Universidad Nacional de Ingenierı́a

Facultad de Ingenierı́a Mecánica

Departamento de Ingenierı́a Mecánica Eléctrica

Práctica Calificada 02
Curso: Cálculo por Elementos Finitos
Sección: E

Tracción Unidimensional Con


Deformación Térmica

ESPINOZA ROJAS, LUIS ERASMO (20212071C)

Profesor asignado: Miguel Ángel Ampuero Suárez

Fecha de Entrega: 14 de octubre de 2023


Semestre Académico: 2023-II
Índice general

1. Enunciado del Problema 1


1.1. Actividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2. Redacción del Código de MATLAB 3


2.1. Redacción del Código de MATLAB que ejecuta el Método Numérico . . . . . . . 3
2.2. Código de MATLAB Completo que ejecuta el Método Numérico . . . . . . . . . 12
2.3. Redacción del Código de MATLAB que analiza las Iteraciones del Método Numérico 14
2.4. Código de MATLAB Completo que analiza las Iteraciones del Método Numérico 25

3. Ejecución del Código de MATLAB 29


3.1. Resultados Obtenidos del Código de MATLAB . . . . . . . . . . . . . . . . . . . 29
3.2. Análisis de los Resultados del Código de MATLAB . . . . . . . . . . . . . . . . . 36

i
Índice de figuras

1.1. Enunciado del Problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

2.1. Estructura Condicional switch anidada en un Bucle while . . . . . . . . . . . . . 24

3.1. Gráfica del Error Absoluto versus el Número de Elementos de la Partición . . . . 30


3.2. Gráfica del Error Relativo versus el Número de Elementos de la Partición . . . . 31
3.3. Gráficas del Esfuerzo Máximo y el Elemento afectado por el Esfuerzo Máximo . . 32
3.4. Gráficas del Esfuerzo Mı́nimo y el Elemento afectado por el Esfuerzo Mı́nimo . . 33
3.5. Resultado de la Ejecución del Código de MATLAB para un Contador igual a 5 . 34
3.6. Gráficas del Máximo Desplazamiento Nodal y el Nodo afectado por el Desplaza-
miento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.7. Resultado de la Ejecución del Código de MATLAB para un Contador igual a 6 . 34
3.8. Gráficas de la Reacción en el Apoyo versus el Número de Elementos . . . . . . . 35

ii
Índice de cuadros

2.1. Tabla de Variables usadas en el Código y el Informe . . . . . . . . . . . . . . . . 4


2.2. Comparación de Variables del Código número 2.1 y el Código número 2.3 . . . . 15

iii
Nomenclature

α Coeficiente de Dilatación Térmica Lineal de la Placa Triangular


∆T Variación de Tempeatura de la Placa Triangular
γ Peso Especı́fico de la Placa Triangular
µx Media Aritmética de la Variable Vectorial “x”

σx Desviación Estándar de la Variable Vectorial “x”


θi Carga por Deformación Térmica del Elemento número “i”
Ai Área Transversal del Elemento número “i”

Bi Base del Triángulo número “i”


bi Base del Elemento número “i”
CVx Coeficiente de Varianza de la Variable Vectorial “x”
E Módulo de Young de la Placa Triangular

e absoluto Error Absoluto al calcular la Reacción en el Apoyo


ei Esfuerzo de Tracción que afecta al Elemento número “i”
F(n+1)×1 Vector Columna de Fuerzas que actúan sobre los “n + 1” Nodos

Fi Fuerza que actúa sobre el Nodo número “i”


K(n+1)×(n+1) Matriz de Rigidez de “n + 1” Elementos
K (a) (b) Elemento de la Matriz de Rigidez perteneciente a la fila “a” y a la columna “b”

ki Constante de Elasticidad del Elemento número “i”


L Altura de la Placa Triangular
lk Longitud del Elemento número “k”

N Número de Iteraciones del Método Numérico


n Número de Elementos del Método Numérico
PA Fuerza externa que actúa sobre la Placa Triangular
Q(n+1)×1 Vector Columna de Desplazamientos Nodales de “n + 1” Elementos

Qi Desplazamiento realizado por el Nodo número “i”

iv
R absoluto Reacción en el Apoyo calculada a partir de la Primera Condición del Equilibrio
R numérico Reacción en el Apoyo mediante el Método Numérico del Informe
t Espesor de la Placa Triangular

Ti Fuerza Térmica que actúa sobre el Nodo número “i”


Wi Peso del Elemento número “i”
xk Elemento número “k” de la Variable Vectorial “x”

v
Capı́tulo 1

Enunciado del Problema

Dado la siguiente placa triangular, cuyo espesor es constante,calcular los esfuerzos en cada
uno de los elementos finitos; y la reacción en el apoyo.

Considere los siguientes datos:

PA = 20 kN

t = 150 mm

E = 3,0 × 105 N/mm2

γ = 8,0 g.f /cm3 = 78,45 × 10−6 N/mm3

α = 11 × 10−6 (C ◦ )−1
∆ T = 110 C ◦

El problema está definido por el gráfico de la imagen número 1.1:

Figura 1.1: Enunciado del Problema

1
1.1. Actividades

De acuerdo a lo trabajado en el aula, escribir un código en MATLAB que pueda realizar las
siguientes funciones:

1. Generalizar la discretización de la placa triangular en elementos finitos rectangulares, para


un número “N” de elementos finitos.

2. Usar el comando de bucle for para el ensamble de la Matriz de Rigidez Global; mediante
el criterio de los grados de libertad de las matrices locales.

3. Realizar una gráfica del error cometido por cada iteración del método al calcular el valor
de la reacción en el apoyo; con respecto al número de elementos en cada iteración.

El error cometido en cada iteración se calcula mediante la fórmula número 1.1:

e absoluto = R absoluto − R numérico (1.1)

2
Capı́tulo 2

Redacción del Código de


MATLAB

2.1. Redacción del Código de MATLAB que ejecuta el


Método Numérico

El método de cálculo por elementos finitos que se emplea para la redacción de este código es
el mismo que se utiliza para la resolución del problema mencionado en la presentación número [1].

Dado que el código tiene como propósito ser ejecutado con la mayor facilidad posible, en el
inicio del código se redactan las siguientes instrucciones; mediante las cuales se eliminan las va-
riables almacenadas en el Espacio de Trabajo de MATLAB, se limpia el contenido de la Ventana
de Comandos, y se cierran todas las gráficas abiertas por MATLAB.

Las instrucciones también cambian el formato numérico de MATLAB al formato long, tal y
como se muestra a continuación:

clc;
close all;
format long;;

La siguiente sección del código está destinada a almacenar los datos de las condiciones iniciales
que da el problema en variables, empleando una notación lo más similar posible a la que se usó en
la redacción de este informe. En forma de comentarios, se lista junto a cada variable su respectivo
nombre, junto a las unidades del Sistema Internacional en las que se encuentran expresadas:

P = 20000; % En Newtons
t = 150; % En milı́metros
E = 300000; % En N/mm^2
Y = 78.45 / 1000000; % En N/mm^3
L = 1200; % Longitud. En milı́metros
B = 1500; % Base. En milı́metros
a = 11/1000000;
dT = 110; % Incremento temperatura. En °C.

En la tabla número 2.1 se muestra una comparación entre las variables presentes en la sección
del código y las variables presentes en el informe:

3
Cuadro 2.1: Tabla de Variables usadas en el Código y el Informe

Variable del Código Variable del Informe Interpretación de la Variable

Fuerza externa que actúa sobre la Placa


P PA
Triangular

t t Espesor de la Placa Triangular

E E Módulo de Young de la Placa Triangular

Y γ Peso Especı́fico de la Placa Triangular

Coeficiente de Dilatación Térmica Lineal de


a α
la Placa Triangular

Variación de Tempeatura de la Placa


dT ∆T
Triangular

L L Altura de la Placa Triangular

B B Base de la Placa Triangular

Luego de eso, el código de MATLAB solicita al usuario el número de elementos con los cuales
ejecutar el método descrito en la fuente [1], y almacena este valor en una variable. Esta sección
del código define un vector vertical de elementos nulos como el vector que contendrá los valores
de las longitudes de las bases de los elementos rectangulares; de tal manera que este vector se
denomina “b”.

El código también define un vector, denominado “l”, en el que se almacenan las longitudes
de las alturas de los elementos rectangulares. Si el número de elementos es par, todas las alturas
tienen la misma longitud.

Por el contrario, si el número de elementos es impar, la estructura condicional if toma los valores
correspondientes a las alturas del elemento central y el elemento consecutivo a este elemento; y
los modifica de tal manera que la longitud del elemento central se reduce en un 50 %, mientras
que la longitud del elemento consecutivo aumenta en un 50 %.

Esta modificación de las alturas de los elementos tiene como propósito garantizar que el nodo
inferior del elemento central se encuentre en el punto medio de la altura de la placa triangular;
ya que en ese nodo actúa la fuerza externa. Esta sección del código se muestra a continuación:

fprintf(’ \n’);
n = input(’ Introduzca el número de elementos: ’); % Número de elementos
l = ones(n,1) .* L/n; % Longitudes de los elementos, en milı́metros
b = zeros(n,1); % Bases de los elementos, en milı́metros

if mod(n,2) == 1
l((n + 1)/2) = L/(2 .* n);
l((n + 3)/2) = (3 .* L)/(2 .* n);
end

Por otra parte, es posible trazar segmentos paralelos a la base del triángulo; de tal manera que

4
estos segmentos pasen cada uno por los nodos de los ementos ubicados en el interior de la placa
triangular. De esta manera, la placa triangular estará dividida en trapecios y en un triángulo
ubicado en la placa inferior de la placa; de tal manera que la altura de la figura número “i” mide
lo mismo que la altura del elemento número “i”.

En ese sentido, es posible formar triángulos semejantes uniendo el triángulo inferior con los
trapecios que se ubican por encima de su base; con lo cual se puede formar un número de
triángulos igual al número de elementos delimitados por el método.

Si se cuentan los triángulos desde arriba hacia abajo - tal y como lo hace el código de MATLAB
con los elementos delimitados -, se puede usar el Teorema de la Semejanza de Triángulos para
establecer la siguiente relación:
  Xn
!   n i−1
!   i−1
!
Bi 1 1 X X 1 X
= lk = lk − lk = L− lk
B L k=i
L k=1 k=1
L k=1

  i−1
!
B X
∀ 1 ≤ i ≤ n =⇒ Bi = L− lk (2.1)
L k=1

De acuerdo al método descrito en la fuente número [1], el elemento número “i” se encuentra
entre las bases de los triángulos número “i” y número “i + 1”; por lo que la medida de de la base
del elemento número “i” puede ser calculada de acuerdo al método mediante la fórmula número
2.2:
  "  i−1
!   i−1+1
!#
Bi + Bi+1 1 B X B X
bi = = L− lk + L− lk
2 2 L k=1
L k=1

    i−1 i
!
1 B X X
=⇒ bi = L− lk + L − lk
2 L k=1 k=1

  i−1 i−1
!
B X X
=⇒ bi = 2L − lk − lk − li
2L k=1 k=1

 " i−1
! #
B X
∀ 1 ≤ i ≤ n =⇒ bi = 2 L− lk − li (2.2)
2L k=1

Para que la fórmula número 2.2 sea congruente, el valor de la variable “l0 ” es un valor nulo.
El problema es que el vector que almacena los valores de las alturas de los elementos no puede
reconocer la presencia de un elemento número 0; por lo que es necesario hacer uso de una fórmula
independiente para calcular la medida de la base del elemento número 1.

Por este motivo, para calcular la medida de la base del elemento número 1, es necesario ha-
cer que el valor de la sumatoria en la fórmula número 2.2 sea nulo. La sección de código que
tiene la función de almacenar las medidas de las bases de los elementos en el vector nulo previa-
mente definido hace uso de un bucle “for” para esta tarea, usando una lı́nea de código adicional
antes del bucle para calcular la medida de la base del elemento número 1:

5
b(1) = (B/2) .* (1 + (L - l(1))/L);
s = L; % Variable auxiliar
for i = 2:n
b(i) = B .* (2 .* (s - l(i - 1)) - l(i))/(2 .* L);
s = s - l(i - 1);
end

El código tiene que calcular el valor de cada una de las áreas transversales de los elementos
en los que se particionó la placa triangular, luego debe de almacenar estos valores en un vector
columna; también debe calcular los pesos de cada uno de los elementos particionados, y almace-
nar estos valores en otro vector columna.

De acuerdo a la fuente número [1], los valores del área transversal y el peso de cada uno de
los elementos se pueden calcular haciendo uso de las fórmulas número 2.3 y número 2.4, respec-
tivamente:

∀ 1 ≤ i ≤ n =⇒ Ai = (bi ) (t) (2.3)

∀ 1 ≤ i ≤ n =⇒ Wi = (Ai ) (li ) (γ) (2.4)


Debido a la naturaleza de las fórmulas número 2.3 y 2.4, es posible definir los vectores vertica-
les que contengan los valores de las áreas transversales y de los pesos haciendo uso del producto
escalar con los vectores que almacenan los valores de las longitudes de los elementos y las medidas
de sus bases; y también se puede hacer uso del producto vectorial con el operador “.* ”.

Además de definir estos dos vectores columna, la sección de código mostrada también define
dos vectores columna nulos; los cuales se usan para almacenar los valores de las fuerzas que
actúan en los nodos delimitados por los elementos y los valores de las fuerzas térmicas que
actúan sobre estos nodos. Debido que un número “n” de elementos delimita un número ”n + 1”
de nodos, estos dos vectores columna tienen “n + 1” filas; como se muestra a continuación:

A = t .* b; % Área transversal de los elementos, en mm^2


W = Y .* A .* l; % Peso de los elementos, en Newtons
F = zeros(n + 1,1); % Fuerzas en los nodos, en Newtons
T = zeros(n + 1,1); % Fuerza termica en los nodos, en N;

Para hallar el valor de los elementos del vector columna que almacena los valores de las
fuerzas térmicas que actúan sobre los nodos, primero se deben de calcular los valores de las
cargas equivalentes que genera la deformación térmica de cada uno de los elementos; para lo cual
se hace uso de la fórmula número 2.5, tal y como lo indica la fuente número [1]:

∀ 1 ≤ i ≤ n =⇒ θi = (Ai ) (E) (α) (∆ T ) (2.5)


Entonces, el valor de cada uno de los elementos del vector columna que almacena los valores
de las fuerzas térmicas se calcula realizando un cálculo con vectores parciales en el que se ahonda
con más detalle en la fuente número [1]; de tal manera que el resultado de este cálculo es la
fórmula número 2.6:

Ti = θi−1 − θi = (Ai−1 ) (E) (α) (∆ T ) − (Ai ) (E) (α) (∆ T )

6
∀ 1 ≤ i ≤ n + 1 =⇒ Ti = (Ai−1 − Ai ) (E) (α) (∆ T ) (2.6)
Hay que tener en cuenta que, con la fórmula número 2.6 sucede el mismo inconveniente que
sucede en la fórmula número 2.2: el vector que almacena los valores de las áreas transversales no
tiene un valor para un elemento número 0, o para un elemento número “n + 1”; por lo que, para
calcular los valores número 1 y número “n + 1” del vector vertical, es necesario hacer que estos
dos valores sean nulos.

Por este motivo, en la sección del código que determina los valores de las fuerzas térmicas que
actúan sobre los nodos, se hace uso de un bucle for que aplica la fórmula número 2.6 para todos
los elementos del vector vertical; excepto para los elementos número 1 y número “n + 1” del vec-
tor, para los cuales se usan dos lı́neas de código fuera del bucle, como se muestra a continuación:

T(1) = -1 .* E .* A(1) .* a .* dT;


for i = 2:n
T(i) = (A(i - 1) - A(i)) .* E .* a .* dT;
end
T(n + 1) = E .* A(n) .* a .* dT;

Para el caso del vector columna que contiene los valores de las fuerzas, se hace uso de un
proceso similar al que se hizo previamente. De acuerdo a lo que se menciona en la fuente número
[1], es posible realizar un cálculo preliminar para hallar el valor de la fuerza que actúa sobre cada
uno de los nodos; para lo cual se tiene que hacer uso de la fórmula número 2.7:

Wi−1 Wi Wi−1 + Wi
∀ 1 ≤ i ≤ n + 1 =⇒ Fi = + + Ti = + Ti (2.7)
2 2 2
Hay que tener en cuenta que la fórmula número 2.7 no aplica para hallar el valor de la fuerza
que actúa sobre el nodo número 1. Sin embargo, la expresión que permite hallar el valor de la
fuerza que actúa sobre el nodo número 1 es la fórmula número 2.8:

W1
F1 = + R numérico + T1 (2.8)
2
Debido que el valor de la reacción en el apoyo obtenido mediante el método numérico de
la fuente número [1] no es conocido, el valor de la fuerza que actúa sobre el nodo número 1 es
desconocido; y por ese motivo la sección de código encargada de asignar los valores a las fuerzas
que actúan sobre los nodos no calcula el valor de la fuerza en este nodo.

Por otra parte, para calcular el valor de la fuerza que actúa en el nodo número “n + 1”, se debe
tener en cuenta que el vector que almacena los pesos de los elementos no tiene un valor número
“n + 1”; por lo que, para que la fórmula número 2.7 sea consistente con el valor de la fuerza que
actúa en el nodo número “n+1”, el valor del peso del elemento número “n+1” tiene que ser nulo.

La sección del código encargada de calcular los valores de las fuerzas que actúan en los no-
dos hace uso de un bucle for para asignar los valores de estas fuerzas para cada uno de los nodos,
empezando a partir del nodo número 2; debido al motivo expuesto en el anterior párrafo, y tiene
una lı́nea de código adicional para calcular el valor de la fuerza que actúa en el nodo número
“n + 1”.

7
Esta sección de código también cuenta con una estructura condicional if que permite identi-
ficar la posición del nodo sobre el cual actúa la fuerza external, dependiendo de si el número
de elementos en los cuales fue particionada la placa triangular es par o impar; y que suma al
valor de la fuerza que actúa sobre ese nodo el valor de la fuerza externa, tal y como se muestra
a continuación:

for i = 2:n
F(i) = (W(i - 1) + W(i))/2 + T(i);
end
F(n + 1) = W(n)/2 + T(n + 1);

if mod(n,2) == 1
F((n + 3)/2) = F((n + 3)/2) + P;
else
F(n/2 + 1) = F(n/2 + 1) + P;
end

El método numérico empleado en este informe se sustenta en el hecho que la placa triangular
se deforma siguiendo un comportamiento elástico; por lo que es posible calcular la constante
elástica asociada a cada uno de los elementos en los que está particionada, para lo cual se puede
hacer uso de la fórmula número 2.9:

(E) (Ai )
∀ 1 ≤ i ≤ n =⇒ ki = (2.9)
li
De manera similar a la manera en la que se definieron los vectores columna que contienen los
valores de las áreas transversales y los pesos de los elementos que conforman la placa triangular,
se puede hacer uso de los operadores de producto matricial “.* ” y de división matricial “./ ”
para calcular los valores de las constantes elásticas de todos los elementos; y almacenarlas en un
vector columna.

La sección de código en la que se define el vector columna que contiene los valores de las cons-
tantes elásticas de los elementos que conforman a la placa triangular también define un vector
columna, de elementos nulos, que almacenará los valores de los desplazamientos de los nodos
de la placa triangular; y una matriz cuadarada de elementos nulos, la cual será la “Matriz de
Rigidez”.

k = E .* (A ./ l); % Constantes elásticas de los elementos, en N/mm


K = zeros(n + 1,n + 1); % Matriz de rigidez, en N/mm
Q = zeros(n + 1, 1); % Vector desplazamiento, en milı́metros

La Matriz de Rigidez es definida en la fuente número [1] como una matriz cuadrada com-
puesta por submatrices cuadradas de orden 2 × 2, las cuales están asocidadas cada una a uno de
los elementos en los que se particiona la placa triangular. Estas matrices están dispuestas a lo
largo de la diagonal principal de la Matriz de Rigidez.

Mediante esta división de la Matriz de Rigidez en submatrices, es posible calcular los valores
de los elementos de la Matriz de Rigidez contenidos en su diagonal y cercanos a ella; tal y como
lo establece la fórmula número 2.10. El resto de los elementos de la Matriz de Rigidez son nulos.

   
K (i) (i) K (i) (i+1) ki−1 + ki − ki
∀ 1 ≤ i ≤ n =⇒ = (2.10)
K (i+1) (i) K (i+1) (i+1) − ki ki + ki+1

8
Debido que el vector columna que contiene a los valores de las constantes de elasticidad de
los elementos no contiene una constante número 0 o una constante número “n + 1”, para que la
fórmula número 2.10 sea concordante con el método numérico de la fuente número [1], los valores
de estos dos elementos en la fórmula deben de ser nulos.

Debido que, al denotar a la Matriz de Rigidez en el código de MATLAB, todos sus elemen-
tos son nulos, la sección de código que calcula los valores de los elementos de esta matriz no
necesita evaluar todos los elemetos de la matriz; sino solamente aquellos que pertenecen a la
diagonal de la matriz, o que son vecinos con los elementos de la diagonal de la matriz.

Para evaluar a estos elementos de la Matriz de Rigidez, la sección de código hace uso de un
bucle for que toma cada uno de los valores de las constantes de elasticidad de los elementos
que conforman la placa triangular; y los va sumando con respecto a las distintas submatrices de
orden 2 × 2; las cuales se encuentran alineadas a lo largo de la diagonal de la Matriz de Rigidez,
como se muestra a continuación:

for i = 1:n
K(i,i) = K(i,i) + k(i);
K(i,i + 1) = K(i,i + 1) - k(i);
K(i + 1,i) = K(i + 1,i) - k(i);
K(i + 1, i + 1) = K(i + 1, i + 1) + k(i);
end

De acuerdo al método numérico empleado en este informe, la Matriz de Rigidez de la placa


triangular se relaciona con el vector columna de desplazamientos nodales y el vector columna de
las fuerzas que actúan sobre los nodos mediante la fórmula matricial número 2.11:

K(n+1)×(n+1) × Q(n+1)×1 = F(n+1)×1 (2.11)


Debido que no se conoce el valor del primer elemento del vecyor columna que almacena los
valores de las fuerzas que actúan sobre los nodos, es posible modificar la expresión número 2.11
de la siguiente manera; sabiendo que el desplazamiento del primer nodo es nulo; debido que este
nodo está sujeto al apoyo del cual está colgando la placa triangular.

K11 K12 0 N/mm ... 0 N/mm 0 mm F1


    
 K21 K22 K23 ... 0 N/mm  Q2   F2 
0 N/mm K32 K33 ... 0 N/mm Q3 F3
    
  = 
 .. .. .. .. ..  ..   .. 
 . . . . .  .   . 
0 N/mm 0 N/mm 0 N/mm . . . K (n+1) (n+1) Qn+1 Fn+1

K21 K22 K23 ... 0 N/mm 0 mm F2


    
 0 N/mm K32 K33 ... 0 N/mm  Q2   F3 
0 N/mm 0 N/mm K43 ... 0 N/mm Q3 F4
    
  = 
 .. .. .. .. ..  ..   .. 
 . . . . .  .   . 
0 N/mm 0 N/mm 0 N/mm . . . K (n+1) (n+1) Qn+1 Fn+1
X
=⇒ (K (i) (j) ) (Qj ) = Fi (2.12)
2 ≤ i ≤ n+1

1 ≤ j ≤ n+1

9
Se puede apreciar en la fórmula número 2.12 que, para todo valor del número “i”, cuando el
número “j” vale 1, el producto del argumento de la sumatoria es nulo; debido a que el desplaza-
miento del primer nodo de la placa triangular es nulo. Entonces, se pude reformular la expresión
número 2.12; tal y como se muestra:
X X
(K (i) (j) ) (Qj ) = (K (i) (j) ) (Qj ) = Fi
2 ≤ i ≤ n+1 2 ≤ i ≤ n+1

1 ≤ j ≤ n+1 2 ≤ j ≤ n+1

K22 K23 0 N/mm ... 0 N/mm Q2 F2


    
 K32 K33 K34 ... 0 N/mm  Q3   F3 
0 N/mm K43 K44 ... 0 N/mm Q4 F4
    
  = 
 .. .. .. .. ..  ..   .. 
 . . . . .  .   . 
0 N/mm 0 N/mm 0 N/mm . . . K (n+1) (n+1) Qn+1 Fn+1

−1 
Q2 K22 K23 0 N/mm ... 0 N/mm F2
   
 Q3   K32 K33 K34 ... 0 N/mm   F3 
Q4 0 N/mm K43 K44 ... 0 N/mm F4
     
 =   
 ..   .. .. .. .. ..   .. 
 .   . . . . .   . 
Qn+1 0 N/mm 0 N/mm 0 N/mm . . . K (n+1) (n+1) Fn+1
(2.13)
Una vez calculado el valor numérico de todos los desplazamientos de los nodos de la placa
triangular mediante la fórmula número 2.13, la sección de código hace uso de la fórmula número
2.11 para determinar el valor de la fuerza que actúa en el nodo número 1; tal y como se muestra
a continuación:

Q(2 : end) = inv(K(2 : end, 2 : end)) * F(2 : end);


F = K * Q;

Mediante una modificación de la fórmula número 2.8 se puede calcular el valor de la reacción
en el apoyo obtenido mediante el método numérico descrito en la fuente número [1]; tal y como
se muestra en la fórmula número 2.14:

W1
R numérico = F1 − − T1 (2.14)
2
En la fuente número [1] se proporciona una igualdad vectorial para calcular los valores de los
esfuerzos de tracción a los que se encuentran sometidos cada uno de los elementos en los que fue
particionada la placa triangular; de tal manera que esta fórmula serı́a la fórmula número 2.15:

   
E  Qi
∀ 1 ≤ i ≤ n =⇒ ei = −1 1 − (E) (α) (∆ T ) (2.15)
li Qi+1

La sección de código encargada de definir el vector columna que contiene los valores de los
esfuerzos de tracción que afectan a los elementos que componen a la placa triangular denota un

10
vector columna cuyos elementos son iguales a la expresión “(E) (α) (∆ T )”, y luego hace uso de
un bucle for para aplicar la fórmula número 2.15 en todos los elementos de este vector; tal y
como se muestra a continuación:

R = F(1) - W(1)/2 - T(1); % Reacción del apoyo, en Newtons


e = ones(n,1) .* E .* a .* dT; % Matriz de esfuerzos, en N/mm^2

for i = 1:n
e(i) = (E/l(i)) * [-1, 1] * Q(i : i + 1) - e(i);
end

Para calcular el error absoluto producido pro el código de MATLAB al calcular el valor de la
reacción en el apoyo, se hace uso de la fórmula número 1.1; para lo cual se debe tener en cuenta
que, según la primera condición del equilibrio, el valor de la reacción en el apoyo se calcula de
acuerdo a la fórmula número 2.16:

(γ) (B) (L) (t)


R absoluto = PA + (2.16)
2
Dado que el valor de la reacción en el apoyo obtenido según el método numérico en la ecuación
número 1.1, la sección de código reemplaza esta igualdad por una suma entre los dos valores de
la reacción en el apoyo; debido que el valor de la reacción obtenida según el método numérico es
negativo. De esta manera, la fórmula número 1.1 serı́a reemplazada por la fórmula número 2.17:

(γ) (B) (L) (t)


e absoluto = R numérico + R absoluto = R numérico + PA + (2.17)
2
Es posible calcular el valor del error relativo producido por el código de MATLAB al calcular
el valor de la reacción de apoyo, tomando como referencia el valor de la reacción de apoyo
calculado mediante la fórmula número 2.16; para lo cual se hace uso de la fórmula número 2.18:

|e absoluto | |e absoluto |
e relativo = = (2.18)
R absoluto (γ) (B) (L) (t)
PA +
2
La sección de código de MATLAB define un vector columna de dos elementos, de tal manera
que uno de estos dos elementos es el error absoluto producido por el método numérico referido en
la fuente número [1]; mientras que el otro elemento es el error relativo generado pos este método
numérico, tal y como se muestra a continuación:

Err = zeros(2,1); % Errores en los cálculos


Err(1) = R + P + Y .* B .* t .* L/2;
Err(2) = abs(Err(1))/(P + Y .* B .* t .* L/2);

Por último, el código de MATLAB imprime en la ventana de comandos el vector columna de


desplazamientos nodales, el vector columna de esfuerzos de tracción, el valor de la reacción de
apoyo obtenido por el método numérico, el error absoluto generado por el método numérico, y
el error relativo generado por este método; tal y como se muestra a continuación:

11
disp(’ ’)
disp(’ Vector Desplazamiento (mm): ’)
disp(’ *---------------------------------* ’)
disp(Q);
disp(’ Vector Esfuerzo (N/mm^2): ’)
disp(’ *---------------------------------* ’)
disp(e);
disp(’ Reacción en el Apoyo (N): ’)
disp(’*---------------------------------* ’)
disp(R);
disp(’ Error Absoluto del Modelo (N):’)
disp(’ *---------------------------------* ’)
disp(Err(1));
disp(’ Error Relativo del Modelo: ’)
disp(’ *---------------------------------* ’)
disp(Err(2));

2.2. Código de MATLAB Completo que ejecuta el Método


Numérico

A continuación, se muestra una copia completa del código de MATLAB analizado en la


sección número 2.1 del informe:

clc;
close all;
format long;

P = 20000; % En Newtons
t = 150; % En milı́metros
E = 300000; % En N/mm^2
Y = 78.45 / 1000000; % En N/mm^3
L = 1200; % Longitud. En milı́metros
B = 1500; % Base. En milı́metros
a = 11/1000000;
dT = 110; % Incremento temperatura. En °C.

fprintf(’ \n’);
n = input(’ Introduzca el número de elementos: ’); % Número de elementos
l = ones(n,1) .* L/n; % Longitudes de los elementos, en milı́metros
b = zeros(n,1); % Bases de los elementos, en milı́metros

if mod(n,2) == 1
l((n + 1)/2) = L/(2 .* n);
l((n + 3)/2) = (3 .* L)/(2 .* n);
end

b(1) = (B/2) .* (1 + (L - l(1))/L);


s = L; % Variable auxiliar
for i = 2:n
b(i) = B .* (2 .* (s - l(i - 1)) - l(i))/(2 .* L);

12
s = s - l(i - 1);
end

A = t .* b; % Área transversal de los elementos, en mm^2


W = Y .* A .* l; % Peso de los elementos, en Newtons
F = zeros(n + 1,1); % Fuerzas en los nodos, en Newtons
T = zeros(n + 1,1); % Fuerza termica en los nodos, en N;

T(1) = -1 .* E .* A(1) .* a .* dT;


for i = 2:n
T(i) = (A(i - 1) - A(i)) .* E .* a .* dT;
end
T(n + 1) = E .* A(n) .* a .* dT;

for i = 2:n
F(i) = (W(i - 1) + W(i))/2 + T(i);
end
F(n + 1) = W(n)/2 + T(n + 1);

if mod(n,2) == 1
F((n + 3)/2) = F((n + 3)/2) + P;
else
F(n/2 + 1) = F(n/2 + 1) + P;
end

k = E .* (A ./ l); % Constantes elásticas de los elementos, en N/mm


K = zeros(n + 1,n + 1); % Matriz de rigidez, en N/mm
Q = zeros(n + 1, 1); % Vector desplazamiento, en milı́metros

for i = 1:n
K(i,i) = K(i,i) + k(i);
K(i,i + 1) = K(i,i + 1) - k(i);
K(i + 1,i) = K(i + 1,i) - k(i);
K(i + 1, i + 1) = K(i + 1, i + 1) + k(i);
end

Q(2 : end) = inv(K(2 : end, 2 : end)) * F(2 : end);


F = K * Q;
R = F(1) - W(1)/2 - T(1); % Reacción del apoyo, en Newtons
e = ones(n,1) .* E .* a .* dT; % Matriz de esfuerzos, en N/mm^2

for i = 1:n
e(i) = (E/l(i)) * [-1, 1] * Q(i : i + 1) - e(i);
end

Err = zeros(2,1); % Errores en los cálculos


Err(1) = R + P + Y .* B .* t .* L/2;
Err(2) = abs(Err(1))/(P + Y .* B .* t .* L/2);

disp(’ ’)
disp(’ Vector Desplazamiento (mm): ’)
disp(’ *---------------------------------* ’)

13
disp(Q);
disp(’ Vector Esfuerzo (N/mm^2): ’)
disp(’ *---------------------------------* ’)
disp(e);
disp(’ Reacción en el Apoyo (N): ’)
disp(’*---------------------------------* ’)
disp(R);
disp(’ Error Absoluto del Modelo (N):’)
disp(’ *---------------------------------* ’)
disp(Err(1));
disp(’ Error Relativo del Modelo: ’)
disp(’ *---------------------------------* ’)
disp(Err(2));

2.3. Redacción del Código de MATLAB que analiza las


Iteraciones del Método Numérico

El código de MATLAB correspondiente a esta sección del informe comienza de manera similar
a como comienza el código descrito en la sección 2.1, redactando las instrucciones que permiten
borrar los contenidos de la ventana de comandos, el espacio de trabajo y cerrar todas las ventanas
abiertas; con el fin de ahorrar memoria, además de cambiar el formato de escritura de MATLAB
a un formato long.

clc;
close all;
format long;

La sección de código también contiene una definición de las mismas variables elementales
vistas en la tabla número 2.1, las cuales denotan los mismos conceptos y tienen los mismos valores
numéricos que en la sección número 2.1. Esta sección del código se muestra a continuación:

P = 20000; % En Newtons
t = 150; % En milı́metros
E = 300000; % En N/mm^2
Y = 78.45 / 1000000; % En N/mm^3
L = 1200; % Longitud. En milı́metros
B = 1500; % Base. En milı́metros
a = 11/1000000;
dT = 110; % Incremento temperatura. En °C.

El código de MATLAB referido en esta sección del informe solicita al usuario introducir a
través de la ventana de comandos el número de iteraciones del método numérico referido en la
fuente número [1] que se debe evaluar; de tal manera que este valor es almacenado en la variable
“N”, tal y como se muestra a continuación:

fprintf(’ \n’);
N = input(’ Introduzca el número de procesos: ’); % Número de procesos
Err = zeros(N,2); % Valores obtenidos de los errores
Es = zeros(N,4); % Matriz de esfuerzos notables, en N/mm^2
D = zeros(N,2); % Matriz de desplazamientos máximos de nodos, en milı́metros
R = zeros(N,1); % Matriz de valores de la Reacción, en Newton

14
Una diferencia entre el código de MATLAB de esta sección del informe y el código de la
sección número 2.1 es que algunas de las variables del código de la sección número 2.1 fueron
redefinidas como variables matriciales o vectoriales; tal y como se aprecia en el cuadro número
2.2:

Cuadro 2.2: Comparación de Variables del Código número 2.1 y el Código número 2.3

Variable del Código 2.1 Variable del Código 2.3 Interpretación de la Variable

Matriz N × 2 que almacena los valores del


Err Err error absoluto y el error relativo de cada
iteración

Matriz N × 4 que almacena el valor del


máximo esfuerzo de tracción en cada
iteración - junto con el número del elemento
e Es en el que se produjo -, y el valor del mı́nimo
esfuerzo de tracción en cada iteración - junto
con el número del elemento en el que se
produjo -.

Matriz N × 2 que almacena el valor del


máximo desplazamiento nodal en cada
Q D
iteración, junto con el número del nodo que
tuvo este desplazamiento.

Vector columna de N elementos que


R R almacena los valores de la reacción en el
apoyo calculado en cada iteración

Para la elaboración del código de MATLAB visto en esta sección, el código evaluado en la
sección número 2.1 fue colocado dentro de un bucle for, cuyo contador es la variable “n”; la
cual representa el número de elementos en los que es particionada la placa triangular en cada
iteración del método numérico.

Por ese motivo, el valor inicial del contador es igual a 2; mientras que su valor final es igual
a “N + 1”. Esto se debe a que el número de elementos en cada iteración del método numérico
empleado en este informe se incrementa de uno en uno, hasta completar el número de iteraciones
requerido. Por este motivo, la iteración número “i” del método numérico hace uso de “i + 1”
elementos; como se muestra a continuación:

for n = 2:N + 1
l = ones(n,1) .* L/n; % Longitudes de los elementos, en milı́metros
b = zeros(n,1); % Bases de los elementos, en milı́metros

if mod(n,2) == 1
l((n + 1)/2) = L/(2 .* n);
l((n + 3)/2) = (3 .* L)/(2 .* n);
end

b(1) = (B/2) .* (1 + (L - l(1))/L);


s = L; % Variable auxiliar

15
for i = 2:n
b(i) = B .* (2 .* (s - l(i - 1)) - l(i))/(2 .* L);
s = s - l(i - 1);
end

A = t .* b; % Área transversal de los elementos, en mm^2


W = Y .* A .* l; % Peso de los elementos, en Newtons
F = zeros(n + 1,1); % Fuerzas en los nodos, en Newtons
T = zeros(n + 1,1); % Fuerza termica en los nodos, en N;

T(1) = -1 .* E .* A(1) .* a .* dT;


for i = 2:n
T(i) = (A(i - 1) - A(i)) .* E .* a .* dT;
end
T(n + 1) = E .* A(n) .* a .* dT;

for i = 2:n
F(i) = (W(i - 1) + W(i))/2 + T(i);
end
F(n + 1) = W(n)/2 + T(n + 1);

if mod(n,2) == 1
F((n + 3)/2) = F((n + 3)/2) + P;
else
F(n/2 + 1) = F(n/2 + 1) + P;
end

k = E .* (A ./ l); % Constantes elásticas de los elementos, en N/mm


K = zeros(n + 1,n + 1); % Matriz de rigidez, en N/mm
Q = zeros(n + 1, 1); % Vector desplazamiento, en milı́metros

for i = 1:n
K(i,i) = K(i,i) + k(i);
K(i,i + 1) = K(i,i + 1) - k(i);
K(i + 1,i) = K(i + 1,i) - k(i);
K(i + 1, i + 1) = K(i + 1, i + 1) + k(i);
end

Q(2 : end) = inv(K(2 : end, 2 : end)) * F(2 : end);


F = K * Q;
R(n - 1) = F(1) - W(1)/2 - T(1); % Reacción del apoyo, en Newtons
e = ones(n,1) .* E .* a .* dT; % Matriz de esfuerzos, en N/mm^2

for i = 1:n
e(i) = (E/l(i)) * [-1, 1] * Q(i : i + 1) - e(i);
end

Err(n - 1,1) = R(n - 1) + P + Y .* B .* t .* L/2;


Err(n - 1,2) = abs(Err(n - 1,1))/(P + Y .* B .* t .* L/2);

[Es(n - 1, 1),Es(n - 1,2)] = max(e);


[Es(n - 1,3),Es(n - 1,4)] = min(e);

16
[D(n - 1,1), D(n - 1,2)] = max(Q);
end

Se puede notar que, en la sección de código mostrada, las variables presentes en el cuadro
número 2.2 han reemplazado a las correspondientes variables que se encuentran en el código
que se muestra en la sección número 2.1. En estas variables, el número de la fila en la que se
almacenan los datos correspondientes a la iteración número “n” del método numérico es igual a
“n − 1”; en base a la relación entre el número de iteración y el número de elementos.

También se puede notar que, en el final del bucle for hay una sección de código que no se
encuentra en el código evaluado en la sección número 2.1 del informe, en la cual se introducen
los datos en las matrices que contienen los valores de los esfuerzos máximo y mı́nimo de cada
iteración del método numérico; y los valores del máximo desplazamiento nodal en cada iteración.

En la matriz que almacena los valores de los esfuerzos, en la columna número 1 se almace-
nan los valores del máximo esfuerzo de cada iteración; y en la columna número 2 se almacenan
los valores del número del elemento que es afectado por este máximo esfuerzo en cada iteración.
En la columna número 3 se almacenan los valores del mı́nimo esfuerzo de cada iteración; y en
la columna número 4 se almacenan los valores del número del elemento que es afectado por este
mı́nimo esfuerzo en cada iteración.

De manera similar, en la matriz que almacena los valores de los máximos desplazamientos no-
dales, en la columna número uno se alacenan los valores del máximo desplazamiento nodal de
cada iteración del método numérico; mientras que en la columna número 2 se almacenan los
valores del número del nodo que tuvo este máximo desplazamiento en cada iteración, tal y como
se muestra a continuación:

[Es(n - 1, 1),Es(n - 1,2)] = max(e);


[Es(n - 1,3),Es(n - 1,4)] = min(e);

[D(n - 1,1), D(n - 1,2)] = max(Q);

En la sección de código fuera del bucle for se define una matriz de orden 6 × 7 la cual tiene
la función de almacenar los siguientes datos estadı́sticos sobre las variables que se muestran en
la tabla número 2.2:

1. La primera columna de la matriz almacena la desviación estándar de la variable analizada.


Hay que tener en cuenta que el código de MATLAB hace uso de la fórmula número 2.19 para
calcular la desviación estándar, la cual se encuentra en el material del curso de Herramientas
Computacionales para la Matemática, provisto por la fuente número [2]:

v
u  " N #
u 1 X
σx = t (xk − µx )2 (2.19)
N k=1

2. La segunda columna de la matriz almacena la mediana aritmética de los valores de la


variable, para lo cual se hace uso de la fórmula número 2.20; la cual se encuentra en el
texto de la fuente número [2]:

17
 N
 X !
1
µx = xk (2.20)
N k=1

3. La tercera columna de la matriz almacena el coeficiente de varianza de los datos corres-


pondientes a la variable analizada; para lo cual se debe de hacer uso de la fórmula número
2.21 que se muestra a continuación:

σx
CVx = (2.21)
µx

4. El código de MATLAB busca el máximo valor absoluto de los elementos de la variable


analizada. Una vez encontrado ese valor, el valor de la variable correspondiente a dicho
valor absoulto es almacenado en la columna número 4; mientras que en la columna número
5 se almacena el número de la iteración del método numérico en el cual se produjo este
valor de la variable.

5. El código de MATLAB busca el mı́nimo valor absoluto de los elementos de la variable


analizada. Una vez encontrado ese valor, el valor de la variable correspondiente a dicho
valor absoulto es almacenado en la columna número 6; mientras que en la columna número
7 se almacena el número de la iteración del método numérico en el cual se produjo este
valor de la variable.

Para realizar el almacenamiento de los datos requeridos en la matriz de orden 6 × 7, el código


de MATLAB define una función; la cual recibe como valores de entrada una matriz y un número
entero “i”; de tal manera que la función busca la columna número “i” de la matriz, y evalúa esta
columna como una variable vectorial, calculando todos los datos que solicita la matriz de 6 × 7.
Esta función es la que se muestra a continuación:

function [V1] = Analisis(V2,i)

V1 = zeros(1,7);
V1(1,1) = std(V2(:,i)); % Desviación estándar de los valores del vector
V1(1,2) = mean(V2(:,i)); % Media aritmética de los valores del vector
V1(1,3) = V1(1,1) / V1(1,2); % Coeficiente de Varianza de los valores del Vector
[V1(1,4),V1(1,5)] = max(abs(V2(:,i))); % Máximo valor absoluto del vector
V1(1,4) = V2(V1(1,5),i);
[V1(1,6),V1(1,7)] = min(abs(V2(:,i))); % Mı́nimo valor absoluto del vector
V1(1,6) = V2(V1(1,7),i);

end

Haciendo uso de la función, se procede con el llenado de la matriz de orden 6 × 7, de tal


manera que las filas de la matriz se van llenando de acuerdo al orden de la lista que se muestra
a continuación:

1. Error absoulto del método numérico

18
2. Error relativo del método numérico

3. Esfuerzo de tracción máximo que experimentan los elementos

4. Esfuerzo de tracción mı́nimo que experimentan los elementos

5. Máximo valor del desplazamiento nodal

6. Valor de la reacción en el apoyo según el método numérico

De esta manera, la matriz de orden 6 × 7 se formarı́a a partir de la sección de código de


MATLAB que se muestra a continuación:

Est = zeros(6,7); % Resultados estadı́sticos de las variables

Est(1,:) = Analisis(Err,1); % Resultados del error absoluto


Est(2,:) = Analisis(Err,2); % Resultados del error relativo
Est(3,:) = Analisis(Es,1); % Resultados del esfuerzo máximo
Est(4,:) = Analisis(Es,3); % Resultados del esfuerzo mı́nimo
Est(5,:) = Analisis(D,1); % Resultados del máximo desplazamiento nodal
Est(6,:) = Analisis(R,1); % Resultados de la reacción en el apoyo

Hay que tener en cuenta que el código de MATLAB debe de escribir los resultados estadı́sti-
cos de las variables matriciales analizadas en la tabla número 2.2. Para ello, se hace uso de dos
funciones que tienen la capacidad de escribir datos.

La primera de estas funciones solicita al usuario escribir dos cadenas de texto - una de las
cuales depende de cuál es la variable que se va a analizar, y la otra que depende de las unidades
en las que se mide la variable -, y además de eso solicita al usuario introducir un vector fila; el cual
corresponde a una de las filas de la matriz de 6×7, dependiendo de qué variable se quiera analizar.

En base a estos datos introducidos, la función escribe en la ventana de comandos los siguientes
datos, en el siguiente orden:

1. El valor de la media aritmética de la variable a evaluar.

2. El coeficiente de varianza de la variable a evaluar.

3. El máximo valor registrado de la variable a evaluar.

4. El número de elementos que empleó el método numérico al registrar el valor máximo.

5. El mı́nimo valor registrado de la variable a evaluar.

6. El número de elementos que empleó el método numérico al registrar el valor mı́nimo.

19
La función que escribe la información solicitada corresponde a la sección de código de MATLAB
que se muestra a continuación la cual se usa para redactar la información de la matriz de esfuer-
zosa máximos y esfuerzos mı́nimos; además de la matriz de máximos desplazamientos nodales:

function Escribir1(T1,T2,V)

% Función que escribe los valores estadı́sticos de las variables

fprintf(’ \n’);
fprintf(’ Media %s expresada en %s = %f \n’,T1,T2,V(1,2));
fprintf(’ Coeficiente de varianza %s = %f \n’,T1,V(1,3));
fprintf(’ *---------------------------------* \n’);
fprintf(’ El máximo valor %s expresado en %s es igual a %f. \n’,T1,T2,V(1,4));
fprintf(’ Corresponde al número de elementos igual a %d. \n’,V(1,5) + 1);
fprintf(’ *---------------------------------* \n’);
fprintf(’ El mı́nimo valor %s expresado en %s es igual a %f. \n’,T1,T2,V(1,6));
fprintf(’ Corresponde al número de elementos igual a %d. \n’,V(1,7) + 1);
fprintf(’ \n’);

end

La principal diferencia entre la segunda función de escritura y la primera - la cual serı́a la


función analizada anteriormente - es que la segunda función solicita dos parámetros de entra-
da adicionales: el primero es una cadena de texto, la cual indica si la variable es evaluada con
respecto a los elementos o con respecto a los nodos de la placa triangular; y la segunda es un
vector columna, el cual corresponde a una de las columnas de las matrices de la tabla número 2.2.

La segunda diferencia es que la segunda función de escritura anota datos adicionales en la ven-
tana de comandos con respecto a la primera. La información que anota la segunda función en
total es la que se muestra a continuación en la siguiente lista:

1. El valor de la media aritmética de la variable a evaluar.

2. El coeficiente de varianza de la variable a evaluar.

3. El máximo valor registrado de la variable a evaluar.

4. El número de elementos que empleó el método numérico al registrar el valor máximo.

5. El número de la posición del elemento - o del nodo - en el que se registró el valor máximo.

6. El mı́nimo valor registrado de la variable a evaluar.

7. El número de elementos que empleó el método numérico al registrar el valor mı́nimo.

8. El número de la posición del elemento - o del nodo - en el que se registró el valor mı́nimo.

20
La función que escribe la información solicitada corresponde a la sección de código de MATLAB
que se muestra a continuación, la cual se usa para redactar la información de la matriz de esfuer-
zos máximos y esfuerzos mı́nimos; además de la matriz de máximos desplazamientos nodales:

function Escribir2(T1,T2,T3,V1,V2)

% Función que escribe los valores estadı́sticos de las variables

fprintf(’ \n’);
fprintf(’ Media %s expresada en %s = %f \n’,T1,T2,V1(1,2));
fprintf(’ Coeficiente de varianza %s = %f \n’,T1,V1(1,3));
fprintf(’ *---------------------------------* \n’);
fprintf(’ El máximo valor %s expresado en %s es igual a %f. \n’,T1,T2,V1(1,4));
fprintf(’ Corresponde al número de elementos igual a %d. \n’,V1(1,5) + 1);
fprintf(’ Se encuentra en el %s número %d. \n’,T3,V2(V1(1,5),1));
fprintf(’ *---------------------------------* \n’);
fprintf(’ El mı́nimo valor %s expresado en %s es igual a %f. \n’,T1,T2,V1(1,6));
fprintf(’ Corresponde al número de elementos igual a %d. \n’,V1(1,7) + 1);
fprintf(’ Se encuentra en el %s número %d. \n’,T3,V2(V1(1,7),1));
fprintf(’ \n’);

end

El código de MATLAB también debe de graficar los datos registrados en las variables ma-
triciales de la tabla número 2.2, para lo cual el código hace uso de dos funciones que generan
gráficos de coordenadas cartesianas.

La primera de estas dos funciones solicita como variables de entrada un vector columna, que
corresponde a una de las columnas de una de las matrices de la tabla número 2.2. También soli-
cita tres cadenas de texto, las cuales corresponden al tı́tulo del gráfico, el nombre de la variable
independiente - en el eje de las abscisas -, y el nombre de la variable dependiente - en el eje de
las ordenadas -.

Para realizar el gráfico, la función define un vector fila cuyo elemento inicial es el número 2,
de tal manera que los valores de los elementos de los valores del vector van aumentando de
uno en uno; hasta que el vector tiene tantos elementos como el vector columna introducido en
la variable, de tal manera que este vector generado por la función corresponderá a la variable
independiente de la gráfica, mientras que el vector columna será la variable dependiente.

La función que realiza el gráfico de coordenadas cartesianas en base a los datos mencionados
previamente serı́a la que se muestra a continuación:

function Graficar1(Y,T1,T2,T3)

X = 2:1:length(Y) + 1; % Espacio lineal del número de elementos


plot(X,Y,’-o’,’MarkerIndices’,1:1:length(Y));
grid on; % Cuadrı́cula
grid minor;
title (T1);
xlabel(T2);
ylabel(T3);

21
end

La principal diferencia entre la segunda función que realiza gráficos y la primera función ya
mencionada, es que la segunda función realiza dos gráficos en coordenadas cartesianas, uno al
lado del otro. Además, la segunda función requiere de valores de entrada adicionales con respecto
a la primera.

Además de las tres cadenas de texto de la primera función - las cuales son aplicadas para uno de
los dos gráficos de coordenas cartesianas -, la segunda función solicita como variable de entra-
da una cadena de texto que corresponde al nombre de la variable independiente en el segundo
gráfico; junto con una cadena de texto que corresponde al nombre de la variable dependiente del
segundo gráfico, y una cadena de texto que corresponde al tı́tulo del segundo gráfico.

La segunda función también solicita la entrada de dos vectores columna en lugar de uno - de
tal manera que estos vectores son columnas de las matrices de la tabla número 2.2 -, con el fin
que estos vectores sean cada uno la variable dependiente de uno de los dos gráficos cartesianos
elaborados por la función.

Para generar los gráficos, la función define un vector fila usando el mismo procedimiento que la
primera función, y emplea este vector como variable independiente en los dos gráficos.

La función que escribe la información solicitada corresponde a la sección de código de MATLAB


que se muestra a continuación, la cual se usa para redactar la información de la matriz de errores
absoluto y relativo del método numérico; además del vector columna de los valores de la reacción
en el apoyo obtenidos por el método numérico:

function Graficar2(Y1,Y2,T1,T2,T3,T4,T5)

X = 2:1:length(Y1) + 1; % Espacio lineal del número de elementos


tiledlayout(1,2); % Arreglo de los gráficos

nexttile
plot(X,Y1,’-o’,’MarkerIndices’,1:1:length(Y1));
grid on; % Cuadrı́cula
grid minor;
title (T2); % Tı́tulo del Gráfico
xlabel(T1);
ylabel(T3);

nexttile
plot(X,Y2,’-o’,’MarkerIndices’,1:1:length(Y2));
grid on; % Cuadrı́cula
grid minor;
title (T4); % Tı́tulo del Gráfico
xlabel(T1);
ylabel(T5);

end

Para que el usuario pueda seleccionar cual variable de las que están en la tabla número
2.2 desea evaluar, el código de MATLAB hace uso de una estrcutura condicional switch; en la

22
cual el contador representa a una de las variables que puede evaluar el código. Estas variables se
encuentran enumeradas en la siguiente lista, de tal manera que la posición en la lista corresponde
con el valor del contador asociado a cada variable:

1. Análisis del error absoluto del método numérico.

2. Análisis del error relativo del método numérico.

3. Análisis del esfuerzo de tracción máximo en los elementos de la placa triangular.

4. Análisis del esfuerzo de tracción mı́nimo en los elementos de la placa triangular.

5. Análisis del del máximo desplazamiento nodal de la placa triangular.

6. Análisis del valor de la reacción en el apoyo obtenido por el método numérico.

La estructura condicional switch está anidada dentro de un bucle while, el cual continúa
solicitando al usuario introducir valores para el contador mientras que éstos valores correspondan
a uno de los seis valores numéricos que se muestran en la lista. En caso que ese no sea el caso, la
estructura condicional interrumpe el proceso ejecutado por el bucle; finalizando la ejecución del
código, tal y como se muestra en la imagen número 2.1:

23
Figura 2.1: Estructura Condicional switch anidada en un Bucle while

24
2.4. Código de MATLAB Completo que analiza las Itera-
ciones del Método Numérico

A continuación, se muestra una copia completa del código de MATLAB analizado en la


sección número 2.3 del informe:

clc;
close all;
format long;

P = 20000; % En Newtons
t = 150; % En milı́metros
E = 300000; % En N/mm^2
Y = 78.45 / 1000000; % En N/mm^3
L = 1200; % Longitud. En milı́metros
B = 1500; % Base. En milı́metros
a = 11/1000000;
dT = 110; % Incremento temperatura. En °C.

fprintf(’ \n’);
N = input(’ Introduzca el número de procesos: ’); % Número de procesos
Err = zeros(N,2); % Valores obtenidos de los errores
Es = zeros(N,4); % Matriz de esfuerzos notables, en N/mm^2
D = zeros(N,2); % Matriz de desplazamientos máximos de nodos, en milı́metros
R = zeros(N,1); % Matriz de valores de la Reacción, en Newton

for n = 2:N + 1
l = ones(n,1) .* L/n; % Longitudes de los elementos, en milı́metros
b = zeros(n,1); % Bases de los elementos, en milı́metros

if mod(n,2) == 1
l((n + 1)/2) = L/(2 .* n);
l((n + 3)/2) = (3 .* L)/(2 .* n);
end

b(1) = (B/2) .* (1 + (L - l(1))/L);


s = L; % Variable auxiliar
for i = 2:n
b(i) = B .* (2 .* (s - l(i - 1)) - l(i))/(2 .* L);
s = s - l(i - 1);
end

A = t .* b; % Área transversal de los elementos, en mm^2


W = Y .* A .* l; % Peso de los elementos, en Newtons
F = zeros(n + 1,1); % Fuerzas en los nodos, en Newtons
T = zeros(n + 1,1); % Fuerza termica en los nodos, en N;

T(1) = -1 .* E .* A(1) .* a .* dT;


for i = 2:n
T(i) = (A(i - 1) - A(i)) .* E .* a .* dT;
end

25
T(n + 1) = E .* A(n) .* a .* dT;

for i = 2:n
F(i) = (W(i - 1) + W(i))/2 + T(i);
end
F(n + 1) = W(n)/2 + T(n + 1);

if mod(n,2) == 1
F((n + 3)/2) = F((n + 3)/2) + P;
else
F(n/2 + 1) = F(n/2 + 1) + P;
end

k = E .* (A ./ l); % Constantes elásticas de los elementos, en N/mm


K = zeros(n + 1,n + 1); % Matriz de rigidez, en N/mm
Q = zeros(n + 1, 1); % Vector desplazamiento, en milı́metros

for i = 1:n
K(i,i) = K(i,i) + k(i);
K(i,i + 1) = K(i,i + 1) - k(i);
K(i + 1,i) = K(i + 1,i) - k(i);
K(i + 1, i + 1) = K(i + 1, i + 1) + k(i);
end

Q(2 : end) = (K(2 : end, 2 : end)) \ F(2 : end);


F = K * Q;
R(n - 1) = F(1) - W(1)/2 - T(1); % Reacción del apoyo, en Newtons
e = ones(n,1) .* E .* a .* dT; % Matriz de esfuerzos, en N/mm^2

for i = 1:n
e(i) = (E/l(i)) * [-1, 1] * Q(i : i + 1) - e(i);
end

Err(n - 1,1) = R(n - 1) + P + Y .* B .* t .* L/2;


Err(n - 1,2) = abs(Err(1))/(P + Y .* B .* t .* L/2);

[Es(n - 1, 1),Es(n - 1,2)] = max(e);


[Es(n - 1,3),Es(n - 1,4)] = min(e);

[D(n - 1,1), D(n - 1,2)] = max(Q);


end

Est = zeros(6,7); % Resultados estadı́sticos de las variables

Est(1,:) = Analisis(Err,1); % Resultados del error absoluto


Est(2,:) = Analisis(Err,2); % Resultados del error relativo
Est(3,:) = Analisis(Es,1); % Resultados del esfuerzo máximo
Est(4,:) = Analisis(Es,3); % Resultados del esfuerzo mı́nimo
Est(5,:) = Analisis(D,1); % Resultados del máximo desplazamiento nodal
Est(6,:) = Analisis(R,1); % Resultados de la reacción en el apoyo

fprintf(’ \n’);

26
j = input(’ Seleccione la opcion de análisis: ’);

% En esta sección se encuentra la estructura condicional switch anidada en el bucle while

function [V1] = Analisis(V2,i)

V1 = zeros(1,7);
V1(1,1) = std(V2(:,i)); % Desviación estándar de los valores del vector
V1(1,2) = mean(V2(:,i)); % Media aritmética de los valores del vector
V1(1,3) = V1(1,1) / V1(1,2); % Coeficiente de Varianza de los valores del Vector
[V1(1,4),V1(1,5)] = max(abs(V2(:,i))); % Máximo valor absoluto del vector
V1(1,4) = V2(V1(1,5),i);
[V1(1,6),V1(1,7)] = min(abs(V2(:,i))); % Mı́nimo valor absoluto del vector
V1(1,6) = V2(V1(1,7),i);

end

function Escribir1(T1,T2,V)

% Función que escribe los valores estadı́sticos de las variables

fprintf(’ \n’);
fprintf(’ Media %s expresada en %s = %f \n’,T1,T2,V(1,2));
fprintf(’ Coeficiente de varianza %s = %f \n’,T1,V(1,3));
fprintf(’ *---------------------------------* \n’);
fprintf(’ El máximo valor %s expresado en %s es igual a %f. \n’,T1,T2,V(1,4));
fprintf(’ Corresponde al número de elementos igual a %d. \n’,V(1,5) + 1);
fprintf(’ *---------------------------------* \n’);
fprintf(’ El mı́nimo valor %s expresado en %s es igual a %f. \n’,T1,T2,V(1,6));
fprintf(’ Corresponde al número de elementos igual a %d. \n’,V(1,7) + 1);
fprintf(’ \n’);

end

function Escribir2(T1,T2,T3,V1,V2)

% Función que escribe los valores estadı́sticos de las variables

fprintf(’ \n’);
fprintf(’ Media %s expresada en %s = %f \n’,T1,T2,V1(1,2));
fprintf(’ Coeficiente de varianza %s = %f \n’,T1,V1(1,3));
fprintf(’ *---------------------------------* \n’);
fprintf(’ El máximo valor %s expresado en %s es igual a %f. \n’,T1,T2,V1(1,4));
fprintf(’ Corresponde al número de elementos igual a %d. \n’,V1(1,5) + 1);
fprintf(’ Se encuentra en el %s número %d. \n’,T3,V2(V1(1,5),1));
fprintf(’ *---------------------------------* \n’);
fprintf(’ El mı́nimo valor %s expresado en %s es igual a %f. \n’,T1,T2,V1(1,6));
fprintf(’ Corresponde al número de elementos igual a %d. \n’,V1(1,7) + 1);
fprintf(’ Se encuentra en el %s número %d. \n’,T3,V2(V1(1,7),1));
fprintf(’ \n’);

end

27
function Graficar1(Y,T1,T2,T3)

X = 2:1:length(Y) + 1; % Espacio lineal del número de elementos


plot(X,Y,’-o’,’MarkerIndices’,1:1:length(Y));
grid on; % Cuadrı́cula
grid minor;
title (T1); % Tı́tulo del Gráfico
xlabel(T2);
ylabel(T3);

end

function Graficar2(Y1,Y2,T1,T2,T3,T4,T5)

X = 2:1:length(Y1) + 1; % Espacio lineal del número de elementos


tiledlayout(1,2); % Arreglo de los gráficos

nexttile
plot(X,Y1,’-o’,’MarkerIndices’,1:1:length(Y1));
grid on; % Cuadrı́cula
grid minor;
title (T2); % Tı́tulo del Gráfico
xlabel(T1);
ylabel(T3);

nexttile
plot(X,Y2,’-o’,’MarkerIndices’,1:1:length(Y2));
grid on; % Cuadrı́cula
grid minor;
title (T4); % Tı́tulo del Gráfico
xlabel(T1);
ylabel(T5);

end

28
Capı́tulo 3

Ejecución del Código de


MATLAB

3.1. Resultados Obtenidos del Código de MATLAB

Al ejecutar el código de MATLAB visto en la sección número 2.3 del informe, para una
partición de 500 elementos, se obtienen los siguientes resultados para cada una de las variables
evaluadas:

1. Error absoluto del método numérico


Al ejecutar el código de MATLAB, se obtienen los siguientes datos en la ventana de
comandos:

Media del error absoluto expresada en Newtons = 0.000000


Coeficiente de varianza del error absoluto = 47.262855
*---------------------------------*
El máximo valor del error absoluto expresado en Newtons es igual a -0.000077.
Corresponde al número de elementos igual a 437.
*---------------------------------*
El mı́nimo valor del error absoluto expresado en Newtons es igual a 0.000000.
Corresponde al número de elementos igual a 3.

Por otra parte, el gráfico obtenido al ejecutar el código es el que corresponde a la imagen
número 3.1:

2. Error relativo del método numérico

Al ejecutar el código de MATLAB, se obtienen los siguientes datos en la ventana de


comandos:

Coeficiente de varianza del error relativo = 0.000000


*---------------------------------*
El máximo valor del error relativo expresado en es igual a 0.000000.
Corresponde al número de elementos igual a 2.

29
Figura 3.1: Gráfica del Error Absoluto versus el Número de Elementos de la Partición

*---------------------------------*
El mı́nimo valor del error relativo expresado en es igual a 0.000000.
Corresponde al número de elementos igual a 2.

Por otra parte, el gráfico obtenido al ejecutar el código es el que corresponde a la imagen
número 3.2:

3. Esfuerzo máximo de tracción en los elementos de la placa triangular


Al ejecutar el código de MATLAB, se obtienen los siguientes datos en la ventana de
comandos:

Media de los esfuerzos máximos expresada en N/mm^2 = 0.200093


Coeficiente de varianza de los esfuerzos máximos = 0.015594
*---------------------------------*
El máximo valor de los esfuerzos máximos expresado en N/mm^2 es igual a 0.201159.
Corresponde al número de elementos igual a 501.
Se encuentra en el elemento número 251.
*---------------------------------*
El mı́nimo valor de los esfuerzos máximos expresado en N/mm^2 es igual a 0.157744.

30
Figura 3.2: Gráfica del Error Relativo versus el Número de Elementos de la Partición

Corresponde al número de elementos igual a 2.


Se encuentra en el elemento número 1.

Por otra parte, el gráfico obtenido al ejecutar el código es el que corresponde a la imagen
número 3.3:

4. Esfuerzo mı́nimo de tracción en los elementos de la placa triangular


Al ejecutar el código de MATLAB, se obtienen los siguientes datos en la ventana de
comandos:

Media de los esfuerzos mı́nimos expresada en N/mm^2 = 0.000561


Coeficiente de varianza de los esfuerzos mı́nimos = 3.165364
*---------------------------------*
El máximo valor de los esfuerzos mı́nimos expresado en N/mm^2 es igual a 0.023535.
Corresponde al número de elementos igual a 3.
Se encuentra en el elemento número 3.
*---------------------------------*
El mı́nimo valor de los esfuerzos mı́nimos expresado en N/mm^2 es igual a 0.000094.
Corresponde al número de elementos igual a 501.

31
Figura 3.3: Gráficas del Esfuerzo Máximo y el Elemento afectado por el Esfuerzo Máximo

Se encuentra en el elemento número 501.

Por otra parte, el gráfico obtenido al ejecutar el código es el que corresponde a la imagen
número 3.4:

5. Máximo desplazamiento de los nodos de la placa triangular


Al ejecutar el código de MATLAB, se obtienen los datos en la ventana de comandos
que se muestran en la imagen número 3.5:

Por otra parte, el gráfico obtenido al ejecutar el código es el que corresponde a la imagen
número 3.6:

6. Esfuerzo mı́nimo de tracción en los elementos de la placa triangular


Al ejecutar el código de MATLAB, se obtienen los datos en la ventana de comandos
que se muestran en la imagen número 3.7:

32
Figura 3.4: Gráficas del Esfuerzo Mı́nimo y el Elemento afectado por el Esfuerzo Mı́nimo

Por otra parte, el gráfico obtenido al ejecutar el código es el que corresponde a la imagen
número 3.8:

33
Figura 3.5: Resultado de la Ejecución del Código de MATLAB para un Contador igual a 5

Figura 3.6: Gráficas del Máximo Desplazamiento Nodal y el Nodo afectado por el Desplazamiento

Figura 3.7: Resultado de la Ejecución del Código de MATLAB para un Contador igual a 6

34
Figura 3.8: Gráficas de la Reacción en el Apoyo versus el Número de Elementos

35
3.2. Análisis de los Resultados del Código de MATLAB

Se puede apreciar, tanto por el valor del coeficiente de varianza del error absoluto del método
numérico empleado en este informe, como por la lectura del gráfico número 3.1; que a medida
que el número de elementos en los cuales se particiona la placa triangular se incrementa, el valor
numérico del error absoluto tiende a variar e incrementarse más.

Esta tendencia también se puede apreciar a la hora de analizar los valores de la resistencia
en el apoyo obtenidos a partir del método numérico empleado en este informe; tal y como se
aprecia en el gráfico número 3.8. Sin embargo, el mogtivo por el cual el coeficiente de varianza
de la resistencia en el apoyo es prácticamente igual a 0, es debido a que el valor promedio de
esta resistencia es muy grande.

Esto se puede corroborar si se tiene en cuenta que el error relativo producido por el método
numérico empleado en este informe tiene un valor muy cercano a cero para todas las iteraciones
realizadas por el código de MATLAB; tal y como se aprecia en el gráfico número 3.2, debido que
el valor de la reacción de apoyo obtenido a partir de la primera condición del equilibrio es muy
grande en comparación a los errores absolutos del método numérico.

Por el contrario, se puede apreciar que los valores del esfuerzo máximo de tracción que afecta a
los elementos de la placa triangular, el esfuerzo mı́nimo de tracción que afecta a estos elementos,
y el máximo desplazamiento de los nodos de la plaza triangular, convergen a un determinado
valor a medida que se incrementa el número de elementos empleados en el método numérico; tal
y como se aprecia en los gráficos número 3.3, número 3.4 y número 3.6.

También se puede apreciar que los coeficientes de variación de estas tres variables no son tan
grandes, sobre todo si se comparan con el coeficiente de variación del error absoluto, y si también
tenemos en cuenta que estas variables tienen valores pequeños. Estos coeficientes son pequeños
debido a que los valores de la media aritmética de estas variables son cercanos a los valores a
los que convergen para un número muy grande de elementos en los cuales se particiona la placa
triangular.

Al evaluar el gráfico número 3.3 se puede apreciar que el máximo esfuerzo de tracción tien-
de a darse en uno de los elementos cercanos al punto en el cual actúa la fuerza externa que estira
a la placa triangular; el cual serı́a el punto medio de la altura de la placa, o el nodo central.

En cambio, al evaluar el gráfico número 3.4 se puede apreciar que el mı́nimo esfuerzo de tracción
tiende a darse en el elemento ubicado en la punta de la placa triangular; lo cual puede deberse
a que ninguna fuerza externa actúia sobre este elemento, y este elmento es el que tiene menos
peso, y una menor sección transversal que pueda ser deformada por los efectos de la variación
de temperatura.

Al analizar el gráfico número 3.6, se puede apreciar que el elemento ubicado en la punta de
la placa triangular no solo experimenta el menor esfuerzo de tracción; sino que el nodo ubicado
en la punta de la placa triangular es el que experimenta un mayor desplazamiento, por lo cual
esta deformación disminuye el valor del esfuerzo que experimenta el elemento ubicado en la punta
de la placa triangular.

36
Bibliografı́a

[1] Miguel Ángel Ampuero Suárez. Mc516 – cálculo por elementos finitos – práctica. Universidad
Nacional de Ingenierı́a, Enlace: (https://campusvirtualfim.com/pluginfile.php/200/
course/section/876/SLIDES_TRACCION_SIMPLE_DEFORMACION_TERMICA.pdf):34–50, 2023.

[2] Verónica Borja Macı́as. Herramientas computacionales para la matemática. matlab: Análisis
de datos. Universidad Tecnológica de la Mixteca, Enlace: (https://www.utm.mx/~vero0304/
HCPM/33.Analisis-datos.pdf):02–10, 2012.

37

También podría gustarte