Diferencia entre revisiones de «Placa Plana (Grupo 09)»

De MateWiki
Saltar a: navegación, buscar
Línea 461: Línea 461:
 
hold off;
 
hold off;
 
</source>
 
</source>
 +
 +
 +
==Rotacional==
 +
[[Archivo:Rotacionaldemanuel.png|600px|thumb]]
 +
{{matlab|codigo=
 +
% Mallado y Región
 +
h = 0.05;
 +
x = 0:h:4;
 +
y = 0:h:2;
 +
[X, Y] = meshgrid(x, y);
 +
 +
% Definición de la placa
 +
Condition = (Y >= X./8) & (Y <= 2 - X./8);
 +
X(~Condition) = NaN;
 +
Y(~Condition) = NaN;
 +
 +
% Definición del Mallado y Región
 +
h = 0.05;
 +
x = 0:h:4;
 +
y = 0:h:2;
 +
[X, Y] = meshgrid(x, y);
 +
 +
% Definición de la placa
 +
Condition = (Y >= X./8) & (Y <= 2 - X./8);
 +
X(~Condition) = NaN;
 +
Y(~Condition) = NaN;
 +
 +
% 2. Cálculo del Rotacional (Magnitud)
 +
% |Rot(u)| = 0.15 * x
 +
Rotacional = 0.15 .* X;
 +
 +
% Gráfica en 3D
 +
figure('Name', 'Rotacional en 3D', 'Color', 'w');
 +
 +
% 'surf' crea la superficie 3D. X e Y son la base, Rotacional es la altura.
 +
s = surf(X, Y, Rotacional);
 +
 +
% --- Estética de la gráfica 3D ---
 +
shading interp; % Suaviza los colores (quita las líneas de la cuadrícula)
 +
colormap(jet); % Mapa de colores (Azul -> Rojo)
 +
alpha(0.9); % Un poco de transparencia (opcional)
 +
 +
view(3); % Pone la vista en perspectiva 3D automáticamente
 +
axis tight; % Ajusta los ejes al contenido
 +
grid on;
 +
box on;
 +
 +
% Añadir barra de colores
 +
c = colorbar;
 +
c.Label.String = 'Magnitud |\nabla \times u|';
 +
c.Label.FontSize = 11;
 +
 +
% Etiquetas y Título
 +
title('Magnitud del Rotacional (Vista 3D)', 'FontSize', 12);
 +
xlabel('Eje X (Posición)', 'FontWeight', 'bold');
 +
ylabel('Eje Y (Posición)', 'FontWeight', 'bold');
 +
zlabel('Valor del Rotacional', 'FontWeight', 'bold');
 +
 +
% Añadir luz
 +
camlight left;
 +
lighting phong;
 +
 +
 +
hold on;
 +
contour(X, Y, Rotacional, 15, 'z', 'offset', 0, 'LineWidth', 1);
 +
}}
 +
 +
 +
==Tensores Deformacionales==
 +
 +
[[Archivo:contorno.jpg|miniaturadeimagen|derecha|800px|Figura 9]]
 +
<source lang="matlab">
 +
 +
 +
clc; clear; close all;
 +
 +
% Geometría de la placa
 +
h = 0.1;                       
 +
x = 0:h:4;
 +
num_puntos_y = round(2/h);
 +
s = linspace(0,1,num_puntos_y+1);% parámetro vertical [0,1]
 +
 +
[U,S] = meshgrid(x,s);
 +
f = U./8;                       
 +
g = 2 - U./8;                 
 +
 +
X = U;                         
 +
Y = f + S.*(g - f);         
 +
 +
% Campo de desplazamientos aplicado
 +
 +
u = (X.*Y)/20;                  % componente en x
 +
v = -(X.^2)/20;                  % componente en y
 +
 +
% Derivadas analíticas
 +
ux_x = Y/20;                   
 +
ux_y = X/20;                 
 +
vy_x = -(X/10);               
 +
vy_y = zeros(size(X));         
 +
 +
div_u = ux_x + vy_y; % divergencia = y/20
 +
 +
% Tensor de deformaciones
 +
eps_xx = ux_x;                 
 +
eps_yy = vy_y;                 
 +
eps_xy = 0.5*(ux_y + vy_x);     
 +
 +
% Tensiones
 +
