Diferencia entre revisiones de «Deformaciones de una columna.Grupo 28»
(→Divergencia del campo de desplazamientos) |
|||
| Línea 170: | Línea 170: | ||
\nabla\cdot\vec u = cosθsin( \frac{2πρ}{50})\ | \nabla\cdot\vec u = cosθsin( \frac{2πρ}{50})\ | ||
</math> | </math> | ||
| + | {{matlab|codigo= | ||
| + | |||
| + | % Definición de la malla en coordenadas cartesianas | ||
| + | x = -1:0.2:1; % Coordenadas x | ||
| + | y = 0:0.1:10; % Coordenadas y | ||
| + | [xx, yy] = meshgrid(x, y); | ||
| + | |||
| + | % Conversión de la malla cartesiana (x, y) a coordenadas cilíndricas (r, theta) | ||
| + | r = sqrt(xx.^2 + yy.^2); % Radio en coordenadas cilíndricas | ||
| + | theta = atan2(yy, xx); % Ángulo en coordenadas cilíndricas | ||
| + | |||
| + | % Definir la divergencia en coordenadas cilíndricas | ||
| + | diver = cos(theta) .* sin(2 * pi * r / 50); | ||
| + | |||
| + | % Encontrar los puntos de divergencia máxima, mínima y nula | ||
| + | [minVal, minIdx] = min(diver(:)); % Valor mínimo y su índice lineal | ||
| + | [maxVal, maxIdx] = max(diver(:)); % Valor máximo y su índice lineal | ||
| + | nullIdx = find(abs(diver) < 1e-6); % Índices donde la divergencia es nula (aproximación) | ||
| + | |||
| + | % Convertir los índices lineales a índices de matriz (para la malla) | ||
| + | [rowMin, colMin] = ind2sub(size(diver), minIdx); % Índices del mínimo | ||
| + | [rowMax, colMax] = ind2sub(size(diver), maxIdx); % Índices del máximo | ||
| + | [rowNull, colNull] = ind2sub(size(diver), nullIdx); % Índices donde la divergencia es nula | ||
| + | |||
| + | % Coordenadas correspondientes en (x, y) | ||
| + | minPoint = [xx(rowMin, colMin), yy(rowMin, colMin)]; | ||
| + | maxPoint = [xx(rowMax, colMax), yy(rowMax, colMax)]; | ||
| + | nullPoints = [xx(rowNull, colNull), yy(rowNull, colNull)]; | ||
| + | |||
| + | % Mostrar los resultados | ||
| + | fprintf('Divergencia mínima:\n Valor: %.3f, Punto: (%.3f, %.3f)\n', minVal, minPoint(1), minPoint(2)); | ||
| + | fprintf('Divergencia máxima:\n Valor: %.3f, Punto: (%.3f, %.3f)\n', maxVal, maxPoint(1), maxPoint(2)); | ||
| + | fprintf('Divergencia nula en %d puntos:\n', size(nullPoints, 1)); | ||
| + | disp(nullPoints); | ||
| + | |||
| + | % Representación de la divergencia | ||
| + | figure; | ||
| + | surf(xx, yy, diver); % Malla original, pero con valores de divergencia corregidos | ||
| + | shading interp; % Suavizado | ||
| + | colorbar; % Barra de colores | ||
| + | hold on; | ||
| + | |||
| + | % Marcar los puntos de interés | ||
| + | plot3(minPoint(1), minPoint(2), minVal, 'ro', 'MarkerSize', 8, 'MarkerFaceColor', 'r'); % Mínimo | ||
| + | plot3(maxPoint(1), maxPoint(2), maxVal, 'go', 'MarkerSize', 8, 'MarkerFaceColor', 'g'); % Máximo | ||
| + | for i = 1:size(nullPoints, 1) % Marcar puntos nulos | ||
| + | plot3(nullPoints(i, 1), nullPoints(i, 2), 0, 'bo', 'MarkerSize', 6, 'MarkerFaceColor', 'b'); | ||
| + | end | ||
| + | |||
| + | % Etiquetas del gráfico | ||
| + | title('Divergencia en coordenadas cilíndricas con puntos de interés'); | ||
| + | xlabel('x'); | ||
| + | ylabel('y'); | ||
| + | zlabel('Divergencia'); | ||
| + | legend('Divergencia', 'Mínimo', 'Máximo', 'Nulo'); | ||
| + | }} | ||
Revisión del 22:16 7 dic 2024
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Deformaciones de una columna . Grupo 28 |
| Asignatura | Teoría de Campos |
| Curso | 2024-25 |
| Autores |
|
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
intro
Contenido
1 Representación del mallado del sólido
Definimos el mallado que representa el interior del sólido mediante dos vectores x e y los cuales representan el intervalo en el que está definida nuestra placa, tomando un muestreo h=1/10. Al crear la malla, al representarla con el comando surf, tenemos que tener en cuenta que es plana dando valor 0 a la altura de los puntos de la misma.
h=0.1; %muestreo
x=-1:h:1; %eje x de la placa
y=0:h:10; %eje y de la placa
[xx,yy]=meshgrid(x,y); %mallado de la placa
figure(1)
surf(xx,yy,0*xx); %representación de la placa
axis([-2,2,0,10]) %ejes del rectángulo
view(2)
2 Gradiente de la temperatura
El cálculo del gradiente de un campo escalar se expresa como la derivada parcial respecto de cada coordenada de dicho campo en función de la base ortonormal orientada positiva [math]\vec{i},\vec{j},\vec{k}[/math] (COORDENADAS CARTESIANAS). Es decir:
A continuación se muestra el código completo de matlab, del cual resultan las siguientes imágenes en las que podemos ver las curvas de nivel y donde se encuentra su máximo y mínimo, a partir de los colores de las gráficas y a partir de el propio matlab. Este nos índica al ejecutar el programa que el máximo es: 0.99996
clc
clear
h = 0.2; %MUESTREO
x =-1.0:h:1.0; %DOMINIO DE X
y =0.0:h:10.0; %DOMINIO DE Y
[X,Y]= meshgrid(x,y); % CREACIÓN DEL MALLADO
T=sin(2.*pi.*(sqrt(X.^2+Y.^2))); %TEMPERATURA EN CADA PUNTO DEL MALLADO
mesh(X,Y,0*X) %CREACIÓN DE LA MALLA
subplot(1,3,1) %GRÁFICO SUPERIOR
surf(X,Y,T); %DEGRADACIÓN DE COLORES
axis ([-1,1,-0.5,10.5])
view(2)
colorbar %BARRA DE COLORES
%TÍTULO PRIMERA GRÁFICA Y EJES
title('CAMPO DE TEMPERATURAS')
xlabel('eje X')
ylabel('eje Y')
subplot(1,3,2) %GRÁFICO INFERIOR
contour(X,Y,T,11);
axis ([-1.0,1.0,-0.5,10.5]);
%TÍTULO SEGUNDA GRÁFICA Y EJES
title('CURVAS DE NIVEL')
xlabel('eje X')
ylabel('eje Y')
colorbar %BARRA DE COLORES
Tmax=max(max(T)) %PUNTO MÁXIMO
subplot(1,3,3)
axis ([-1.25,1.25,-0.5,10.5])
view(2)
%CURVAS DE NIVEL ENUMERADAS
[M,c]=contour(X,Y,T,[0:0.75:10],'ShowText','on')
%TÍTULO TERCERA GRÁFICA Y EJES
title('CURVAS DE NIVEL NUMERADAS')
xlabel('eje X')
ylabel('eje Y')
colorbar %BARRA DE COLORES
A continuación, se va a demostrar como el gradiente, previamente calculado, es perpendicular a las líneas de nivel anteriores.
Al no verse claro en la imagen original, con la cantidad de líneas de flujo, se opta por aplicar un zoom para una correcta visualización.
clear;clc;
h = 2/10; %MUESTREO
x = [-1:h:1]; %DOMINIO DE X
y = [0:h:12]; %DOMINIO DE Y
[X,Y]= meshgrid(x,y); %CREACIÓN DEL MALLADO
T=sin(2.*pi.*(sqrt(X.^2+Y.^2))); %TEMPERATURA EN CADA PUNTO DEL MALLADO
contour(X,Y,T,11); %CURVAS DE NIVEL
dx=2*pi*X.*cos(2.*pi.*sqrt(X.^2+Y.*2))./sqrt(X.^2+Y.*2); %PARCIAL DE X
dy=2*pi*Y.*cos(2.*pi.*sqrt(X.^2+Y.*2))./sqrt(X.^2+Y.*2); %PARCIAL DE Y
%TÍTULO Y EJES
title('Gradiente de temperatura');
xlabel('Eje X');
ylabel('Eje Y');
% Representación de la temperatura y las curvas de nivel
hold on
quiver(x,y,dx,dy);
axis equal
colorbar
3 Ley de Fourier
Gracias al segundo principio de la termodinámica conocemos el calor emitido por dos focos, uno cálido y otro frío, solo puede ir en un sentido, de mayor a menor calor. Y la ley expresada por el matemático y físico Jean-Baptiste Joseph Fourier trata de establecer una relación entre la distancia, tiempo y el flujo de calor entre focos. Dicha ley viene expresada [math]\vec{Q}=−K∇T[/math], donde K es la constante de conductividad térmica que dependerá del material a estudio. En nuestro caso, la sección del solido tiene por K el valor asociado 1.
Se observa que las flechas van en sentido contrario al gradiente.
clear;clc;
%Definimos las variables x e y usando como paso de muestreo h
h=2/10;
x=[-1:h:1];
y=[0:h:10];
%Creación del mallado
[X,Y]=meshgrid(x,y);
mesh(X,Y,0.*X);
%Definimos la función T
T=sin(2.*pi.*(sqrt(X.^2+Y.^2)));
%Curvas de nivel
contour(X,Y,T,11);
hold on
%Calculo del gradiente de T
dx=2*pi*X.*cos(2.*pi.*sqrt(X.^2+Y.*2))./sqrt(X.^2+Y.*2);
dy=2*pi*X.*cos(2.*pi.*sqrt(X.^2+Y.*2))./sqrt(X.^2+Y.*2);
%Constante de conductividad térmica y ley de Fourier
k=1;
Q1=-k.*(dx);
Q2=-k.*(dy);
%Representación del campo vectorial
quiver(x,y,Q1,Q2,'r');
axis equal;
hold off
%Título y nombre de los ejes
title('Energía calorífica');
xlabel('Eje X');
ylabel('Eje Y');4 (titulo 4)
5 (titulo 5)
6 (titulo 6)
7 Divergencia del campo de desplazamientos
La divergencia de un campo vectorial es una medida de la cantidad de flujo que sale o entra en un punto de la región definida.
En este caso la divergencia resultante es [math]
\nabla\cdot\vec u = cosθsin( \frac{2πρ}{50})\
[/math]
% Definición de la malla en coordenadas cartesianas
x = -1:0.2:1; % Coordenadas x
y = 0:0.1:10; % Coordenadas y
[xx, yy] = meshgrid(x, y);
% Conversión de la malla cartesiana (x, y) a coordenadas cilíndricas (r, theta)
r = sqrt(xx.^2 + yy.^2); % Radio en coordenadas cilíndricas
theta = atan2(yy, xx); % Ángulo en coordenadas cilíndricas
% Definir la divergencia en coordenadas cilíndricas
diver = cos(theta) .* sin(2 * pi * r / 50);
% Encontrar los puntos de divergencia máxima, mínima y nula
[minVal, minIdx] = min(diver(:)); % Valor mínimo y su índice lineal
[maxVal, maxIdx] = max(diver(:)); % Valor máximo y su índice lineal
nullIdx = find(abs(diver) < 1e-6); % Índices donde la divergencia es nula (aproximación)
% Convertir los índices lineales a índices de matriz (para la malla)
[rowMin, colMin] = ind2sub(size(diver), minIdx); % Índices del mínimo
[rowMax, colMax] = ind2sub(size(diver), maxIdx); % Índices del máximo
[rowNull, colNull] = ind2sub(size(diver), nullIdx); % Índices donde la divergencia es nula
% Coordenadas correspondientes en (x, y)
minPoint = [xx(rowMin, colMin), yy(rowMin, colMin)];
maxPoint = [xx(rowMax, colMax), yy(rowMax, colMax)];
nullPoints = [xx(rowNull, colNull), yy(rowNull, colNull)];
% Mostrar los resultados
fprintf('Divergencia mínima:\n Valor: %.3f, Punto: (%.3f, %.3f)\n', minVal, minPoint(1), minPoint(2));
fprintf('Divergencia máxima:\n Valor: %.3f, Punto: (%.3f, %.3f)\n', maxVal, maxPoint(1), maxPoint(2));
fprintf('Divergencia nula en %d puntos:\n', size(nullPoints, 1));
disp(nullPoints);
% Representación de la divergencia
figure;
surf(xx, yy, diver); % Malla original, pero con valores de divergencia corregidos
shading interp; % Suavizado
colorbar; % Barra de colores
hold on;
% Marcar los puntos de interés
plot3(minPoint(1), minPoint(2), minVal, 'ro', 'MarkerSize', 8, 'MarkerFaceColor', 'r'); % Mínimo
plot3(maxPoint(1), maxPoint(2), maxVal, 'go', 'MarkerSize', 8, 'MarkerFaceColor', 'g'); % Máximo
for i = 1:size(nullPoints, 1) % Marcar puntos nulos
plot3(nullPoints(i, 1), nullPoints(i, 2), 0, 'bo', 'MarkerSize', 6, 'MarkerFaceColor', 'b');
end
% Etiquetas del gráfico
title('Divergencia en coordenadas cilíndricas con puntos de interés');
xlabel('x');
ylabel('y');
zlabel('Divergencia');
legend('Divergencia', 'Mínimo', 'Máximo', 'Nulo');