0% acharam este documento útil (0 voto)
3 visualizações4 páginas

Solução da Equação do Calor em MATLAB

O documento apresenta uma simulação da equação do calor utilizando métodos explícito e implícito. São definidos parâmetros como passo espacial, coeficiente de difusão e condições de contorno, além de calcular o passo de tempo máximo para estabilidade. Os resultados são exibidos para diferentes tempos e representados graficamente em 3D.

Enviado por

Hellen Santana
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
3 visualizações4 páginas

Solução da Equação do Calor em MATLAB

O documento apresenta uma simulação da equação do calor utilizando métodos explícito e implícito. São definidos parâmetros como passo espacial, coeficiente de difusão e condições de contorno, além de calcular o passo de tempo máximo para estabilidade. Os resultados são exibidos para diferentes tempos e representados graficamente em 3D.

Enviado por

Hellen Santana
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

clc; clear; close all;

% Parâmetros do problema
dx = 0.2; % Passo espacial
a = 0.5; % Coeficiente de difusão
L = 1; % Comprimento da barra

% Passo de tempo máximo para estabilidade (CFL: r = alpha*dt/dx^2 <= 0.5)


dr = 0.5; % Critério de estabilidade para o método explícito
dt = dr * dx^2 / a;

% Exibir resultado do item (a)


fprintf('Passo de tempo máximo para estabilidade: dt = %.4f s\n', dt);

% Discretização espacial e temporal


x = 0:dx:L;
nx = length(x); % Número de pontos no espaço
tmax = 3 * dt; % Tempo máximo a ser calculado
nt = round(tmax/dt); % Número de passos de tempo

% Condições iniciais e de contorno


u = ones(nx, 1); % Condição inicial u(x,0) = 1
u(1) = 0; % Condição de contorno u(0,t) = 0
u(end) = 0; % Condição de contorno u(1,t) = 0

% Matriz para armazenar os resultados ao longo do tempo


U = zeros(nx, nt+1);
U(:,1) = u;

% Iteração no tempo (método explícito)


for n = 1:nt
u_new = u;
for i = 2:nx-1
u_new(i) = u(i) + dr * (u(i+1) - 2*u(i) + u(i-1));
end
u = u_new;
U(:,n+1) = u;
end

% Exibir resultados do item (b) para x = 0.6 e x = 0.8 nos três primeiros
tempos
idx_06 = find(abs(x - 0.6) < 1e-6);
idx_08 = find(abs(x - 0.8) < 1e-6);

fprintf('\nValores de u(x,t) para os três primeiros passos de tempo (método


explícito):\n');
for n = 1:3
fprintf('t = %.4f s: u(0.6,t) = %.4f, u(0.8,t) = %.4f\n', n*dt, U(idx_06,
n+1), U(idx_08, n+1));
end

% Método implícito (Matriz Tridiagonal)


r = a * dt / dx^2;
main_diag = (1 + 2*r) * ones(nx-2,1);
off_diag = -r * ones(nx-3,1);
A = diag(main_diag) + diag(off_diag,1) + diag(off_diag,-1);
% Inicializando solução
temp = ones(nx-2,1); % Considerando os pontos internos
U_implicit = zeros(nx, nt+1);
U_implicit(:,1) = u;

for n = 1:nt
temp = A \ temp;
U_implicit(2:end-1, n+1) = temp;
end

% Exibir resultados do item (c) para x = 0.6 e x = 0.8 nos três primeiros
tempos
fprintf('\nValores de u(x,t) para os três primeiros passos de tempo (método
implícito):\n');
for n = 1:3
fprintf('t = %.4f s: u(0.6,t) = %.4f, u(0.8,t) = %.4f\n', n*dt,
U_implicit(idx_06, n+1), U_implicit(idx_08, n+1));
end

