Você está na página 1de 11

MS211-Cálculo Numérico

Tutorial Sobre Comandos do MATLAB


Solução de Equações Diferenciais, Interpolação, Ajuste Polinomial e Integração
Thais Gama de Siqueira
19 de Maio de 2003

1 Solução de equações diferenciais

1.1 Solução numérica

As funções ode45, ode23, ode113, ode15s, ode23s, ode23t, ode23tb são usadas
na resolução numérica de equações diferenciais ordinárias com valores iniciais. As mais
usadas são ode45 e ode23. Consulte o help do MATLAB para conhecer as diferenças e
semelhanças entre as diversas funções.

1.1.1 Exemplo

Seja (1) a equação de 2a ordem a ser resolvida.

d2 y1 dy1
= −10 − 10 y1 (1)
dx2 dx
A equação (1) pode ser dividida no sistema de duas equações ordinárias de 1a ordem
(2).

dy1
= −10 y1 − y2
dx (2)
dy2
= 10 y1
dx
Código no MATLAB (dentro de um arquivo chamado diferenciais.m):

function diferenciais

intervalox = [0 2];

y0 = [4 -2];

[x,y]=ode23(@sistema,intervalox,y0);

1
figure

plot(x,y)

function dydx = sistema(x,y)

dydx = [ - 10 * y(1) - y(2)


10 * y(1) ];

Outra possibilidade é criar um arquivo chamado sistema.m com o seguinte conteúdo:

function dydx = sistema(x,y)

dydx = [ - 10 * y(1) - y(2)


10 * y(1) ];

Usando o arquivo sistema.m pode-se chamar a função ode23 diretamente da tela de


comando do MATLAB:

>> [x,y]=ode23(@sistema,[0 2],[4 -2]);

Depois se usa a função plot para exibir os resultados:

>> plot(x,y)

O resultado obtido com a função plot é mostrado na figura 1. Observe na figura as


condições iniciais impostas.
Como você faria para resolver equações de ordens superiores a 2?

1.2 Solução simbólica

Também é possı́vel obter a solução simbólica de equações diferenciais com a função


dsolve.

1.2.1 Exemplo 1

>> y = dsolve(’Dy=1+y^2’,’y(0)=1’)

2
4

−1

−2
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2

Figura 1: Resultado da resolução da equação diferencial com ode23.

Resultado:

y =
tan(t+1/4*pi)

1.2.2 Exemplo 2

>> x = dsolve(’(Dx)^2+x^2=1’,’x(0)=0’)

Resultado:

x =
[ -sin(t)] [ sin(t)]

1.2.3 Exemplo 3

>> y = dsolve(’D2y=cos(2*x)-y’,’y(0)=1’,’Dy(0)=0’, ’x’)


>> simplify(y)

Resultado:

y=(1/2*sin(x)+1/6*sin(3*x))*sin(x)+(1/6*cos(3*x)-1/2*cos(x))*cos(x)+
4/3*cos(x)

ans =
-2/3*cos(x)^2+4/3*cos(x)+1/3

3
2 Interpolação de dados

Uma das funções para interpolação de dados disponı́vel no MATLAB é interp1. Existe
também a função spline, que é a mais conhecida de todas. Entretanto, spline é uma
subfunção de interp1.
1
Exemplo de utilização (dentro de um arquivo .m):

%Interpolaçao de dados com a funçao "interp1"

x = 0:0.5:2*pi; %Pontos de amostragem de dados


y = sin(x).*sin(2*x); %Valor da funçao nos pontos amostrados
xi = 0:0.1:2*pi; %Pontos desejados para a interpolaçao

figure(1);
plot(x,y,’*’); %Plota a funçao nos pontos de amostragem
hold on
fplot(’sin(x).*sin(2*x)’,[0 2*pi]); %Plota a funçao original

%Metodos de interpolaçao
% ’nearest’ - nearest neighbor interpolation
% ’linear’ - linear interpolation
% ’spline’ - piecewise cubic spline interpolation (SPLINE)
% ’pchip’ - piecewise cubic Hermite interpolation (PCHIP)
% ’cubic’ - same as ’pchip’
% ’v5cubic’ - the cubic interpolation from MATLAB 5, which does not
% extrapolate and uses ’spline’ if X is not equally spaced.

%Uso da funçao "interp1" com diversos metodos de interpolaçao:


figure(2)

subplot(3,1,1); yi = interp1(x,y,xi,’nearest’);
plot(x,y,’o’,xi,yi)
1O exemplo é autoexplicativo.

4
0.8

0.6

0.4

0.2

−0.2

−0.4

−0.6

−0.8
0 1 2 3 4 5 6

Figura 2: Função original sen(x)sen(2x) e pontos amostrados.

subplot(3,1,2); yi = interp1(x,y,xi,’linear’); plot(x,y,’o’,xi,yi)

subplot(3,1,3); yi = interp1(x,y,xi,’spline’); plot(x,y,’o’,xi,yi)


figure(3)

subplot(3,1,1); yi = interp1(x,y,xi,’pchip’); plot(x,y,’o’,xi,yi)

subplot(3,1,2); yi = interp1(x,y,xi,’cubic’); plot(x,y,’o’,xi,yi)

subplot(3,1,3); yi = interp1(x,y,xi,’v5cubic’);
plot(x,y,’o’,xi,yi)

Os resultados obtidos estão nas figuras 2, 3 e 4.

3 Ajuste polinomial

A aproximação de uma função com um polinômio consiste no ajuste dos coeficientes da


