Escolar Documentos
Profissional Documentos
Cultura Documentos
CAMPINAS
2023
SUMÁRIO
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 DESENVOLVIMENTO . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1 Solução analítica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Solução numérica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Analise de erro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3 ANÁLISES E CONCLUSÕES . . . . . . . . . . . . . . . . . . . . . . . 15
4 ANEXOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.1 Anexo A - Código em MATLAB com a calculo da solução de Regime . . 16
4.2 Anexo B - Código em MATLAB com implementação do Solver ’pdepe’ . 17
4.3 Anexo C - Código em MATLAB com solução utilizando o método de
Euler Regressivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.4 Anexo D - Código em MATLAB com a anália de erro . . . . . . . . . . . 22
5 REFERENCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3
1 INTRODUÇÃO
2 DESENVOLVIMENTO
d 2 u(x)
α + sen(x) = 0 (2.1)
dx2
A EDO acima pode ser facilmente resolvida com o pacote simbólico do MATLAB e
obter o seguinte perfil:
assim obtemos que a solução de regime permenete é:
sin(30◦ ) 2
u(x) = 10 sin(x) − x − + 20 (2.2)
3 3
NOTA: o código utilizado para a obtenção da equação 2.2 e da figura 2 está anexado ao
relatório como Anexo A.
Capítulo 2. Desenvolvimento 6
Partindo para a resolução utilizando o pacote pdepe, ao analisarmos 5000 segundos com
um intervalo de 100 segundos entre cada solução, e com uma discretização espacial de 500
pontos (o domínio do problema foi dividido em 500 intervalos), obtemos a seguinte superfície:
∂u 2
2∂ u
=α + sin(x) (2.3)
∂t ∂ x2
Discretiza-se o tempo (t) em incrementos ∆t e o espaço (x) em incrementos ∆x. Utiliza-se
j
a notação ui para representar o valor de u no ponto xi e no tempo t j .
Primeiro, discretizamos a derivada em relação ao tempo usando diferenças finitas regres-
sivas:
j+1 j
∂ u ui − ui
≈ (2.4)
∂t ∆t
Capítulo 2. Desenvolvimento 8
α 2 ∆t
É possível montar o conjunto de n − 1 equações na seguinte forma, onde r = (∆x)2
.
j+1 j
1 + 2r −r 0 0 ··· 0 u1 u1 + ∆t sin(x1 ) + ru0
j+1 j
−r 1 + 2r −r 0 ··· 0 u2 + ∆t sin(x2 )
u2
j+1 j
0
−r 1 + 2r −r · · · 0 u3 =
u3 + ∆t sin(x3 )
(2.8)
. . . . . . . .
.. .. .. .. .. .. .. ..
j+1 j
0 0 0 0 −r 1 + 2r un−1 un−2 + ∆t sin(xn−1 ) + run
j+1 j+1
Nesse sistema de equações, u1 até un−1 representam os valores de u nos pontos internos
j+1 j+1
no espaço no tempo t j+1 , enquanto u0 e un são as condições de contorno conhecidas nos
pontos x0 e xn para qualquer tempo.
A solução desse sistema é encontrada iterativamente para calcular os valores de u em
todos os pontos internos no espaço no próximo passo de tempo t j+1 . Esse método é chamado
de método implícito no espaço devido à dependência do ponto espacia atual do ponto futuro no
espaço.
Ao iniciar a implementação em MATLAB, foi definido os valores numéricos relevantes,
temperatura no contorno e de condição inicial, comprimento da barra, difusividade térmica e os
passos temporais e espaciais necessários para o problema.
Em seguida, foi inicializado os vetores de solução do problema e implementado o
método iterativo, criando um loop de iterações no tempo com o comando "for". Dentro desse
loop, definimos uma matriz "A"tridiagonal para os coeficientes usando o comando "tridiag"e
uma matriz "B"para os termos independentes, que são atualizados a cada iteração do loop. A
matriz "u", representando a solução, foi ajustada de acordo com as condições de contorno.
Capítulo 2. Desenvolvimento 9
NOTA: o código script para a obtenção das figuras 2.2 e da figura 2 está anexado ao
relatório como Anexo C.
Em uma breve análise qualitativa, é notável que ambas as curvas estão condizentes com
a curva de referência calculada pelos métodos analíticos e pelo solver "pdepe". É possível notar
que, para o tempo zero, observa-se descontinuidades em ambas as extremidades e a progressiva
inclinação do perfil senoidal em direção à reta que "cruza"as duas condições de contorno. Isso é
um forte indicativo de que a solução foi implementada corretamente.
Tendo implementado corretamente, é possível analisar a estabilidade do método. Para
isso, basta variar o parâmetro r e observar o resultado, pois esse parâmetro, no método de Euler
Progressivo, é o que garante a estabilidade. O método é considerado estável quando r ≤ 0, 5.
É notável que, para os resultados calculados anteriormente, r = 1.3889e + 03, e o método se
mostrou muito estável. Isso significa que, mesmo com passos temporais elevados, o método
permaneceu estável com uma malha espacial não muito refinada.
Caso diminuíssemos ainda mais o refinamento da malha espacial de 500 (como calculado
anteriormente) para 50, obteríamos um valor de r = 13.8889. Observa-se:
Capítulo 2. Desenvolvimento 11
É notável que, para o novo resultado, há uma diminuição na resolução dos resultados, mas
ainda assim, os resultados capturam bem o perfil esperado, sem nenhuma degradação absurda
dos resultados em nenhum ponto.
Capítulo 2. Desenvolvimento 12
Novamente, o único efeito observado foi uma resolução mais pobre dos resultados, mas
sem nenhuma degeneração devido a acúmulos exponenciais de erro ("explosão"da solução) em
nenhum ponto. Portanto, como esperado, é possível observar que o método é incondicionalmente
estável, o que se deve ao fato de ser um método implícito.
Nos dois gráficos que comparam as soluções numéricas, observa-se uma grande diferença
nos resultados na primeira iteração. Isso pode ser atribuído à maior precisão do solver do
Capítulo 2. Desenvolvimento 14
MATLAB, que consegue suavizar a solução de forma mais eficaz nos primeiros momentos,
especialmente devido às abruptas descontinuidades presentes nas condições de contorno e iniciais
do problema. O método de Euler Regressivo, por ser uma implementação menos sofisticada,
encontra dificuldades em suavizar essas descontinuidades abruptas, o que afeta de forma mais
significativa o início da solução.
Nos passos de tempo subsequentes, observamos que a diferença entre os dois métodos
tende a diminuir. Isso ocorre porque a solução se aproxima do regime permanente, apresentando
pouca variação ao longo de grandes intervalos de tempo. Além disso, no âmbito espacial, as
soluções mostram uma menor divergência conforme se aproximam das extremidades, devido às
condições de contorno conhecidas e inequívocas em ambas as extremidades.
Ao comparar a solução analítica de regime com ambos os métodos numéricos, podemos
observar novamente que a solução é mais precisa próximo às extremidades à medida que nos
aproximamos das condições de contorno. Além disso, a precisão de ambos os métodos é muito
semelhante para tempos muito longos, como no caso da imagem acima, com 5000 segundos,
embora o solver do MATLAB tenha demonstrado ser ligeiramente mais preciso.
NOTA: o código para a obtenção das figuras 12, 13 e 14 está anexado ao relatório como
Anexo D.
15
3 ANÁLISES E CONCLUSÕES
Em conclusão, é notável que o método de Euler regressivo se destaca por sua incondicio-
nal estabilidade, o que significa que não importa o tamanho dos passos no tempo ou no espaço, a
solução não apresentará oscilações indesejadas ou divergências. Essa característica é de extrema
importância ao lidar com problemas complexos que demandam uma ampla gama de resoluções
temporais e espaciais. A estabilidade incondicional oferece uma grande flexibilidade na escolha
dos parâmetros de discretização, tornando o método uma escolha sólida em diversas aplicações.
Além disso, é essencial ressaltar que o método de Euler regressivo oferece uma precisão
aceitável, com erros de ordem O(∆x2 ) no espaço e O(∆t) no tempo. Isso significa que, embora
possa haver alguma perda de resolução ao usar discretizações mais grosseiras, os resultados
ainda são confiáveis e aproximam-se bem da solução exata. Essa capacidade de manter um
nível aceitável de precisão, mesmo com discretizações menos refinadas, faz com que o método
seja uma ferramenta valiosa, especialmente em cenários onde a eficiência computacional é uma
consideração importante. Portanto, o método de Euler regressivo se destaca não apenas por sua
estabilidade incondicional, mas também pela sua capacidade de fornecer resultados confiáveis
com eficiência computacional, tornando-o uma escolha sólida para uma variedade de problemas
de análise numérica.
16
4 ANEXOS
clc;
clear all;
close all;
T1 = 20;
T2 = 40;
L = 30;
alpha = 0.1;
% Definindo variáveis simbólicas
syms u(x)
Du = diff(u);
% Definindo a equação diferencial
ode = diff(u,x,2) == -sin(x)/alpha;
% Condições de contorno
cond1 = u(0) == T1;
cond2 = u(L) == T2;
conds = [cond1 cond2];
% Plotando a solução
Capítulo 4. Anexos 17
figure;
plot(x_values, u_values, ’b’, ’LineWidth’, 2);
title(’Solução da Equação Diferencial’);
xlabel(’x’);
ylabel(’Temperatura(x)’);
grid on;
% Parâmetros
global T0 T1 T2 k; % Declare as variáveis como globais
k = 0.1; % Coeficiente de difusão (alpha^2)
L = 30; % Comprimento do domínio
T0 = 10; % Condição inicial
T1 = 20; % Condição de contorno em x = 0
T2 = 40; % Condição de contorno em x = l
num_points_x = 500; % Número de pontos no espaço
num_points_t = 100; % Número de pontos no tempo
total_time = 5000; % Tempo total
num_curves = 20; % Número de curvas desejadas no gráfico 2D
% Plote a solução 3D
Capítulo 4. Anexos 18
figure;
mesh(x, tspan, sol(:,:,1));
xlabel(’Posição (x)’);
ylabel(’Tempo (t)’);
zlabel(’Temperatura (u)’);
title(’Solução da Equação de Calor 1D (3D)’);
view(45, 45);
for i = 1:curve_step:num_points_t
u = sol(i,:,1);
color_index = max(1, round(i/curve_step)); % Garante que o índice de cores sej
plot(x, u, ’Color’, colors(color_index,:)); % Use cores diferentes
hold on;
end
xlabel(’Posição (x)’);
ylabel(’Temperatura (u)’);
title(’Progressão Temporal da Temperatura no Domínio (2D)’);
legend(arrayfun(@(t) sprintf(’t = %.2f’, t), tspan(1:curve_step:num_points_t), ’Uni
hold off;
function u0 = heat_ic(x)
global T0;
u0 = T0;
end
% Discretização
dx = L / num_points_x; % Passo de espaço
dt = total_time / num_points_t; % Passo de tempo
x = linspace(0, L, num_points_x+1)’; % Vetor de posição
tspan = linspace(0, total_time, num_points_t+1); % Vetor de tempo
alpha = k * dt/(dx^2);
for n = 1:curve_step:num_points_t+1
plot(x, u(:,n), ’DisplayName’, [’Tempo t = ’, num2str(tspan(n))]);
end
xlabel(’Posição (x)’);
ylabel(’Temperatura (T)’);
Capítulo 4. Anexos 22
hold off;
% Parâmetros
global T0 T1 T2 k; % Declare as variáveis como globais
k = 0.1; % Coeficiente de difusão (alpha^2)
L = 30; % Comprimento do domínio
T0 = 10; % Condição inicial
Capítulo 4. Anexos 23
u2(2:end-1,n+1) = A \ B;
for i = 1:num_points_t
for j = 1:num_points_x+1
diff = sol1(i,j,1) - u2(j,i+1);
norm_diff(i,j) = sqrt(diff^2);
end
end
figure;
mesh(X, T, norm_diff);
xlabel(’Posição (x)’);
ylabel(’Tempo (t)’);
zlabel(’Norma L2 da Diferença’);
title(’Norma L2 da Diferença entre as Soluções’);
view(45, 45);
for n = 1:num_points_t
for j = 1:num_points_x+1
error(j, n) = abs(sol1(n, j, 1) - u2(j, n+1));
end
end
Capítulo 4. Anexos 25
for i = 1:curve_step:num_points_t
plot(x, error(:,i), ’DisplayName’, [’Tempo t = ’, num2str(tspan(i))]);
end
xlabel(’Posição (x)’);
ylabel(’Erro’);
title(’Evolução do Erro entre as Soluções em Função do Espaço’);
legend(’show’);
hold off;
grid on;
function u0 = heat_ic(x)
global T0;
u0 = T0;
end
5 REFERENCIAS