Você está na página 1de 38

Aplicacionais para Ciências e

Engenharia

Aula 11

TP11 Aplicacionais para Ciências e Engenharia 1


Sumário

• Diferenciação
• Integração

TP11 Aplicacionais para Ciências e Engenharia 2


Diferenciação

TP11 Aplicacionais para Ciências e Engenharia 3


Introdução
– A derivada de uma função representa o declive dessa função
em cada ponto
– A diferenciação numérica é muito sensível a alterações, ainda
que pequenas, nos valores da função
– A diferenciação numérica deve ser evitada, sempre que
possível
– No caso de dados obtidos de forma experimental a
diferenciação deve ser feita do seguinte modo:
• realizar um ajuste dos dados por um polinómio, usando o método dos
mínimos quadrados, e …
• diferenciar o polinómio resultante

TP11 Aplicacionais para Ciências e Engenharia 4


Definição
– A derivada de uma função é definida como a taxa de
variação da variável dependente y em relação a x
– A derivada num ponto é a inclinação da reta tangente
à função nesse ponto.

– As questões que se colocam no cálculo da derivada


por métodos numéricos estão associadas aos erros de
arredondamento e ao método usado

TP11 Aplicacionais para Ciências e Engenharia 5


Erros de arredondamento
Exemplo: Calcular a derivada de f(x)=x2 para x=1 com
f’(x)=2x e f’(1)=2 f=@(x) x.^2;
d1=forward_deriv(f,1,1e-5)
d1 =
function 2.0000 % correto
dfdx=forward_deriv(f,x,h)
d2=forward_deriv(f,1,1e-11)
% Retorna a derivada da função
d2 =
f na posição x
% f é o handle para a função
2.0000 % correto
% h é o intervalo d3=forward_deriv(f,1,1e-12)
dfdx = (f(x+h) - f(x))/h; d3 =
end 2.0002 !!!
d4=forward_deriv(f,1,1e-15)
d4 =
2.2204 !!!!!!
Convém ter sempre presente:
Existem limites na precisão do cálculo numérico. No Matlab, usando o formato double,
os erros começam a aparecer cerca 4 décadas acima do valor do eps (2.2204e-16)
TP11 Aplicacionais para Ciências e Engenharia 6
Outros problemas…
Exemplo: Para a função f(x)=ax2+b
– A aproximação da derivada é dada por:

– A derivada 2ax vem afetada de um erro ah que pode


ser significativo para valores de x pequenos

Nota: Com este método de cálculo da derivada existe um valor


ideal de h onde os erros de arredondamento e de algoritmo são
pequenos e aproximadamente os mesmos

TP11 Aplicacionais para Ciências e Engenharia 7


Método das diferenças centradas
– O método anterior calcula uma aproximação da
derivada usando diferenças “para a frente” (no ponto
x+h)
– E se calcularmos a derivada fazendo a média das
diferenças “para a frente” e “para trás”?

TP11 Aplicacionais para Ciências e Engenharia 8


Método das diferenças centradas
• Voltemos ao exemplo a função f(x)=ax2+b
– A aproximação da derivada é dada por:

• O erro de algoritmo é, neste caso, zero!


• Obtém-se uma estimativa da derivada muito melhor pelo
mesmo “custo” computacional
Nota: Em ambos os casos ignoram-se os erros devido aos termos não considerados da
expansão de f(x+h) em série de Taylor. No primeiro caso, em f’’(x) é proporcional a h.
Neste caso em f’’’(x), é proporcional a h2 (muito inferior!)
TP11 Aplicacionais para Ciências e Engenharia 9
Cálculo de derivadas no Matlab
• No Matlab existem várias funções que permitem
o cálculo de derivadas:
– polyder (para polinómios)
– diff
– diff (Utilização de cálculo simbólico)

Vamos ver alguns exemplos…

TP11 Aplicacionais para Ciências e Engenharia 10


A função polyder
• Se tivermos um conjunto de pontos experimentais que não se
encontram sobre uma linha contínua e, se mesmo assim,
pretendermos ter a noção da sua variação devemos previamente
fazer uma aproximação polinomial aos dados
Ajuste da curva - p(x)
10

p=polyfit(x,y,3) 6

4
p = 2

16.0758 -33.9245 29.3246 0


0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
-0.6104 x
Derivada de p(x)
30

25
pd=polyder(p) 20

pd = 15

48.2273 -67.8490 29.3246 10