função polinomial para minimizar o erro entre a função aproximada e a função polinomial
utilizada. O MATLAB faz isso com a função polyfit.

5
1

0.5

−0.5

−1
0 1 2 3 4 5 6 7

0.5

−0.5

−1
0 1 2 3 4 5 6 7

0.5

−0.5

−1
0 1 2 3 4 5 6 7

Figura 3: Resultados de interpolações com ’nearest’, ’linear’ e ’spline’.

0.5

−0.5

−1
0 1 2 3 4 5 6 7

0.5

−0.5

−1
0 1 2 3 4 5 6 7

0.5

−0.5

−1
0 1 2 3 4 5 6 7

Figura 4: Resultados de interpolações com ’pchip’, ’cubic’ e ’v5cubic’

6
A função polyfit efetua o ajuste dos coeficientes da um polinômio de qualquer grau.
A função polyfit recebe dois vetores de entrada (abscissas e ordenadas) e um número que
representa o grau do polinômio. A saı́da da função é um vetor com coeficientes.
Para verificar o resultado do ajuste usa-se a função polyval, que resolve o polinômio
em um ponto desejado ou em vários pontos desejados, caso a entrada de polyval seja
um vetor de pontos.
2
Exemplo de utilização (dentro de um arquivo .m):

% Ajuste de curvas polinomiais com a funçao "polyfit"

figure(1);

subplot(3,1,1);

fplot(’sin(x) + cos(2*x)’,[0 2*pi]); %Plota a funçao original


x = 0:0.5:2*pi; %Pontos de amostragem de dados
y = sin(x) + cos(2*x); %Valor da funçao nos pontos
%amostrados
hold on %Congela o grafico
plot(x,y,’*’); %Plota a funçao nos pontos
%amostrados

p = polyfit(x,y,2) %Encontra os coeficientes do polinomio de grau 2


x = 0:0.01:2*pi; %Define um novo vetor x (com discretizaçao muito
%pequena)
ya = polyval(p,x) %Resolve o polinomio nos pontos do novo vetor x
plot(x,ya,’red--’) %Plota o polinomio ajustado com linha tracejada

subplot(3,1,2);

2 Este exemplo também é autoexplicativo

7
fplot(’sin(x) + cos(2*x)’,[0 2*pi]); %Plota a funçao original
x = 0:0.5:2*pi; %Pontos de amostragem de dados
y = sin(x) + cos(2*x); %Valor da funçao nos pontos
%amostrados
hold on %Congela o grafico
plot(x,y,’*’); %Plota a funçao nos pontos
%amostrados

p = polyfit(x,y,4) %Encontra os coeficientes do polinomio de grau 4


x = 0:0.01:2*pi; %Define um novo vetor x (com discretizaçao muito
%pequena)
ya = polyval(p,x) %Resolve o polinomio nos pontos do novo vetor x
plot(x,ya,’red--’) %Plota o polinomio ajustado com linha tracejada

subplot(3,1,3);

fplot(’sin(x) + cos(2*x)’,[0 2*pi]); %Plota a funçao original


x = 0:0.5:2*pi; %Pontos de amostragem de dados
y = sin(x) + cos(2*x); %Valor da funçao nos pontos
%amostrados
hold on %Congela o grafico
plot(x,y,’*’); %Plota a funçao nos pontos
%amostrados

p = polyfit(x,y,8) %Encontra os coeficientes do polinomio de grau8


x = 0:0.01:2*pi; %Define um novo vetor x (com discretizaçao muito
%pequena)
ya = polyval(p,x) %Resolve o polinomio nos pontos do novo vetor x
plot(x,ya,’red--’) %Plota o polinomio ajustado com linha tracejada

8
2

−1

−2
0 1 2 3 4 5 6

−2
0 1 2 3 4 5 6

−2

−4
0 1 2 3 4 5 6

Figura 5: Aproximações da função sen(x) + cos(2x) com polinômios de graus 2, 4 e 8.

Os resultados dos exemplos de aproximação polinomial de funções estão na figura 5.

4 Integração

4.1 Integração de funções

Usa-se a função int do MATLAB para a solução de integrais numéricas e simbólicas.

4.1.1 Exemplo de integração simbólica

Z
x2 + 2x + 3 dx (3)

>> f = ’x^2+2*x+3’

f =
x^2+2*x+3

>> int(f)

9
ans =
1/3*x^3+x^2+3*x

4.1.2 Exemplo de integração numérica

Z 10
x2 + 2x + 3 dx (4)
0

>> f = ’x^2+2*x+3’

f =
x^2+2*x+3

>> int(f,0,10)

ans =
1390/3

A resposta de int é um número fracionário. Usa-se a função double para convertê-lo


na sua forma decimal.

>> double(ans)

ans =
463.3333

4.2 Integração a partir de conjuntos de dados

Pode-se efetuar a integração numérica de dois vetores de dados que definem um con-
junto de pontos coordenados no plano. Seja X o vetor contendo as abscissas e Y o vetor
contendo as ordenadas da função sen(x), definidos da seguinte forma:

>> X = 0:pi/20:pi;
>> Y = sin(X);

10
1

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
0 0.5 1 1.5 2 2.5 3 3.5

Figura 6: Função sen(x) e pontos (x, y).

A função sen(x) e os pontos definidos pelos vetores X e Y são mostrados na figura 6.


A integração numérica pelo método trapezoidal pode ser feita com a função trapz:

>> trapz(X,Y)

ans =
1.9959

Por que o resultado não é exato?

11

Você também pode gostar