lambda = 1; mu = 1;
 +
sigma_xx = lambda*div_u + 2*mu*eps_xx;  % = 3y/20
 +
sigma_yy = lambda*div_u + 2*mu*eps_yy;  % = y/20
 +
sigma_zz = lambda*div_u;                % = y/20 (eps_zz=0)
 +
sigma_xy = 2*mu*eps_xy;                  % = -x/20
 +
sigma_yx = sigma_xy;                    % simétrico
 +
sigma_xz = zeros(size(X));              % no hay variación en z
 +
sigma_zx = zeros(size(X));              % idem
 +
 +
% Tensión tangencial respecto al plano ortogonal a i
 +
 +
tau_i = abs(sigma_yx);                  % = | -x/20 |
 +
 +
% Gráficos
 +
 +
cm = turbo;
 +
lw = 1.2;
 +
 +
% Mallado y contornos de la placa
 +
figure('Name','Mallado de la placa','Color','w');
 +
mesh(X,Y,zeros(size(X)),'EdgeColor',[0,0.6,0.7],'FaceColor','none'); hold on;
 +
plot(X(1,:),Y(1,:),'k','LineWidth',2);      % borde inferior
 +
plot(X(end,:),Y(end,:),'k','LineWidth',2);    % borde superior
 +
plot(X(:,1),Y(:,1),'k','LineWidth',2);        % borde izquierdo (pared)
 +
plot(X(:,end),Y(:,end),'k','LineWidth',2);    % borde derecho
 +
axis([-0.5 4.5 -0.5 2.5]); axis equal; grid on; box on;
 +
xlabel('x'); ylabel('y'); title('Mallado y contorno de la placa');
 +
 +
% Tensiones normales
 +
figure('Name','Tensiones normales','Color','w');
 +
tiledlayout(1,3,'Padding','compact','TileSpacing','compact');
 +
 +
nexttile;
 +
surf(X,Y,sigma_xx); shading interp; colormap(cm); colorbar;
 +
title('\sigma_{xx}'); xlabel('x'); ylabel('y'); zlabel('\sigma_{xx}');
 +
axis tight; daspect([1 1 0.35]); view(45,30);
 +
 +
nexttile;
 +
surf(X,Y,sigma_yy); shading interp; colormap(cm); colorbar;
 +
title('\sigma_{yy}'); xlabel('x'); ylabel('y'); zlabel('\sigma_{yy}');
 +
axis tight; daspect([1 1 0.35]); view(45,30);
 +
 +
nexttile;
 +
surf(X,Y,sigma_zz); shading interp; colormap(cm); colorbar;
 +
title('\sigma_{zz}'); xlabel('x'); ylabel('y'); zlabel('\sigma_{zz}');
 +
axis tight; daspect([1 1 0.35]); view(45,30);
 +
sgtitle('Distribución de tensiones normales (\lambda=\mu=1)','FontWeight','bold');
 +
 +
% Tensión tangencial respecto a i
 +
figure('Name','Tension tangencial respecto a i','Color','w');
 +
surf(X,Y,tau_i); shading interp; colormap(cm); colorbar;
 +
title('\tau_{i} = |\sigma_{xy}|'); xlabel('x'); ylabel('y'); zlabel('\tau_{i}');
 +
axis tight; daspect([1 1 0.35]); view(45,30); grid on;
 +
 +
 +
figure('Name','Contornos 2D de tensiones','Color','w');
 +
tiledlayout(1,4,'Padding','compact','TileSpacing','compact');
 +
 +
nexttile; contourf(X,Y,sigma_xx,20,'LineColor','none'); axis equal tight; colorbar;
 +
title('\sigma_{xx}'); xlabel('x'); ylabel('y');
 +
 +
nexttile; contourf(X,Y,sigma_yy,20,'LineColor','none'); axis equal tight; colorbar;
 +
title('\sigma_{yy}'); xlabel('x'); ylabel('y');
 +
 +
nexttile; contourf(X,Y,sigma_zz,20,'LineColor','none'); axis equal tight; colorbar;
 +
title('\sigma_{zz}'); xlabel('x'); ylabel('y');
 +
 +
nexttile; contourf(X,Y,tau_i,20,'LineColor','none'); axis equal tight; colorbar;
 +
title('\tau_{i}'); xlabel('x'); ylabel('y');
 +
