Matriz de rigidez para vigas
% Definición de parámetros
L = 3; % Longitud de la viga [m]
q = 100; % Carga distribuida uniformemente [N/m]
E = 200e9; % Módulo de elasticidad [Pa]
I = 1e-6; % Momento de inercia [m^4]
n = 10; % Número de elementos finitos
% División de la viga en elementos finitos
dx = L / n;
x = 0:dx:L;
% Cálculo de la matriz de rigidez elemental
k_e = element_stiffness(E, I, L);
% Ensamblaje de la matriz de rigidez global
K = global_stiffness(k_e, n);
% Definición de las condiciones de contorno
u = zeros(3*n, 1);
u(1) = 0;
u(2) = 0;
u(3*n) = 0;
% Cálculo de la matriz de cargas
f = global_loads(q, L, n);
% Solución del sistema de ecuaciones
u = K \ f;
% Cálculo de las reacciones en los apoyos
R = support_reactions(u, f, K, L);
% Cálculo de las deflexiones, momentos flectores y fuerzas cortantes
[v, m, t] = element_stresses(u, k_e, n, dx);
% Representación gráfica de los resultados
plot(x, v, 'b-', x, m, 'r-', x, t, 'g-');
xlabel('Posición [m]');
ylabel('Magnitud');
title('Resultados para viga con tres apoyos y carga distribuida');
PORTICO DE 2 BARRAS
% Definición de parámetros
L1 = 2; % Longitud de la pata vertical [m]
L2 = 3; % Longitud del brazo horizontal [m]
q = 1000; % Carga puntual [N]
E = 200e9; % Módulo de elasticidad [Pa]
I = 1e-6; % Momento de inercia [m^4]
n = 10; % Número de elementos finitos para cada barra
% Definición de la geometría del pórtico
nodes = [0 0; 0 L1; L2 L1; L2 0];
% Cálculo de las matrices de rigidez elementales
k_e1 = element_stiffness(E, I, L1);
k_e2 = element_stiffness(E, I, L2);
% Ensamblaje de la matriz de rigidez global
K = global_stiffness(k_e1, k_e2, nodes, n);
% Definición de las condiciones de contorno
u = zeros(4*n, 1);
u(1) = 0;
u(2) = 0;
u(3*n + 2) = 0;
u(4*n) = 0;
% Cálculo de la matriz de cargas
f = global_loads(q, nodes, n);
% Solución del sistema de ecuaciones
u = K \ f;
% Cálculo de las reacciones en los apoyos
R = support_reactions(u, f, K, nodes);
% Cálculo de las deflexiones, momentos flectores y fuerzas cortantes
[v1, m1, t1] = element_stresses(u, k_e1, n, L1);
[v2, m2, t2] = element_stresses(u, k_e2, n, L2);
Armadura
## Código MATLAB para resolver una armadura de 6 barras aplicando el método de rigidez
Este código MATLAB resuelve el análisis estático de una armadura de 6 barras planas utilizando el
método de rigidez. El código calcula las fuerzas en cada barra, las reacciones en los apoyos y los
desplazamientos de los nodos.
**Descripción del código:**
1. **Definición de datos:**
- Se definen las coordenadas de los nodos de la armadura.
- Se definen las conectividades de las barras, indicando los nodos inicial y final de cada barra.
- Se definen las áreas de las barras.
- Se definen las fuerzas aplicadas en los nodos (si las hay).
2. **Cálculo de la matriz de rigidez global:**
- Se utiliza la función `element_stiffness` para calcular la matriz de rigidez elemental de cada barra.
- Se ensambla la matriz de rigidez global a partir de las matrices de rigidez elementales utilizando la
función `global_stiffness`.
3. **Definición de las condiciones de contorno:**
- Se identifican los nodos con desplazamientos restringidos (apoyos) e indica qué tipo de restricción
tienen (desplazamiento horizontal, vertical o ambos).
4. **Cálculo de las fuerzas en las barras:**
- Se elimina las filas y columnas correspondientes a los nodos con desplazamientos restringidos de la
matriz de rigidez global y el vector de fuerzas aplicadas.
- Se resuelve el sistema de ecuaciones reducido para obtener los desplazamientos de los nodos libres.
- Se calculan las fuerzas en cada barra utilizando los desplazamientos de los nodos, la matriz de rigidez
elemental y las conectividades de las barras.
5. **Cálculo de las reacciones en los apoyos:**
- Se utilizan las ecuaciones de equilibrio estático para calcular las reacciones en los apoyos horizontales
y verticales.
6. **Presentación de resultados:**
- Se muestran los resultados obtenidos, incluyendo las fuerzas en cada barra, las reacciones en los
apoyos y los desplazamientos de los nodos.
**Ejemplo de uso:**
```MATLAB
% Definición de datos
nodes = [0 0; 3 0; 6 0; 3 3; 6 3; 3 6]; % Coordenadas de nodos
bars = [1 2; 2 3; 1 3; 4 5; 5 6; 3 5]; % Conectividades de barras
areas = [1; 1; 1; 1; 1; 1]; % Áreas de las barras
forces = [0 -100; 0 0; 0 0; -50 0; 0 0; 0 0]; % Fuerzas aplicadas en nodos (opcional)
% Cálculo de la matriz de rigidez global
K = global_stiffness(nodes, bars, areas);
% Definición de las condiciones de contorno
fixed_nodes = [1 2]; % Nodos con desplazamientos restringidos
fixed_dofs = [1 2]; % Grados de libertad restringidos (1: horizontal, 2: vertical)
% Cálculo de las fuerzas en las barras
[u, f_bars] = solve_system(K, forces, fixed_nodes, fixed_dofs);
% Cálculo de las reacciones en los apoyos
R = support_reactions(nodes, bars, areas, forces, u);
% Presentación de resultados
fprintf('Fuerzas en barras:\n');
for i = 1:length(bars)
fprintf('Barra %d: %f\n', i, f_bars(i));
end
fprintf('Reacciones en apoyos:\n');
fprintf('Rx = %f, Ry = %f\n', R(1), R(2));
fprintf('Desplazamientos de nodos:\n');
for i = 1:length(nodes)
fprintf('Nodo %d: x = %f, y = %f\n', i, u(2*i-1), u(2*i));
end
```
**Explicación del código:**
* La función `element_stiffness` calcula la matriz de rigidez elemental de una barra bidimensional
utilizando la fórmula correspondiente.
* La función `global_stiffness` ensambla la matriz de rigidez global a partir de las matrices de rigidez
elementales y las conectividades de las barras.
* La función `solve_system` elimina las filas y columnas correspondientes a los nodos con
desplazamientos restringidos, resuelve el sistema de ecuaciones reducido