% Geração do gráfico 3D
[T, X] = meshgrid(0:dt:tmax, x);
figure;
surf(T, X, U);
xlabel('Tempo (s)'); ylabel('Posição x'); zlabel('Temperatura u(x,t)');
title('Solução da Equação do Calor (Método Explícito)');
colorbar; shading interp;

figure;
surf(T, X, U_implicit);
xlabel('Tempo (s)'); ylabel('Posição x'); zlabel('Temperatura u(x,t)');
title('Solução da Equação do Calor (Método Implícito)');
colorbar; shading interp;
clc; clear; close all;

% Parâmetros do problema
dx = 0.2; % Passo espacial
a = 0.5; % Coeficiente de difusão
L = 1; % Comprimento da barra

% Passo de tempo máximo para estabilidade (CFL: r = alpha*dt/dx^2 <= 0.5)


dr = 0.5; % Critério de estabilidade para o método explícito
dt = dr * dx^2 / a;

% Exibir resultado do item (a)


fprintf('Passo de tempo máximo para estabilidade: dt = %.4f s\n', dt);

% Discretização espacial e temporal


x = 0:dx:L;
nx = length(x); % Número de pontos no espaço
tmax = 3 * dt; % Tempo máximo a ser calculado
nt = round(tmax/dt); % Número de passos de tempo

% Condições iniciais e de contorno


u = ones(nx, 1); % Condição inicial u(x,0) = 1
u(1) = 0; % Condição de contorno u(0,t) = 0
u(end) = 0; % Condição de contorno u(1,t) = 0

% Matriz para armazenar os resultados ao longo do tempo


U = zeros(nx, nt+1);
U(:,1) = u;

% Iteração no tempo (método explícito)


for n = 1:nt
u_new = u;
for i = 2:nx-1
u_new(i) = u(i) + dr * (u(i+1) - 2*u(i) + u(i-1));
end
u = u_new;
U(:,n+1) = u;
end

% Exibir resultados do item (b) para x = 0.6 e x = 0.8 nos três primeiros
tempos
idx_06 = find(abs(x - 0.6) < 1e-6);
idx_08 = find(abs(x - 0.8) < 1e-6);

fprintf('\nValores de u(x,t) para os três primeiros passos de tempo


(método explícito):\n');
for n = 1:3
fprintf('t = %.4f s: u(0.6,t) = %.4f, u(0.8,t) = %.4f\n', n*dt, U(idx_06,
n+1), U(idx_08, n+1));
end

% Método implícito (Matriz Tridiagonal)


r = a * dt / dx^2;
main_diag = (1 + 2*r) * ones(nx-2,1);
off_diag = -r * ones(nx-3,1);
A = diag(main_diag) + diag(off_diag,1) + diag(off_diag,-1);
% Inicializando solução
temp = ones(nx-2,1); % Considerando os pontos internos
U_implicit = zeros(nx, nt+1);
U_implicit(:,1) = u;

for n = 1:nt
temp = A \ temp;
U_implicit(2:end-1, n+1) = temp;
end

% Exibir resultados do item (c) para x = 0.6 e x = 0.8 nos três primeiros
tempos
fprintf('\nValores de u(x,t) para os três primeiros passos de tempo
(método implícito):\n');
for n = 1:3
fprintf('t = %.4f s: u(0.6,t) = %.4f, u(0.8,t) = %.4f\n', n*dt,
U_implicit(idx_06, n+1), U_implicit(idx_08, n+1));
end

% Geração do gráfico 3D
[T, X] = meshgrid(0:dt:tmax, x);
figure;
surf(T, X, U);
xlabel('Tempo (s)'); ylabel('Posição x'); zlabel('Temperatura u(x,t)');
title('Solução da Equação do Calor (Método Explícito)');
colorbar; shading interp;

figure;
surf(T, X, U_implicit);
xlabel('Tempo (s)'); ylabel('Posição x'); zlabel('Temperatura u(x,t)');
title('Solução da Equação do Calor (Método Implícito)');
colorbar; shading interp;

Você também pode gostar