Diferencia entre revisiones de «Placa Plana (Grupo 09)»
De MateWiki
| Línea 349: | Línea 349: | ||
xlim([-0.5 4.5]); ylim([-0.5 2.5]); | xlim([-0.5 4.5]); ylim([-0.5 2.5]); | ||
}} | }} | ||
| + | |||
| + | ==Desplazamiento del Sólido== | ||
| + | |||
| + | [[Archivo:Apartado6deformacion.png|thumb|1000px]] | ||
| + | {{matlab|codigo= | ||
| + | % Definición de Geometría y Desplazamientos | ||
| + | h = 0.1; % Paso del mallado | ||
| + | x = 0:h:4; | ||
| + | y = 0:h:2; | ||
| + | [X, Y] = meshgrid(x, y); | ||
| + | |||
| + | % Definición de la Región | ||
| + | |||
| + | % Aplicamos máscara | ||
| + | X(~Condicion) = NaN; | ||
| + | Y(~Condicion) = NaN; | ||
| + | |||
| + | % Cálculo de Desplazamientos | ||
| + | |||
| + | Rho = sqrt(X.^2 + Y.^2); | ||
| + | Theta = atan2(Y, X); | ||
| + | |||
| + | % Valor escalar de u_theta | ||
| + | U_theta_val = -1/20 .* Rho.^2 .* cos(Theta); | ||
| + | |||
| + | % Proyección a cartesianas | ||
| + | Ux = -U_theta_val .* sin(Theta); | ||
| + | Uy = U_theta_val .* cos(Theta); | ||
| + | |||
| + | % --- Posición Final Deformada --- | ||
| + | X_final = X + Ux; | ||
| + | Y_final = Y + Uy; | ||
| + | |||
| + | % Gráfica Comparativa de Sólidos Mallados | ||
| + | figure('Name', 'Comparación Antes/Después', 'Color', 'w', 'Position', [100, 100, 1000, 500]); | ||
| + | |||
| + | % Placa Original | ||
| + | subplot(1, 2, 1); | ||
| + | hold on; | ||
| + | |||
| + | mesh(X, Y, zeros(size(X)), 'EdgeColor', [0 0.7 0.9], 'FaceColor', 'none'); | ||
| + | |||
| + | view(2); | ||
| + | axis equal; | ||
| + | grid on; | ||
| + | box on; | ||
| + | |||
| + | title('Placa antes del desplazamiento', 'FontWeight', 'bold'); | ||
| + | xlabel('Eje X'); | ||
| + | ylabel('Eje Y'); | ||
| + | axis([-1.5 4.5 0 2.5]); | ||
| + | |||
| + | % Placa Deformada | ||
| + | subplot(1, 2, 2); | ||
| + | hold on; | ||
| + | % Dibujamos la malla usando las coordenadas finales (X_final, Y_final) | ||
| + | mesh(X_final, Y_final, zeros(size(X)), 'EdgeColor', [0 0.7 0.9], 'FaceColor', 'none'); | ||
| + | |||
| + | view(2); | ||
| + | axis equal; | ||
| + | grid on; | ||
| + | box on; | ||
| + | |||
| + | title('Placa después del desplazamiento', 'FontWeight', 'bold'); | ||
| + | xlabel('Eje X'); | ||
| + | ylabel('Eje Y'); | ||
| + | axis([-1.5 4.5 0 2.5]); | ||
| + | |||
| + | sgtitle('Visualización del Sólido Mallado bajo Deformación'); % Título | ||
| + | }} | ||
| + | |||
| + | |||
| + | ==Divergencia== | ||
| + | |||
| + | [[Archivo:divergenciaplaca.jpg|miniaturadeimagen|derecha|800px|Figura 7]] | ||
| + | <source lang="matlab"> | ||
| + | clc; clear; close all; | ||
| + | % Definir Malla y Placa | ||
| + | h=0.05; | ||
| + | [X,Y]=meshgrid(0:h:4, 0:h:2); | ||
| + | f=X./8;g=2-X./8; % Límites | ||
| + | EnPlaca=Y>=f&Y<=g; % Máscara lógica | ||
| + | |||
| + | % Divergencia | ||
| + | Div=Y./20; | ||
| + | Div(~EnPlaca)=NaN; | ||
| + | |||
| + | % Visualización | ||
| + | figure('Name','Divergencia');clf;hold on; | ||
| + | axis equal; axis([-0.5 4.5 -0.5 2.5]);box on; | ||
| + | title('Divergencia: Cambio de Volumen'); | ||
| + | xlabel('X'); ylabel('Y'); | ||
| + | [C, h_cont]=contourf(X, Y, Div, 20,'LineStyle','none'); | ||
| + | colormap(jet); | ||
| + | c=colorbar;ylabel(c,'Valor de Divergencia'); | ||
| + | |||
| + | % Dibujar bordes negros | ||
| + | x_b = linspace(0, 4, 200); | ||
| + | plot(x_b, x_b./8,'k','LineWidth',1); | ||
| + | plot(x_b, 2 - x_b./8,'k','LineWidth',1); | ||
| + | plot([0 0],[0 2],'k','LineWidth',1); | ||
| + | plot([4 4],[0.5 1.5],'k','LineWidth',1); | ||
| + | |||
| + | % Señalar puntos clave | ||
| + | plot(0,2,'kp','MarkerSize',12,'MarkerFaceColor','r'); | ||
| + | text(0.1, 2.1,'Max Expansión','FontWeight','bold'); | ||
| + | |||
| + | |||
| + | plot(0,0,'kp','MarkerSize',12,'MarkerFaceColor','b'); | ||
| + | text(0.1,-0.1,'Divergencia Nula','FontWeight','bold'); | ||
| + | hold off; | ||
| + | </source> | ||
Revisión del 17:47 1 dic 2025
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Placa plana. Grupo 09 |
| Asignatura | Teoría de Campos |
| Curso | 2025-26 |
| Autores | Rafael Gonzalez Gomez Mario Belinchón Buendía Alejandro Morales Tari Pablo Márquez Blanco |
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
Contenido
1 Introducción
2 Mallado
h = 1/10;
color_malla = [0, 0.6, 0.6]; % Color
% Coordenadas
u = 0 : h : 4;
v = 0 : h : 2;
[U, V] = meshgrid(u, v);
% Calculamos los bordes
y_abajo = U ./ 8;
y_arriba = 2 - (U ./ 8);
% Interpolamos
factor_altura = V ./ 2; % Va de 0 (abajo) a 1 (arriba)
X = U;
Y = y_abajo + factor_altura .* (y_arriba - y_abajo);
% Visualización
figure('Color', 'w'); hold on;
% Dibujar las líneas VERTICALES
plot(X, Y, 'Color', color_malla, 'LineWidth', 0.5);
% Dibujar las líneas HORIZONTALES
plot(X', Y', 'Color', color_malla, 'LineWidth', 0.5);
% Dibujar el contorno
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
% 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
clc; clear; close all;
% Definición
h=0.1;
x=0:h:4;
y=0:h:2;
[X,Y] = meshgrid(x, y);
% Funciones
f=@(x)x./8;
g=@(x)2-x./8;
EnPlaca=Y>=f(X)&Y< g(X);
% Definición de la Temperatura y el Gradiente
T=(1+(Y-1).^2).*(4-X);
T_plot=T;
T_plot(~EnPlaca)=NaN;
% Cálculo numérico del gradiente para los vectores
U=-(1+(Y-1).^2);
V=2.*(Y-1).*(4-X);
U(~EnPlaca)=NaN;
V(~EnPlaca)=NaN;
% Gráfica
figure(1);
clf;
hold on;
axis equal;
axis([-0.5 4.5 -0.5 2.5]);
grid on;
title({'Isotermas y Gradiente \nabla T', 'T(x,y) = (1+(y-1)^2)(4-x)'});
xlabel('x'); ylabel('y');
% Mapa de calor
[C_fill, h_fill] = contourf(X, Y, T_plot, 20, 'LineStyle', 'none');
colormap(jet);
cb=colorbar;
ylabel(cb,'Temperatura T');
% Curvas de nivel
[C, h_cont]=contour(X,Y,T_plot,10,'k','LineWidth',1.5);
clabel(C,h_cont,'FontSize',9,'Color','k','FontWeight','bold');
% Campo Vectorial
step=3;
quiver(X(1:step:end,1:step:end),Y(1:step:end, 1:step:end), ...
U(1:step:end,1:step:end),V(1:step:end,1:step:end), ...
1.2,'k','LineWidth',1); % '1.2' es el factor de escala de las flechas
% Dibujar bordes de la placa
plot(x,f(x),'k-','LineWidth',2);
plot(x,g(x),'k-','LineWidth',2);
plot([0 0],[f(0) g(0)],'k-','LineWidth',2);
plot([4 4],[f(4) g(4)],'k-','LineWidth',2);
% Señalar Máximo
plot(0,0,'rp','MarkerSize',12,'MarkerFaceColor','r');
plot(0,2,'rp','MarkerSize',12,'MarkerFaceColor','r');
text(0.1,0,'Max T','Color','white','FontWeight','bold');
hold off;
4 Ley de Fourier
% Configuración del Mallado
h = 0.2;
x = 0 : h : 4;
y = 0 : h : 2;
[X, Y] = meshgrid(x, y);
% Definir la Geometría
y_abajo = X ./ 8;
y_arriba = 2 - (X ./ 8);
% Definir la Temperatura
T_func = @(x,y) (1 + (y - 1).^2) .* (4 - x);
T = T_func(X, Y);
% Cálculos Físicos
% A) Calculamos el Gradiente (nabla T) mediante derivadas numéricas
[dTdx, dTdy] = gradient(T, h, h);
% Calculamos el Flujo de Calor
Qx = -dTdx;
Qy = -dTdy;
% Limpieza
Qx(~dentro) = NaN;
Qy(~dentro) = NaN;
T(~dentro) = NaN;
% Visualización
figure('Color', 'w', 'Name', 'Flujo de Calor Fourier');
hold on;
% FONDO: Mapa de Calor
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;
% El Campo Vectorial.
quiver(X, Y, Qx, Qy, 'k', 'LineWidth', 1.2, 'AutoScaleFactor', 1.5);
% Dibujo del contorno.
plot([0 4], [0 0.5], 'k-', 'LineWidth', 2);
plot([0 4], [2 1.5], 'k-', 'LineWidth', 2);
plot([0 0], [0 2], 'k-', 'LineWidth', 2);
plot([4 4], [0.5 1.5], 'k-', 'LineWidth', 2);
% Configuración Final
axis equal;
axis([-0.5 4.5 -0.5 2.5]);
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;
5 Gradiente Térmico
clc; clear; close all;
h=0.05;
[X,Y]=meshgrid(0:h:4,0:h:2);
f=X./8;g=2-X./8;
EnPlaca=Y>=f&Y<=g;
% Gradiente y Norma
Tx=-(1+(Y-1).^2);
Ty=2.*(Y-1).*(4-X);
% Gradiente
NormaGrad=sqrt(Tx.^2+Ty.^2);
NormaGrad(~EnPlaca)=0;
% Máximo
max_val=max(NormaGrad(:));
[filas,cols]=find(NormaGrad==max_val);
% puntos máximos
x_max=X(filas,cols);
y_max=Y(filas,cols);
% Componentes del vector dirección
u_dir=Tx(filas,cols);
v_dir=Ty(filas,cols);
% Visualización
figure('Name','Máxima Variación de T');
hold on;axis equal;axis([-0.5 4.5 -0.5 2.5]);grid on;
title({'Puntos de Máxima Variación de Temperatura', '(Color = Magnitud del Gradiente T)'});
xlabel('x'); ylabel('y');
% Mapa de calor
NormaGrad(~EnPlaca)=NaN;
contourf(X,Y,NormaGrad,20,'LineStyle','none');
colormap(jet);colorbar;
% Contorno
plot([0 4 4 0 0],[0 0.5 1.5 2 0],'k','LineWidth',1.5);
% Puntos rojos y dirección
plot(x_max, y_max,'ro','MarkerSize',7.5,'MarkerFaceColor','r');
% Flechas de dirección
quiver(x_max,y_max,u_dir,v_dir,0.5,'k','LineWidth',2,'MaxHeadSize',0.5);
% Resultados
fprintf('La variación máxima es %.2f\n', max_val);
fprintf('Ocurre en los puntos:\n');
for i=1:length(x_max)
fprintf('P(%d): x=%.2f, y=%.2f. Dirección del vector: [%.2f, %.2f]\n',i,x_max(i),y_max(i),u_dir(i),v_dir(i));
end
6 Campo de Desplazamientos
h = 0.1;
x = 0:h:4;
y = 0:h:2;
[X, Y] = meshgrid(x, y);
% Definición de la región
Condicion = (Y >= X./8) & (Y <= 2 - X./8);
% Aplicamos Máscara
X(~Condicion) = NaN;
Y(~Condicion) = NaN;
% Cálculo del Campo de Desplazamientos
Rho = sqrt(X.^2 + Y.^2);
Theta = atan2(Y, X);
U_theta_val = -1/20 .* Rho.^2 .* cos(Theta);
Ux = -U_theta_val .* sin(Theta);
Uy = U_theta_val .* cos(Theta);
% Calcular la posición deformada
% Posición final = Posición inicial + Desplazamiento
X_final = X + Ux;
Y_final = Y + Uy;
% Comparativa
figure('Name', 'Deformación de la Placa', 'Color', 'w');
% PLACA ORIGINAL
subplot(1, 2, 1);
% Usamos mesh con Z=0 para dibujar la 'rejilla' plana
mesh(X, Y, zeros(size(X)), 'EdgeColor', 'b');
view(2); % Vista superior (2D)
axis equal; grid on;
title('Placa antes del desplazamiento');
xlabel('Eje X'); ylabel('Eje Y');
axis([-0.5 4.5 -0.5 2.5]);
% PLACA DEFORMADA
subplot(1, 2, 2);
mesh(X_final, Y_final, zeros(size(X)), 'EdgeColor', 'b');
view(2);
axis equal; grid on;
title('Placa después del desplazamiento');
xlabel('Eje X'); ylabel('Eje Y');
axis([-0.5 4.5 -0.5 2.5]);
Apartado 5
figure('Name', 'Campo Vectorial de Desplazamientos');
hold on; axis equal; grid on;
title('Campo de Desplazamientos');
% Dibujamos contorno original de referencia
plot(X(:), Y(:), '.k', 'MarkerSize', 1);
% Dibujamos los vectores
quiver(X, Y, Ux, Uy, 0, 'r', 'LineWidth', 1.5);
xlabel('Eje X'); ylabel('Eje Y');
xlim([-0.5 4.5]); ylim([-0.5 2.5]);
7 Desplazamiento del Sólido
% Definición de Geometría y Desplazamientos
h = 0.1; % Paso del mallado
x = 0:h:4;
y = 0:h:2;
[X, Y] = meshgrid(x, y);
% Definición de la Región
% Aplicamos máscara
X(~Condicion) = NaN;
Y(~Condicion) = NaN;
% Cálculo de Desplazamientos
Rho = sqrt(X.^2 + Y.^2);
Theta = atan2(Y, X);
% Valor escalar de u_theta
U_theta_val = -1/20 .* Rho.^2 .* cos(Theta);
% Proyección a cartesianas
Ux = -U_theta_val .* sin(Theta);
Uy = U_theta_val .* cos(Theta);
% --- Posición Final Deformada ---
X_final = X + Ux;
Y_final = Y + Uy;
% Gráfica Comparativa de Sólidos Mallados
figure('Name', 'Comparación Antes/Después', 'Color', 'w', 'Position', [100, 100, 1000, 500]);
% Placa Original
subplot(1, 2, 1);
hold on;
mesh(X, Y, zeros(size(X)), 'EdgeColor', [0 0.7 0.9], 'FaceColor', 'none');
view(2);
axis equal;
grid on;
box on;
title('Placa antes del desplazamiento', 'FontWeight', 'bold');
xlabel('Eje X');
ylabel('Eje Y');
axis([-1.5 4.5 0 2.5]);
% Placa Deformada
subplot(1, 2, 2);
hold on;
% Dibujamos la malla usando las coordenadas finales (X_final, Y_final)
mesh(X_final, Y_final, zeros(size(X)), 'EdgeColor', [0 0.7 0.9], 'FaceColor', 'none');
view(2);
axis equal;
grid on;
box on;
title('Placa después del desplazamiento', 'FontWeight', 'bold');
xlabel('Eje X');
ylabel('Eje Y');
axis([-1.5 4.5 0 2.5]);
sgtitle('Visualización del Sólido Mallado bajo Deformación'); % Título
8 Divergencia
clc; clear; close all;
% Definir Malla y Placa
h=0.05;
[X,Y]=meshgrid(0:h:4, 0:h:2);
f=X./8;g=2-X./8; % Límites
EnPlaca=Y>=f&Y<=g; % Máscara lógica
% Divergencia
Div=Y./20;
Div(~EnPlaca)=NaN;
% Visualización
figure('Name','Divergencia');clf;hold on;
axis equal; axis([-0.5 4.5 -0.5 2.5]);box on;
title('Divergencia: Cambio de Volumen');
xlabel('X'); ylabel('Y');
[C, h_cont]=contourf(X, Y, Div, 20,'LineStyle','none');
colormap(jet);
c=colorbar;ylabel(c,'Valor de Divergencia');
% Dibujar bordes negros
x_b = linspace(0, 4, 200);
plot(x_b, x_b./8,'k','LineWidth',1);
plot(x_b, 2 - x_b./8,'k','LineWidth',1);
plot([0 0],[0 2],'k','LineWidth',1);
plot([4 4],[0.5 1.5],'k','LineWidth',1);
% Señalar puntos clave
plot(0,2,'kp','MarkerSize',12,'MarkerFaceColor','r');
text(0.1, 2.1,'Max Expansión','FontWeight','bold');
plot(0,0,'kp','MarkerSize',12,'MarkerFaceColor','b');
text(0.1,-0.1,'Divergencia Nula','FontWeight','bold');
hold off;

