Escolar Documentos
Profissional Documentos
Cultura Documentos
UBERLÂNDIA
2020
ii
Sumário
1. INTRODUÇÃO ......................................................................................... 1
2. DESENVOLVIMENTO ............................................................................. 1
4. REFERÊNCIAS ........................................................................................ 4
5. APÊNDICES............................................................................................. 5
1. INTRODUÇÃO
2. DESENVOLVIMENTO
𝑦𝑖 + 0 ⋅ 𝑦𝑖+1 = 0
∴ 𝐴11 = 1 𝐴12 = 0 𝐵1 = 0 (4)
3. RESULTADOS OBTIDOS
Figura 5: Comparação entre solução analítica e solução numérica com malha de 5 nós
4
Figura 6: Comparação entre solução analítica e solução numérica com malha de 50 nós
4. REFERÊNCIAS
5. APÊNDICES
%Rotina principal
A=matrixA(nx,dx);
B=vectorB(nx,dx,x);
yn=A\B; %Solução numérica (também pode ser escrito como inv(A)*B
y=sin(x'); %solução analítica
figure(1)
plot(x,y,'o-b',x,yn,'*-r')
xlabel('x','FontSize',12,'FontWeight','bold','Color','k')
ylabel('f(x)','FontSize',12,'FontWeight','bold','Color','k')
legend('Sol. analítica',['Sol. numérica nx =
',num2str(nx)],'Location','northeast')
title('Solução da equação diferencial y"-y=-2*sin(x)')
movegui(figure(1),'northwest');
toc
figure(2)
erro=abs(y-yn)./y*100;
plot(x,erro,'*-b')
xlabel('x','FontSize',12,'FontWeight','bold','Color','k')
ylabel('Erro relativo
[%]','FontSize',12,'FontWeight','bold','Color','k')
legend('Erro','Location','northeast')
title(['Erro relativo para ',num2str(nx),' nós'])
6
function A=matrixA(nx,dx)
%Método das diferenças finitas: Matriz A
A=sparse(zeros(nx,nx));
Ap=-2-dx^2;
Aw=1;
Ae=Aw;
for i=1:nx
if(i==1) %Célula da fronteira esquerda
A(i,i)=1;
A(i,i+1)=0;
elseif (i>1 && i<nx) %Célula comum (que não está na fronteira)
A(i,i)=Ap;
A(i,i-1)=Ae;
A(i,i+1)=Aw;
elseif (i==nx) %Célula da fronteira direita
A(i,i)=Ap+1;
A(i,i-1)=2*Aw;
end
end
function B=vectorB(nx,dx,x)
%Método das diferenças finitas: Vetor B
B=zeros(nx,1);
Bp=-2*dx^2;
for i=1:nx
if(i==1) %Célula da fronteira esquerda
B(i,1)=0;
elseif (i>1 && i<nx) %Célula comum (que não está na fronteira)
B(i,1)=Bp*sin(x(i));
elseif (i==nx) %Célula da fronteira direita
B(i,1)=Bp*sin(x(i))+2*dx;
end
end