</source>
 +
 +
 +
==Tensiones tangenciales==
 +
[[Archivo:Tensionesdemanuel.png|600px|thumb]]
 +
{{matlab|codigo=
 +
% Definición del Mallado
 +
h = 0.15;
 +
x = 0:h:4;
 +
y = 0:h:2;
 +
[X, Y] = meshgrid(x, y);
 +
 +
% Definición de la placa
 +
Condition = (Y >= X./8) & (Y <= 2 - X./8);
 +
X(~Condition) = NaN;
 +
Y(~Condition) = NaN;
 +
 +
% Cálculo de la Tensión Tangencial
 +
 +
Sig_xy = -X ./ 20;
 +
 +
% Definición del Vector Tangencial
 +
 +
U_vec = zeros(size(X)); % Componente X es 0
 +
V_vec = Sig_xy; % Componente Y es el valor de la tensión
 +
 +
% Gráfica
 +
figure('Name', 'Apartado 10: Vector Tensión Tangencial', 'Color', 'w');
 +
 +
% Usamos quiver para dibujar las flechitas azules
 +
 +
quiver(X, Y, U_vec, V_vec, 'b', 'LineWidth', 1);
 +
 +
% Configuración de la vista
 +
view(2);
 +
axis equal;
 +
grid on;
 +
 +
% Títulos
 +
title('Tensiones tangenciales (Plano ortogonal a i)');
 +
xlabel('Eje X');
 +
ylabel('Eje Y');
 +
 +
% Ajuste de límites
 +
axis([-0.5 4.5 -0.5 2.5]);
 +
}}

Revisión del 17:52 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


1 Introducción

2 Mallado

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

Figura 2
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

Flujo de calor manuel.png
% 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

Figura 4:Máxima Variación de T
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

Desplazamiento manuel.jpg
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

Apartado6deformacion.png
% 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

Figura 7
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;


9 Rotacional

Rotacionaldemanuel.png
% Mallado y Región
h = 0.05;
x = 0:h:4;
y = 0:h:2;
[X, Y] = meshgrid(x, y);

% Definición de la placa
Condition = (Y >= X./8) & (Y <= 2 - X./8);
X(~Condition) = NaN;
Y(~Condition) = NaN;

% Definición del Mallado y Región
h = 0.05;
x = 0:h:4;
y = 0:h:2;
[X, Y] = meshgrid(x, y);

% Definición de la placa 
Condition = (Y >= X./8) & (Y <= 2 - X./8);
X(~Condition) = NaN;
Y(~Condition) = NaN;

% 2. Cálculo del Rotacional (Magnitud)
%


10 Tensores Deformacionales

Figura 9
clc; clear; close all;

% Geometría de la placa
h = 0.1;                        
x = 0:h:4;
num_puntos_y = round(2/h);
s = linspace(0,1,num_puntos_y+1);% parámetro vertical [0,1]

[U,S] = meshgrid(x,s);
f = U./8;                        
g = 2 - U./8;                   

X = U;                           
Y = f + S.*(g - f);           

% Campo de desplazamientos aplicado

u = (X.*Y)/20;                   % componente en x
v = -(X.^2)/20;                  % componente en y

% Derivadas analíticas
ux_x = Y/20;                    
ux_y = X/20;                   
vy_x = -(X/10);                 
vy_y = zeros(size(X));           

div_u = ux_x + vy_y; % divergencia = y/20

% Tensor de deformaciones
eps_xx = ux_x;                  
eps_yy = vy_y;                  
eps_xy = 0.5*(ux_y + vy_x);      

% Tensiones 
lambda = 1; mu = 1;
sigma_xx = lambda*div_u + 2*mu*eps_xx;   % = 3y/20
sigma_yy = lambda*div_u + 2*mu*eps_yy;   % = y/20
sigma_zz = lambda*div_u;                 % = y/20 (eps_zz=0)
sigma_xy = 2*mu*eps_xy;                  % = -x/20
sigma_yx = sigma_xy;                     % simétrico
sigma_xz = zeros(size(X));               % no hay variación en z
sigma_zx = zeros(size(X));               % idem

% Tensión tangencial respecto al plano ortogonal a i 

tau_i = abs(sigma_yx);                   % = | -x/20 |

% Gráficos

