Escolar Documentos
Profissional Documentos
Cultura Documentos
1. Desenvolva um programa (em Matlab) para determinar as seis primeiras raízes β𝑖 de 𝛽. 𝑡𝑎𝑛(𝛽)
= c para 𝑐 = 0, 1 e 10.
2. Usando o formalismo das funções de Bessel do próprio Matlab, desenvolva um programa (em
Matlab) para determinar as seis primeiras raízes β𝑖 de 𝐽𝑛(β) = 0 para 𝑛 = 1, 2, 3 e 4.
Situação de estudo
20
15
10
0
0.00 2.00 4.00 6.00 8.00 10.00 12.00 14.00 16.00
-5
-10
-15
-20
Vemos que a solução do problema radica em achar os valores nos que a função 𝛽𝑡𝑎𝑛(𝛽) iguala
os valores constantes 0, 1 e 10 respetivamente.
Para a solução desse problema, foi necessário criar as seguintes funções no Matlab, uma para
cada valor que vai ter c. Todas elas criadas procurando o uso da função fzero do Matlab.
Para c=0:
function y=ftan0(x)
y=x*tan(x);
end
Para c=1:
function y=ftan1(x)
y=x*tan(x)-1;
end
Para c=10:
function y=ftan10(x)
y=x*tan(x)-10;
end
O código final desenvolvido para esses cálculos segue embaixo:
clear
clc
%%
fprintf(' Função para c=0:\n');
fprintf('=> B*tan(B)\n\n');
%%
i=1;
n_raizes=6;
%%
fprintf('********************As 6 primeiras raizes vão ser**********************\n');
fprintf('* *\n');
while i<=n_raizes
P1=fzero(@ftan0,(i-1)*pi);
P2=fzero(@ftan1,(i-1)*pi+0.5);
P3=fzero(@ftan10,(i-1)*pi+1);
As faixas para o cálculo desses zeros, foram estabelecidas fazendo uso da Figura 1. Situação de
estudo, cortes da função 𝛽𝑡𝑎𝑛(𝛽) con os valores de c. como guia. Os valores de 0,5 e 1 somados
para as faixas das funções de c=1 e c=10, são estabelecidos procurando adiantar um poco a
faixa de análise por causa de valores errados calculados pela função fzero.
Os resultados encontrados são apresentados na seguinte figura (captura de tela do Command
Window do Matlab).
Vemos que para c=0, as raízes são as mesmas raízes da função 𝑡𝑎𝑛(𝛽), já para as outras duas
condições presenta-se um deslocamento a direita das raízes de 𝑡𝑎𝑛(𝛽), batendo desse jeito com o
observado na Figura 1.
2) Para solucionar esta questão, primeiro foi necessário desenvolver uma função chamada
raices, com o objetivo de encontrar aqueles pontos onde a função mudava de sinal e
posteriormente usasse a função de Matlab fzero para calcular as raízes nesse intervalo.
function r = raices(f, x)
y=f(x);
indices=find(y(1:end-1).*y(2:end)<0);
r=zeros(1,6);
for k=1:6
r(k)=fzero(f, [x(indices(k)), x(indices(k)+1)]);
end
end
Depois foi criado o código que com ajuda da função raízes, ia calcular esses valores para as
funções de Bessel da ordem pedida. O código desenvolvido foi escrito como se apresenta a
continuação.
clear
clc
hold on
fprintf('************************************************************\n');
for n=1:4
f=@(x) besselj(n,x);
fplot(f,[0,20], 'displayName',num2str(n));
x=linspace(0,40,40);
k=raices(f,x);
fprintf('* J_%1d(x): *\n',n);
fprintf('* Raiz 1:(%8.5f) Raiz 2:(%8.5f) Raiz 2:(%8.5f) * \n',k(1),k(2),k(3));
fprintf('* Raiz 4:(%8.5f) Raiz 5:(%8.5f) Raiz 6:(%8.5f) * \n',k(4),k(5),k(6));
fprintf('* *\n');
end
fprintf('************************************************************\n');
legend('-DynamicLegend','location','Best')
xlabel('x')
ylabel('J(x)')
title('Funciones J_n(x) de Bessel')
grid on
hold off
Alias de encontrar as raízes (6 primeiras raízes) o código plota as funções de Bessel da ordem
solicitada e são mostradas na figura que segue.
Figura 4. Captura de tela dos resultados das seis primeiras raízes das funções de Bessel solicitadas
Vemos como os resultados vão acordes com os cortes com o eixo x para cada uma das funções,
garantindo desse jeito a veracidade dos resultados calculados pelo código.
3)
d. O código desenvolvido para a plotagem das curvas deste apartado, é apresentado a
continuação.
clear
clc
hold on
grid on
%% Função Por ramos
x=0:0.01:1;
fx=0*(x>=0)+(x>1/2);
plot(x,fx,'b','LineWidth',2)
xlabel('x')
ylabel('f(x)')
%% Série de Fourier
SF=-0.5;
for n=1:100
Fou=-2*sin(n*pi/2)*cos(n*pi*x)/(n*pi);
SF=SF+Fou;
pause(0.25)
switch n
case 1
plot(x,SF)
case 2
plot(x,SF)
case 5
plot(x,SF)
case 100
plot(x,SF)
end
end
plot(x,SF)
legend('f(x)','n:1','n:2','n:5','n:100','location','south east')
Na seguinte figura mostram-se a função 𝑓(𝑥) original (na cor azul) e os resultados para a série de
Fourier para um termo, dois termos, 5 termos e 100 termos.
Vemos como primeira conclusão que as series para 1 e 2 são iguais (encontram-se superpostos),
comprovando que os termos para n par se tornam zero, seguidamente apreciamos que assim
que aumenta o numero de termos a série de Fourier tendo a descrever melhor a função 𝑓(𝑥).
Mesmo que descreve melhor a série com maior quantidade de termos, logo disso, ainda que
foram desenvolvidos todos os passos, a constante 𝐶0 tem o valor de (-1/2), gerando um desfaze
de quase uma unidade nos valores da função.
Si caso contrário, se o valor de 𝐶0 for 1/2, o resultado dessa aproximação por série de Fourier
seria o mostrado na seguinte figura.
Figura 6. Resultados da série de Fourier para 𝑓(𝑥), para 1, 2, 5 e 100 termos corrigindo 𝐶0 = 1⁄2.
Vemos que na mudança de -1/2 para ½ resolve o desfaze com o eixo Y, conseguindo uma muito
boa descrição da função.
O código desenvolvido para a plotagem da situação e descrito embaixo.
clear
clc
hold on
xlabel('x*')
ylabel('T')
legend('-DynamicLegend','location','Best')
lgd = legend;
lgd.Title.String = 't (s)';
ylim([0 1])
grid on
raizes=15;
L=0.020; %m
Bi=2;
t=[0.01,0.1,1]; %s
alfa=117.e-6; %1/°C
syms B
fun=B*tan(B)-Bi;
Matfun=matlabFunction(fun);
cont=1;
lambda=zeros(1,raizes);
for n=1:200
if cont>=raizes+1
break
end
lambda(cont)=fsolve(Matfun,n);
if cont==1
cont=cont+1;
elseif cont>=2 && abs(lambda(cont)-lambda(cont-1))>=1.e-3
cont=cont+1;
end
end
for m=1:3
Tao=alfa*t(m)/L^2;
TetaT0=0;
for i=1:raizes
x=linspace(0,1,50);
TetaT=4*sin(lambda(i))*exp(-
(lambda(i)^2)*Tao)*cos(lambda(i)*x)/(2*lambda(i)+sin(2*lambda(i)));
TetaT0=TetaT0+TetaT;
end
pause(0.05)
plot(x,TetaT0,'displayName',num2str(t(m)))
end
Os resultados são mostrados graficamente na figura que segue e podemos apreciar que a maior
tempo o perfil de temperatura é mais suave, não tem uma mudança, muito agressiva como é o
caso de um tempo de 0,01 s, onde cai ao redor de um 10% no 10% final do comprimento da
placa.
É necessário aclarar que o resultado presentado encontra-se baseado numa série com as 15
primeiras raízes da equação transcendental 𝜆𝑛 𝑡𝑎𝑛𝜆𝑛 = 𝐵𝑖, valor determinado este, logo de fazer
a análise para 5, 10, 15, 20, 25 e superiores, notando que não tinha uma melhoria significativa
acima desse valor de 15 raízes.
Figura 7. Resultados da temperatura adimensional para o problema de estudo a diferentes tempos.