5
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
x
Nota: Este assunto já foi tratado na TP5
TP11 Aplicacionais para Ciências e Engenharia 11
A função diff
– A função diff() calcula a derivada :
• Calculando as diferenças entre os valores do vetor x ( e as
diferenças ( entre os correspondentes valores do vetor y
• Este método é conhecido pelo método das diferenças finitas,
geralmente usado para dados experimentais e simuladores de
sistemas
– Como a função diff calcula a diferença entre os elementos de
um vetor, o vetor de saída possui um elemento a menos que o
vetor de entrada
• No caso das diferenças serem “para a frente” (avançada) o
último valor de x (y) não tem o correspondente valor de Δx (Δ y)
• No caso das diferenças serem “para trás” (atrasada) o primeiro
valor de x (y) não tem o correspondente valor de Δx (Δ y)

TP11 Aplicacionais para Ciências e Engenharia 12


Cálculo da derivada usando
a função diff
• Se os dados utilizados forem “precisos”, a utilização
da função diff pode conduzir a resultados
aceitáveis, pelo menos em termos de visualização
x=linspace(0,2*pi);
y=sin(x);
dy=diff(y)/(x(2)-x(1));
xd=x(2:end); % diferenças
para trás (atrasadas)
plot(x,y,xd,dy),grid
xlabel('x')
ylabel('sin(x) e cos(x)')
% Erro máximo:
disp(max(abs(cos(xd)-dy)))
0.0317
Nota: Não é preciso usar o diff(x) – o intervalo é constante
TP11 Aplicacionais para Ciências e Engenharia 13
Cálculo da derivada usando
a função diff
• Podemos também utilizar o método das diferenças
centradas ao exemplo anterior
– Neste caso, as derivadas do primeiro e último ponto do
intervalo não possuem uma aproximação

% Alterações relativamente à versão anterior


dy=(y(3:end)-y(1:end-2))/(x(3)-x(1));
xd=x(2:end-1); % diferenças centradas
disp(max(abs(cos(xd)-dy)))
6.7086e-04
% O valor do erro é 47x inferior

TP11 Aplicacionais para Ciências e Engenharia 14


Derivação com Δxi variável
• Vejamos o que acontece à derivada de sin(x) quando as
amostras em x apresentam uma incerteza (variação aleatória)
– Na recolha de dados experimentais em intervalos de tempo fixos
denomina-se jitter
– O intervalo entre 2 pontos de x varia entre 0.02 e 0.06
x1=0:0.04:2*pi; % intervalo de 0.04
x=x1+0.02*(rand(1,length(x1))-0.5); % intervalo de 0.02
a 0.06
plot(x1,x-x1,'r',x1,x-x1,'.k')
xlim([0 max(x1)])
grid on
legend('Variação aleatória da
posição xi')

TP11 Aplicacionais para Ciências e Engenharia 15


Derivação com Δxi variável
• Aproximação da derivada de sin(x)
– diferenças atrasadas
y=sin(x);
plot(x,y,'k')
xlim([0 max(x1)])
title('Aproximação da derivada
de sin(x) (diferenças
atrasadas)')
dy=diff(y)./diff(x);
xd=x(2:end);
plot(xd,dy,'r')
legend('sin(x)','Derivada de
sin(x)')
plot(xd,cos(xd)-dy,'r')
title('Erro=cos(x)-derivada de
sin(x)')

TP11 Aplicacionais para Ciências e Engenharia 16


Derivação com Δxi variável
• Aproximação da derivada de sin(x)
– diferenças centradas
subplot(2,1,2)
y=sin(x);
plot(x,y,'k')
title('Aproximação da derivada de
sin(x) (diferenças centradas)')
dy=(y(3:end)-y(1:end-
2))./(x(3:end)-x(1:end-2));
xd=x(2:end-1);
plot(xd,dy,'r')
legend('sin(x)','Derivada de
sin(x)')
subplot(2,1,2)
plot(xd+0.06,cos(xd)-dy,'r')
title('Erro=cos(x)-derivada de
sin(x)')
TP11 Aplicacionais para Ciências e Engenharia 17
Derivadas usando cálculo simbólico

• O cálculo de derivadas também pode ser feito de


forma simbólica usando a função diff
syms x
f=sin(x^2)
df=diff(f)
10
fplot(f) sin(x 2)
8 diff(sin(x 2)
hold on
6
fplot(df) 4
legend('sin(x^2)',... 2
'diff(sin(x^2)','Location','Best') 0

-2
f = -4
sin(x^2) -6

-8
df = -10
2*x*cos(x^2) -5 0 5

TP11 Aplicacionais para Ciências e Engenharia 18


Derivadas parciais usando cálculo
simbólico
• Diferenciação relativamente a uma variável
syms x t
diff(sin(x*t^2)) % Se não for especificada uma
diff(sin(x*t^2),x) variável o Matlab usa, por
defeito, a variável obtida por:
ans =
t^2*cos(t^2*x) symvar(sin(x*t^2),1)

ans = ans =
t^2*cos(t^2*x) x

diff(sin(x*t^2),t) % Para ver todas


symvar(sin(x*t^2))
ans =
2*t*x*cos(t^2*x) ans =
[t, x]

TP11 Aplicacionais para Ciências e Engenharia 19


Derivadas de ordem superior usando
cálculo simbólico
• Derivadas de ordem superior
– Por exemplo para calcular pontos de inflexão de uma
função
syms t
d1=diff(t^3,1) syms x y
d21=diff(t^3,2) diff(x*cos(x*y),y,2)
%ou diff(diff(x*cos(x*y),y),y)
d22=diff(diff(t^3,1))
d3=diff(t^3,3)
d1 =
ans =
3*t^2

d21 = -x^3*cos(x*y)
6*t
d22 = ans =
6*t
-x^3*cos(x*y)
d3 =
6

TP11 Aplicacionais para Ciências e Engenharia 20


Integração

TP11 Aplicacionais para Ciências e Engenharia 21


Introdução
• O cálculo de integrais é muito usado nas mais
diversas áreas da ciência
– O cálculo analítico exige muita prática (a primitiva da função,
se existir, pode ser muito complicada de calcular)
– Nem todos os integrais têm solução analítica
Exemplo: A função de erro de Gauss definida como:

não pode ser calculada usando apenas funções elementares,


embora a sua integração definida possa ser calculada

• A utilização de métodos numéricos facilita o processo

TP11 Aplicacionais para Ciências e Engenharia 22


Integral simples
• O integral definido é representado por:

que corresponde à área abaixo da função


f(x) entre os pontos a e b, com:
com x(1)=a e x(n)=b

valor de f(x), geralmente no início do intervalo

TP11 Aplicacionais para Ciências e Engenharia 23


Integração numérica
• A integração numérica resulta da aplicação de
métodos numéricos nas fases seguintes:
– Decomposição do intervalo de integração em sub-intervalos
muito pequenos
– Integração (cálculo da área) aproximada em cada sub-
intervalo
– Soma de todos os resultados obtidos.
• Métodos mais comuns:
– Método dos retângulo;
– Método dos trapézios;
– Método de Simpson (conhecido por regra de Simpson)
TP11 Aplicacionais para Ciências e Engenharia 24
Método dos retângulos

Ver diferença para


o método seguinte

f(i) com valor


constante no intervalo

Convergência lenta + Erro de aproximação da curva


TP11 Aplicacionais para Ciências e Engenharia 25
Método dos retângulos

Cálculo de (o valor exato é 1)


f = @(x) 4*x^3; function integral=int_m1(f,a,b,N)
for N=[10 100 1000 10000] x=linspace(a,b,N);
int_m1(f,0,1,N) s=0;
end for xi=x(1:end-1) % exclui x(end)=b
s = s + f(xi);
end
ans = % cálculo do integral
0.790123456790123 integral = s*(b-a)/(N-1);
ans =
0.979900010203040 % forma vetorizada
ans = a=0;b=1;N=100;
0.997999000001002 x=linspace(0,1,N);
x(end)=[];
ans =
int=sum(4*x.^3)*(b-a)/(N-1)
0.999799990000001 int =
0.979900010203040

São necessários mais de 100 pontos para obter um erro inferior a 2%


TP11 Aplicacionais para Ciências e Engenharia 26
Método dos trapézios

Ver diferença para


o método anterior

Área de um trapézio

f(i) com valor médio no


intervalo h

Este método é melhor do que o anterior…


TP11 Aplicacionais para Ciências e Engenharia 27
Método dos trapézios
Cálculo de (o valor exato é 1)
function integral=int_m2(f,a,b,N)
f = @(x) 4*x^3; x=linspace(a,b,N);
for N=[10 100 1000 10000] s=(f(x(1))+f(x(N)))/2;
int_m2(f,0,1,N) for xi=x(2:end-1)
end s = s + f(xi);
end
ans = % cálculo do integral
0.911111111111111 integral = s*(b-a)/N;
ans = % forma vetorizada
0.990101010101010 a=0;b=1;N=100;
ans = x=linspace(0,1,N);
0.999001001001001 s1=(4*x(1)^3+4*x(end)^3)/2;
ans = s2=sum(4*(x(2:end-1).^3));
0.999900010001001 int=(s1+s2)*(b-a)/N
int =
…converge mais rápido 0.990101010101010
Erro inferior a 1% com apenas 100 pontos
TP11 Aplicacionais para Ciências e Engenharia 28
Método de Simpson
Neste método são usados conjuntos de 3 pontos (xi-1 , fi-1),
( , fi) e (xi+1 , fi+1). A área sob a parábola que passa por
estes 3 pontos é dada por h/3*(fi-1 + 4fi + fi+1), logo

com N ímpar Comparando este método com os


métodos do retângulo e do trapézio
verifica-se que:
• A carga de cálculo é a mesma
• O erro de cálculo do método de
Simpson cai drasticamente à
medida que o número de pontos
aumenta

Nota: Resultados exatos para integrandos que sejam polinómios até ordem 2
TP11 Aplicacionais para Ciências e Engenharia 29
Integrais simples/duplos
• Podemos calcular integrais simples e múltiplos.
– O integral duplo é calculado através de dois integrais
simples

TP11 Aplicacionais para Ciências e Engenharia 30


Cálculo de integrais no Matlab
• No Matlab existem várias funções que permitem
o cálculo de integrais:
– integral, integral2
– quad, quadl (Matlab recomenda integral)
– dblquad (Matlab recomenda integral2)
– trapz
– int (Utilização de cálculo simbólico)

Vamos ver alguns exemplos…

TP11 Aplicacionais para Ciências e Engenharia 31


Integração numérica geral
• Para calcularmos uma aproximação numérica de
, usamos a função integral
q=integral(fun,xmin,xmax)
Nota: usa quadratura adaptativa e tolerância de erro fixa
0.4
y=x*exp(-x)

Exemplo: 0.35

0.3

fun=@(x) x.*exp(-x); 0.25

q=integral(fun,0,Inf) 0.2

0.15

q = 0.1

0.05

0
1.000000000000000 0 2 4 6 8 10

TP11 Aplicacionais para Ciências e Engenharia 32


Integração numérica geral
• Para calcular uma aproximação numérica de
, usamos a função
integral2
q=integral2(fun,xmin,xmax,ymin,ymax)
Exemplo:
fun=@(x,y) 3*x.^2 + 5*y.^2;
q=integral2(fun,0,5,-5,0)

q =
1.6667e+03
O valor q é o volume debaixo da aba da
superfície representada na figura
TP11 Aplicacionais para Ciências e Engenharia 33
Integração numérica finita
• Para calcularmos uma aproximação numérica de
integrais simples e duplos pelo método de
Simpson, usamos a função quad ou dblquad

f=@(x) 1./(x.^3-2*x-5); f=@(x,y) y*sin(x)+x*cos(y);


q=quad(f,0,2) q=dblquad(f,pi,2*pi,0,pi)

q = q =

-0.4605 -9.8696

O Matlab recomenda a utilização das funções integral e integral2

TP11 Aplicacionais para Ciências e Engenharia 34


Integração numérica discreta
• Se tudo o que conhecemos de uma função são os
seus valores num conjunto discreto de abscissas
podemos aproximar o valor de usando
a função trapz (método dos trapézios)
x=[1 2 3 4 5]; fun=@(x) x.^2;
y=[1 4 9 16 25]; % y=x^2 q=integral(fun,1,5)
q=trapz(x,y)
q =
q =
41.3333
42 % valor correto de
f(x)=x^2 em [1 5]

TP11 Aplicacionais para Ciências e Engenharia 35


Integrais indefinidos/definidos usando
cálculo simbólico
• O cálculo de integrais indefinidos (e definidos)
pode também ser feito usando cálculo simbólico
syms x syms x
expr=-2*x/(1+x^2)^2; expr=-2*x/(1+x^2)^2;
f=int(expr) f=int(expr,x,[0 2])
% ou % ou
f=int(expr,x) f=int(expr,0,2)

f = f =
1/(x^2 + 1) -4/5

f = f =
1/(x^2 + 1) -4/5
Nota: Podemos usar ou não a variável simbólica x no argumento. Na sua
ausência o Matlab usa a função symvar para as obter na expressão simbólica
TP11 Aplicacionais para Ciências e Engenharia 36
Integrais duplos indefinidos
• O cálculo simbólico também pode ser usado no
caso de integrais duplos indefinidos, relativamente
a cada uma das variáveis

syms x y syms x y
f(x,y)=x/(1+y^2); f(x,y)=x/(1+y^2);
fx=int(f,x) fy=int(f,y)

fx(x, y) = fy(x, y) =

x^2/(2*(y^2 + 1)) x*atan(y)

TP11 Aplicacionais para Ciências e Engenharia 37


Integrais duplos definidos
• Voltemos ao exemplo do diapositivo 33
dy
syms x y ,
fun=@(x,y) 3*x^2+5*y^2; qy=int(qxdef,y)
qx=int(fun,x) qydef=int(qxdef,-5,0)
qxdef=int(fun,x,0,5)
% integral indefinido em y
% integral indefinido em x qy =
qx = (25*y*(y^2 + 15))/3
x^3 + 5*x*y^2
% valor para os limites de y
% valor para os limites de x qydef =
qxdef =
25*y^2 + 125 5000/3 % =1.6667e+03
Integração de f(x,y) em ordem a x qx e Integração de qxdef em ordem a y e
respetiva integração definida em x qxdef respetiva integração definida qydef (escalar)
TP11 Aplicacionais para Ciências e Engenharia 38

Você também pode gostar