Placa Plana (Grupo 20)
De MateWiki
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Placa Plana. Grupo 20 |
| Asignatura | Teoría de Campos |
| Curso | 2025-26 |
| Autores | Alejandro Trejo, Marcos Rodríguez-Barbero, Gloria García , Manuel Riesgo, Ángel De Miguel Pérez |
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
Contenido
1 Introducción
Una viga voladiza rectangular (en dimensión 2), ocupa la región (x,y)∈[0,4] X [ f(g) , g(x) ]
Se considerará fija en la pared vertical izquierda.
Con 𝑓(x)=x÷8 y 𝑔(𝑥)=2−x÷8
Está definidas dos variables: La temperatura, el desplazamiento y la posición después de esa deformación o desplazamiento.
La temperatura viene dada por la función
T(x,y)=(1+(y−1)2(4−x)
La posición después del desplazamiento es rd(x,y)=r0(x,y)+u(x,y)
Siendo el desplazamiento: u(ρ,θ)=-ρ2cosθeθ
Usando Matlab u Octave se obtendrán los resultados de los siguientes apartados:
2 Mallado de placa
Tomamos como ejes \((x,y) ∈ [−1,5] × [-1,3]\) y un paso de muestreo, es decir, el intervalo entre punto y punto, [math]h=\frac{1}{10}[/math] para las variables [math]x[/math] e [math]y[/math].
% 1. Configuración
h = 1/10;
color_malla = [0, 0.6, 0.6]; % Color Cían Oscuro
% 2. Generar Coordenadas Paramétricas
% u: avanza a lo largo de la placa (0 a 4)
% v: avanza de abajo a arriba (0 a 2)
u = 0 : h : 4;
v = 0 : h : 2;
[U, V] = meshgrid(u, v);
% 3. Transformación Matemática
% Calculamos los bordes superior e inferior para cada punto X
y_abajo = U ./ 8;
y_arriba = 2 - (U ./ 8);
% Interpolamos: calculamos la Y real basada en la altura V
factor_altura = V ./ 2; % Va de 0 (abajo) a 1 (arriba)
X = U;
Y = y_abajo + factor_altura .* (y_arriba - y_abajo);
% 4. Visualización
figure('Color', 'w'); hold on;
% A) Dibujar las líneas VERTICALES
% Al pasar la matriz directa X e Y, MATLAB dibuja una línea por cada columna.
plot(X, Y, 'Color', color_malla, 'LineWidth', 0.5);
% B) Dibujar las líneas HORIZONTALES
% Al pasar la traspuesta (X' e Y'), dibuja una línea por cada fila.
plot(X', Y', 'Color', color_malla, 'LineWidth', 0.5);
% C) Dibujar el CONTORNO (Bordes Negros)
% Dibujamos las 4 líneas del borde explícitamente para que se vean bien gruesas
plot(u, u./8, 'k-', 'LineWidth', 2); % Borde Abajo
plot(u, 2 - u./8, 'k-', 'LineWidth', 2); % Borde Arriba
plot([0 0], [0 2], 'k-', 'LineWidth', 2); % Borde Izquierdo
plot([4 4], [0.5 1.5], 'k-', 'LineWidth', 2); % Borde Derecho
% 5. Configuración final
axis([-1 5 -1 3]); % Zoom/Encuadre exacto
xlabel('x'); ylabel('y');
title('Mallado de la placa plana');
grid on;
box on;
hold off;
3 Curvas de nivel
% 1. Definición del Dominio y Mallado
h = 0.2; % Paso de muestreo
x = 0 : h : 4;
y = 0 : h : 2;
[X, Y] = meshgrid(x, y);
% 2. Definir la Geometría (Tu placa plana trapezoidal)
y_abajo = X ./ 8;
y_arriba = 2 - (X ./ 8);
% Creamos la máscara lógica (1 dentro, 0 fuera)
dentro = (Y >= y_abajo) & (Y <= y_arriba);
% 3. Definir la TEMPERATURA T(x,y)
% FÓRMULA ACTUALIZADA: T(x,y) = (1 + (y-1)^2)(4-x)
% Usamos .^ y .* para operaciones elemento a elemento
T_func = @(x,y) (1 + (y - 1).^2) .* (4 - x);
% Calculamos la temperatura en toda la malla
T = T_func(X, Y);
% 4. Aplicar la Máscara (Recortar la figura)
% Asignamos NaN a los puntos de fuera para que no se pinten
T(~dentro) = NaN;
% (Opcional) Recortar X e Y también ayuda a limpiar bordes en contour
X_plot = X; Y_plot = Y;
X_plot(~dentro) = NaN;
Y_plot(~dentro) = NaN;
% 5. Cálculo del Gradiente (Nabla T)
% gradient calcula las derivadas parciales numéricas
[dTdx, dTdy] = gradient(T, h, h);
% 6. Visualización
figure('Color', 'w', 'Position', [100 100 800 600]);
hold on;
% A) Pintar Curvas de Nivel (Isotermas)
% Usamos contour para ver las líneas de temperatura constante
[C, h_cont] = contour(X, Y, T, 20, 'LineWidth', 2);
clabel(C, h_cont, 'FontSize', 9, 'Color', 'k', 'FontWeight', 'bold');
colormap('jet');
% B) Pintar Campo Vectorial (Gradiente)
% quiver dibuja las flechas sobre la superficie
quiver(X, Y, dTdx, dTdy, 'k', 'LineWidth', 1.2);
% C) Dibujar el contorno de la placa
plot([0 4], [0 0.5], 'k-', 'LineWidth', 2); % Abajo
plot([0 4], [2 1.5], 'k-', 'LineWidth', 2); % Arriba
plot([0 0], [0 2], 'k-', 'LineWidth', 2); % Izquierda
plot([4 4], [0.5 1.5], 'k-', 'LineWidth', 2); % Derecha
% 7. Configuración Final
axis equal; % CRUCIAL para ver la ortogonalidad
axis([-0.5 4.5 -0.5 2.5]);
grid on;
xlabel('x'); ylabel('y');
title({'Isotermas y Gradiente \nablaT', ...
'T(x,y) = (1 + (y-1)^2)(4-x)'});
colorbar;
% --- CÁLCULO DEL MÁXIMO ---
% Busamos el valor máximo ignorando los NaNs
[max_temp, indice] = max(T(sonrisa));
[fil, col] = ind2sub(size(T), indice);
x_max = X(fil, col);
y_max = Y(fil, col);
fprintf('La temperatura máxima es %.2f en el punto (x=%.2f, y=%.2f)\n', ...
max_temp, x_max, y_max);
% Marcamos el punto máximo con una estrella roja
plot(x_max, y_max, 'p', 'MarkerFaceColor', 'r', 'MarkerEdgeColor', 'k', 'MarkerSize', 15);
hold off;
4 Ley de Fourier
% 1. Configuración del Mallado
% Usamos h=0.2 para que las flechas no salgan amontonadas y se vea limpio
h = 0.2;
x = 0 : h : 4;
y = 0 : h : 2;
[X, Y] = meshgrid(x, y);
% 2. Definir la Geometría (La placa trapezoidal)
y_abajo = X ./ 8;
y_arriba = 2 - (X ./ 8);
% Máscara lógica: determina qué puntos están DENTRO de la placa
dentro = (Y >= y_abajo) & (Y <= y_arriba);
% 3. Definir la Temperatura T(x,y)
% Fórmula dada: T(x,y) = (1 + (y-1)^2)(4-x)
T_func = @(x,y) (1 + (y - 1).^2) .* (4 - x);
T = T_func(X, Y);
% 4. Cálculos Físicos (Ley de Fourier)
% A) Calculamos el Gradiente (nabla T) mediante derivadas numéricas
[dTdx, dTdy] = gradient(T, h, h);
% B) Calculamos el Flujo de Calor Q
% Q = -k * nabla T. (Suponiendo k=1) -> Q apunta al frío
Qx = -dTdx;
Qy = -dTdy;
% 5. Limpieza de datos (Recortar la figura)
% Asignamos NaN (Not a Number) a todo lo que esté fuera de la placa.
% Esto hace que MATLAB no dibuje nada en esas zonas.
Qx(~dentro) = NaN;
Qy(~dentro) = NaN;
T(~dentro) = NaN;
% 6. Visualización
figure('Color', 'w', 'Name', 'Flujo de Calor Fourier');
hold on;
% A) FONDO: Mapa de Calor (contourf)
% 'LineStyle','none' quita las rayitas negras entre colores para que sea suave.
contourf(X, Y, T, 20, 'LineStyle', 'none');
colormap('jet'); % Paleta de colores: Azul (frío) -> Rojo (caliente)
% Barra de color explicativa
c = colorbar;
c.Label.String = 'Temperatura T(x,y)';
c.Label.FontSize = 10;
% B) PROTAGONISTA: El Campo Vectorial Q (Flechas)
% Las pintamos de negro ('k') para que resalten sobre el fondo de color.
quiver(X, Y, Qx, Qy, 'k', 'LineWidth', 1.2, 'AutoScaleFactor', 1.5);
% C) DIBUJO DEL CONTORNO (Bordes Negros)
plot([0 4], [0 0.5], 'k-', 'LineWidth', 2); % Borde inferior
plot([0 4], [2 1.5], 'k-', 'LineWidth', 2); % Borde superior
plot([0 0], [0 2], 'k-', 'LineWidth', 2); % Borde izquierdo
plot([4 4], [0.5 1.5], 'k-', 'LineWidth', 2); % Borde derecho
% 7. Configuración Final
axis equal; % OBLIGATORIO: Para que los ángulos sean reales (ortogonalidad)
axis([-0.5 4.5 -0.5 2.5]); % Márgenes de visualización
grid on;
xlabel('Eje x'); ylabel('Eje y');
title({'Vector Flujo de Calor', ...
'El calor fluye desde las capas más calientes hacia las más frías'});
hold off;