cm = turbo;
lw = 1.2;

% Mallado y contornos de la placa
figure('Name','Mallado de la placa','Color','w');
mesh(X,Y,zeros(size(X)),'EdgeColor',[0,0.6,0.7],'FaceColor','none'); hold on;
plot(X(1,:),Y(1,:),'k','LineWidth',2);       % borde inferior
plot(X(end,:),Y(end,:),'k','LineWidth',2);    % borde superior
plot(X(:,1),Y(:,1),'k','LineWidth',2);        % borde izquierdo (pared)
plot(X(:,end),Y(:,end),'k','LineWidth',2);    % borde derecho
axis([-0.5 4.5 -0.5 2.5]); axis equal; grid on; box on;
xlabel('x'); ylabel('y'); title('Mallado y contorno de la placa');

% Tensiones normales
figure('Name','Tensiones normales','Color','w');
tiledlayout(1,3,'Padding','compact','TileSpacing','compact');

nexttile;
surf(X,Y,sigma_xx); shading interp; colormap(cm); colorbar;
title('\sigma_{xx}'); xlabel('x'); ylabel('y'); zlabel('\sigma_{xx}');
axis tight; daspect([1 1 0.35]); view(45,30);

nexttile;
surf(X,Y,sigma_yy); shading interp; colormap(cm); colorbar;
title('\sigma_{yy}'); xlabel('x'); ylabel('y'); zlabel('\sigma_{yy}');
axis tight; daspect([1 1 0.35]); view(45,30);

nexttile;
surf(X,Y,sigma_zz); shading interp; colormap(cm); colorbar;
title('\sigma_{zz}'); xlabel('x'); ylabel('y'); zlabel('\sigma_{zz}');
axis tight; daspect([1 1 0.35]); view(45,30);
sgtitle('Distribución de tensiones normales (\lambda=\mu=1)','FontWeight','bold');

% Tensión tangencial respecto a i 
figure('Name','Tension tangencial respecto a i','Color','w');
surf(X,Y,tau_i); shading interp; colormap(cm); colorbar;
title('\tau_{i} = |\sigma_{xy}|'); xlabel('x'); ylabel('y'); zlabel('\tau_{i}');
axis tight; daspect([1 1 0.35]); view(45,30); grid on;


figure('Name','Contornos 2D de tensiones','Color','w');
tiledlayout(1,4,'Padding','compact','TileSpacing','compact');

nexttile; contourf(X,Y,sigma_xx,20,'LineColor','none'); axis equal tight; colorbar;
title('\sigma_{xx}'); xlabel('x'); ylabel('y');

nexttile; contourf(X,Y,sigma_yy,20,'LineColor','none'); axis equal tight; colorbar;
title('\sigma_{yy}'); xlabel('x'); ylabel('y');

nexttile; contourf(X,Y,sigma_zz,20,'LineColor','none'); axis equal tight; colorbar;
title('\sigma_{zz}'); xlabel('x'); ylabel('y');

nexttile; contourf(X,Y,tau_i,20,'LineColor','none'); axis equal tight; colorbar;
title('\tau_{i}'); xlabel('x'); ylabel('y');


11 Tensiones tangenciales

Tensionesdemanuel.png
% Definición del Mallado
h = 0.15; 
x = 0:h:4;
y = 0:h:2;
[X, Y] = meshgrid(x, y);

% Definición de la placa 
Condition = (Y >= X./8) & (Y <= 2 - X./8);
X(~Condition) = NaN;
Y(~Condition) = NaN;

% Cálculo de la Tensión Tangencial 

Sig_xy = -X ./ 20;

% Definición del Vector Tangencial

U_vec = zeros(size(X)); % Componente X es 0
V_vec = Sig_xy; % Componente Y es el valor de la tensión

% Gráfica
figure('Name', 'Apartado 10: Vector Tensión Tangencial', 'Color', 'w');

% Usamos quiver para dibujar las flechitas azules

quiver(X, Y, U_vec, V_vec, 'b', 'LineWidth', 1);

% Configuración de la vista
view(2); 
axis equal; 
grid on; 

% Títulos 
title('Tensiones tangenciales (Plano ortogonal a i)');
xlabel('Eje X');
ylabel('Eje Y');

% Ajuste de límites 
axis([-0.5 4.5 -0.5 2.5]);