Sei sulla pagina 1di 30

2.

Aplicao do Matlab
Resoluo de Problemas
Neste captulo mostram-se as potencialidades do Matlab para resolver alguns
problemas concretos.
Destacam-se sobretudo as suas capacidades de clculo numrico e grficos.

2.1. Estudo de Polinmios


Nesta parte aborda-se o uso do Matlab ao estudo de polinmios. A saber referem-se as seguinte
funes do Matlab:
! conv

Produto de dois polinmios

! deconv

Diviso de dois polinmios

! polyval

Calcula o valor de um polinmio y=f(x) dado o valor de x

! roots

Razes de um polinmio

! poly

Calcula um polinmio dadas as suas razes

! polyder

Calcula a derivada de um polinmio

Na introduo terica referiram-se como aspectos interessantes sobre este assunto algumas
operaes polinomiais, determinao de razes e clculo de polinmios conhecidas as suas razes.
Aborda-se agora como o uso do Matlab pode ser til nestes casos.
2.1.1 Definio de um polinmio
Um polinmio definido em Matlab custa de um vector, cujos valores so os coeficientes do
polinmio ordenado por ordem decrescente das suas potncias. Por exemplo o polinmio

50

2.1 Estudo de polinmios

f(x) = x2 + x - 6
definido como,
>>

polinomio = [ 1 1 -6]]

Mais exemplos
f(x) = x2 6
>>

polinomio = [ 1 0 -6]]

f(x) = x3 - x
>>

polinomio = [ 1 0 -1 0 ]

f(x) = x4 - x3 - 2 x2 + 3
>>

polinomio = [ 1 -1 -2 0 3 ]

2.1.2 Clculo de valores de polinmios

Existem duas formas de calcular o valor de um polinmio: escrevendo directamente o


polinmio ou usando a funo polyval. Da primeira forma procede-se como se indica. Seja o
polinmio
f(x) = x4 - 3x3 - 2 x2 + 3
O valor de f(x=4) pode-se calcular como
>>

x = 4;

>>

f4 = x^4 - 3*x^3 - 2*x^2 + 3

>>

f4 = 35.0

Pode-se calcular de uma s vez o valor para um conjunto de valores (vector neste caso).
Matlab: Ferramenta de simulao computacional e clculo numrico

51

2.1 Estudo de polinmios


>>

w = 0:1:10;

>>

f = w.^4 - 3*w^3 - 2*w.^2 + 3

Usando a funo polyval


y = polyval( polinomio, x)

possvel calcular o valor de polinmio (pol) no ponto x. Para o exemplo em questo


>>

x = 4

>>

pol = [ 1 -3 -2 0 3 ]

>>

f4 = polyval( pol, x)

>>

f4 = 35.0

>>

w = 0:1:10;

>>

f = polyval( pol, w)

Portanto quando x um escalar polyval devolve um escalar, quando w um vector devolve um


vector.
1.1.3 - Operaes aritmticas
A adio consiste em somar simplesmente dois vectores. Por exemplo pretende-se somar os dois
seguintes vectores
f(x) = x4 - 3 x2 - x + 2 g(x) = 4 x3 - 2 x2 + 5 x - 16
A sua soma s(x) = f(x) + g(x) calculada como se indica,
>>

f = [ 1

0 -3 -1

>>

g = [ 0

4 -2

>>

s = f + g

>>

s = [ 1

4 -5

2 ]

5 -16 ]

4 -14 ]

O polinmio calculado s(x) = x4 + 4 x4 - 5 x2 + 4 x - 14


Matlab: Ferramenta de simulao computacional e clculo numrico

52

2.1 Estudo de polinmios


Multiplicao por um escalar

A multiplicao de um polinmio por um escalar obtm-se simplesmente pela multiplicao de


um vector (que define o polinmio) por um escalar. Seja o polinmio s(x) = 3*f(x), em que f(x)
o polinmio definido acima ento,
>>

f = [ 1

>>

s = 3*f

>>

s = [ 3

0 -3

-1

2 ]

0 -9

-3

6 ]

Portanto s(x) = 3 x4 - 9 x2 - 3 x + 6
Multiplicao de dois polinmios

A multiplicao de dois polinmios conseguida usando a funo conv. Por exemplo pretendese multiplicar os polinmios f(x) e g(x)
f(x) = x2 - x + 2 g(x) = 5 x - 16
>>

f = [ 1 -1

2 ]

>>

g = [ 5

>>

s = conv( f, g)

>>

s = [ 5

-16 ]

-17 -6 -32

Seria o mesmo que s(x) = 5 x3 - 17 x2 - 6 x 32

Diviso de dois Polinmios

A diviso de dois polinmios conseguida em Matlab usando a funo deconv. Para dividir os
polinmios
f(x) = x2 - x + 2 g(x) = 5 x - 16
faz-se
>>

[q,r]] = deconv(f,g)

>>

q = [ 0.20 0.44]]

>>

r = [ 0.0

0.0

9.04]]

A funo deconv calcula o quociente (q) e o resto (r) da diviso dos polinmios. Neste caso,
Matlab: Ferramenta de simulao computacional e clculo numrico

53

2.1 Estudo de polinmios

q(x) = 0.2 x + 0.44


Note-se que vlida a relao

r = 9.04

f(x) = q(x) * g(x) + r


x2 - x + 2 = ( 0.2 x + 0.44 ) (5 x - 16) + 9.04
1.1.4 - Razes de um Polinmio
Existe frequentemente a necessidade de calcular as razes de uma polinmio. Recorrendo ao
Matlab fcil realizar esta tarefa, mesmo que o polinmio seja de ordem elevada. A funo roots
para esse fim utilizada.
Considere-se, por exemplo, o seguinte polinmio de segunda ordem
f(x) = x2 + x 6
>>

f = [ 1

1 -6 ]

>>

r = roots(f)

>>

r= -3
2

Existem portanto duas razes, em x=2 e x=-3. Outro exemplo, agora com razes complexas,
f(x) = x2 - 2x +5
>>

f = [ 1

-2 5 ]

>>

r = roots(f)

>>

1.0000 + 2.0000 j
1.0000 - 2.0000 j

Existem portanto duas razes complexas, x=1.0 + 2.0 i e x= 1.0 - 2.0 i.


Especificao de um Polinmio conhecendo os suas razes

possvel em Matlab determinar automaticamente um polinmio que tem determinadas razes


conhecidas priori. A funo que o permite a poly.
Por exemplo sabe-se que as razes de um polinmio so x=-3 e x=2. possvel determinar um
polinmio que tem essas razes fazendo.
Matlab: Ferramenta de simulao computacional e clculo numrico

54

2.1 Estudo de polinmios

>>

f = poly ([[ -3

>>

f = [ 1

2 ])

-6 ]

Por outras palavras o polinmio resultando


f(x) = x2 + x - 6
Mais um exemplo. As razes de um polinmio so -2, 0, 3 e -32 i, portanto trs razes reais e
duas complexas. Eis como se pode calcular um polinmio que tenha tais razes.
>>

raizes = [ -2

>>

f = poly ([[ raizes ])

>>

f = poly [ 1

-3+2*i

-49

-3-2*i ]

-78

0 ]

Ser ento o polinmio f(x) = x5 + 5 x4+ x3 - 49 x2 -78 x

2.2 - Estudo de Funes


Na seco anterior estudou-se um caso particular de funes, os polinmios. Nesta abordam-se
os problemas de clculo de mnimos e razes de funes genricas.
O Matlab distingue dois casos: funes de uma varivel e funes de vrias variveis. Estudamse as seguintes as funes:
! fmin

Mnimo de uma funo de uma varivel

! fzero

Zeros de uma funo de uma varivel

! fmins

Mnimo de uma funo de vrias variveis

Considere-se a funo
y =f(x) =

1
1
+
-1
2
2
(x - 2) + 0.05
(x - 1) + 0.1

Pretende-se determinar o seu mnimo e determinar a seus zeros, isto , os pontos x* tais que
y(x*)=0.

Matlab: Ferramenta de simulao computacional e clculo numrico

55

2.2 Estudo de funes


Usando um ficheiro ASCII, comea por se definir a funo em questo, por exemplo com o
nome de funcao1.m

"

function y = funcao1(x)
y= 1./( (x-1).^2 + 0.1) + 1./( (x-2).^2 + 0.05) - 1;
end

Pode-se depois visualiz-la na gama x[-2..5]. Para isso faz-se


>>

x=-2:0.1:5;

>>

y=funcao1(x);

>>

plot(x,y);

>>

grid
20

15

10

-5
-2

-1

Figura 2.1 - Funo de uma varivel

Mnimos
Para determinar de uma funo definida como acima se explicou, existe a funo fmin
>>

min=fmin(funcao,xini,xfin)

assim possvel determinar o mnimo da funo funcao.m no intervalo compreendido entre


x[xini..xfin].
Considerando os dois seguintes intervalos: [ -2, 5] e [ 1, 2] faz-se
>>

min1=fmin(funcao1,-2,5)

>>

min2=fmin(funcao1, 1,2)

Matlab: Ferramenta de simulao computacional e clculo numrico

56

2.2 Estudo de funes


>>

ymin1=funcao1(min1)

>>

ymin2=funcao1(min2)

As duas primeiras linhas permitem determinar os x mnimos em questo e as duas ltimas o


valores de y correspondentes. Os valores obtidos foram
xmin1 = -1.9999
ymin1= -0.8278
xmin2 = 1.4629
ymin2 = 5.1363

Zeros
Para determinar os zeros de uma funo existe a funo fzero
>>

zer=fzero(funcao,xini)

O valor de xini permite especificar uma soluo inicial para o zero da funo. Recorrendo ao
Matlab calcula-se a soluo nas proximidades de x=0.5 e x=2.5
>>

zer1=fzero('funcao1',0.5)

>>

zer2=fzero('funcao1',2.5)

Os valores obtidos foram


zer1 = -0.0918
zer2 = 3.1098

Na figura que se segue mostra-se os resultados obtidos nos dois exemplos anteriores:
mnimos e zeros.

Matlab: Ferramenta de simulao computacional e clculo numrico

57

2.2 Estudo de funes


20

15

10

-5
-2

-1

Figura 2.2 - Mnimos e zeros de uma funo

2.3 - Sistemas de Equaes Lineares


Nesta parte estuda-se a aplicao do Matlab resoluo de sistemas de equaes lineares. A
saber referem-se as seguinte funes/caracteres especiais no Matlab
!\

Diviso esquerda

!|

Diviso direita

! inv(A)

Inversa da matriz A

! rank(A)

Caracterstica de uma matriz

2.3.1 - Diviso Esquerda / Inversa


Considere-se o seguinte sistema de equaes lineares
3x

+2y - z

-x

+3y +2z = 5

-y

-z

= 10

= -1

Usando a notao matricial:

3 2 -1 x 10
-1 3 2 y = 5


1 -1 -1 z -1

AX=B
Existem duas formas de solucionar o problema
Matlab: Ferramenta de simulao computacional e clculo numrico

58

2.4 Interpolao a ajuste de curvas


Diviso esquerda X = A\B
Inversa

X = A-1 B

Diviso esquerda
>>

A = [ 3, 2, -1; -1, 3, 2; 1, -1, -1]];

>>

B = [ 10, 5, -1]];

>>

X = A\B

>>

A = [ 3, 2, -1; -1, 3, 2; 1, -1, -1]];

>>

B = [ 10, 5, -1]];

>>

X = inv(A)*B

Inversa

Nos dois exemplos anteriores a soluo ser

x -2
y = 5

z -1

2.3.2 - Diviso Direita


Se o sistema for definido como
XA =B
ento a sua soluo pode ser dada por uma diviso direita
X = B/A
Seja o seguinte exemplo

3 2 -1
x y z ] -1 3 2 = [ 10 5 -1 ]

1 -1 -1

Diviso direita
>>

A = [ 3, 2, -1; -1, 3, 2; 1, -1, -1]];

>>

B = [ 10, 5, -1]];

>>

X = B/A
X = [ x y z ] = [ -3.0 15.0 34.0 ]

2.3.3 - Exemplos
Matlab: Ferramenta de simulao computacional e clculo numrico

59

2.4 Interpolao a ajuste de curvas


Eis alguns exemplos, e respectiva soluo, de sistemas de equaes lineares:
x

+ 2y - z

=1

- 2y + z

=2

+ y - z

= -1

Soluo:

(x,y,z) = (1.5, 2, 4.5 )

+ 2y + z

=1

2x

- y - z

=5

Soluo:

(x,y,z) = ..

No possvel determinar a soluo uma vez que existe um nmero de incgnitas (3)
superior ao de equaes (2). Existe uma infinidade de solues

+y

+ z = 10

-x

- y

-z

=5

+ 2y

- z

= -1

x
Soluo:

(x,y,z) = ( Nan, Nan, Nan )

Note-se que rank(A)=2, ou seja, no existe um nmero de equaes linearmente


independentes igual ao nmero de incgnitas e portanto o sistema no tem soluo (a
primeira linha o simtrico da segunda).

+ 2y + z

2x

-+3 y - z

=2

2x

- 2y - z

=5

2x

- y

Soluo:

+z

=1

=1

(x,y,z) = ..

No possvel determinar a soluo uma vez que existe um nmero de incgnitas (3)
inferior ao de nmero de equaes (4). No existe portanto soluo.

2.4 - Interpolao a Ajuste de Curvas


Nesta parte estuda-se a aplicao do Matlab interpolao e ajuste de curvas. A saber
referem-se as seguinte funes no Matlab
! polyfit

Calcula um polinmio de ordem n usando a tcnica dos


mnimos quadrados

! polyval

Calcula o valor de um polinmio y=f(x) dado o valor de x

! spline

Determine uma interpolao cbica

Matlab: Ferramenta de simulao computacional e clculo numrico

60

2.4 Interpolao a ajuste de curvas


! tabl1

Determina uma interpolao linear a uma dimenso

! table2

Determina uma interpolao linear a duas dimenso

2.4.1 - Interpolao
Basicamente a interpolao tem por objectivo estimar o valor entre dois pontos para os
quais se conhecem os valores. Estudam-se duas formas de aproximao: a linear e a cbica

Exemplo
Considere o tanque de gua que se mostra na figura seguinte.

Figura 2.3 - Tanque de gua

Para estudar o sistema abriu-se a torneira e recolheram-se valores da ltura da gua (y)
durante os primeiros dez minutos, que se mostram na tabela seguinte
Tempo (s)

ltura (y)

0
1
2
3
4
5
6
7
8
9
10

0
0.7
2.4
3.1
4.2
4.8
5.7
5.9
6.2
6.4
6.4

Tabela 2.1 - Valores da evoluo da altura da gua

Graficamente pode-se ver a variao da ltura da gua

Matlab: Ferramenta de simulao computacional e clculo numrico

61

2.4 Interpolao a ajuste de curvas


E voluc ao da altu ra d a a gu a
7
6
5
4
y (m ) 3
2
1
0

4
6
T e m p o (m in uto s)

10

Figura 2.4 - Evoluo da altura gua

O objectivo da interpolao estimar o valor da ltura da gua em pontos intermdios


daqueles que se conhece o valor correcto da ltura da gua. Pretende-se, por exemplo,
estimar o valor da ltura da gua no instante 3.5 minutos.
Na anlise terica do problema, estudada no captulo 2, foi explicado como a interpolao
linear poderia ser usada para resolver o problema. Porque a interpolao linear aproxima-se
esse valor por uma funo linear, ou seja, uma recta.
Assim fcil de entender graficamente o resultado da interpolao de todos os pontos: rectas
que unem cada um dos pontos adjacentes, como se mostra na figura seguinte:
In te rp ola ca o d a a ltu ra ag u a
7
6
5
4
3
2
1
0

4
6
T em po (m in u to s)

10

Figura 2.5 - Interpolao linear da altura da gua

O Matlab, alm da interpolao linear, permite solucionar tal problema recorrendo a um mtodo
mais preciso, a cbica. Mais tarde aborda-se novamente este ltimo mtodo.

Matlab: Ferramenta de simulao computacional e clculo numrico

62

2.4 Interpolao a ajuste de curvas

Interpolao Linear

Comea-se por representar os dados segundo uma matriz em que a primeira linha
constituda pelos minutos (t) e a segunda pelos valores da ltura da gua (y) de vectores:

"

t = 0:1:10;
y = [0

0.7

2.4

3.1

4.2

4.8

5.7

5.9

6.2

6.4

6.4

];

dados(:,1)= t;
dados(:,2)= y;

A funo table1 permite interpolar a ltura da gua num valor desejado.


>>

y=table1( dados, x )

Como argumentos de entrada a tabela de dados e o valor de x a a interpolar, como varivel de


sada y=f(x). Neste caso particular pretende-se o valor no instante 3.5, ento
>>

y1=table1( dados, 3.5 )

>>

y1 =3.65

Para obter a interpolao no para um ponto (escalar) mas para um conjunto de pontos
(vector) procede-se da mesma forma:
>>

x= 0:0.1:10;

>>

y=table1( dados, x )

Exemplo 2

No exemplo anterior os dados so constitudos por duas colunas: o tempo e a ltura da gua.
Suponha-se agora que adicionalmente so recolhidos mais dois dados relativos ao tanque de
gua, a temperatura da gua na base e nvel superior do tanque. A tabela seguinte contm
esses valores:
Tempo (s)

ltura (y)

Temp. base

Temp. Sup.

0
1
2
3
4

0
0.7
2.4
3.1
4.2

10
10.6
10.9
11.1
11.7

10
10.7
10.4
11.1
12.2

Matlab: Ferramenta de simulao computacional e clculo numrico

63

2.4 Interpolao a ajuste de curvas


5
6
7
8
9
10

4.8
5.7
5.9
6.2
6.4
6.4

11.6
11.5
11.2
11.6
11.4
11.4

12.8
12.7
12.9
12.6
12.7
12.7

Tabela 2.2 - Valores da altura e temperatura da gua

E vo luca o d a a ltura e te m p e ratu ra s da ag u a


14
12
O - tem peratura na bas e

10

* - tem peratura no topo


8
6
ltura

4
2
0

4
6
T em po (m in u to s)

10

Figura 2.6 - Evoluo da altura e temperaturas da gua

Comea por se definir o conjunto de dados, notando que existem agora quatro colunas

"

t = 0:1:10;
y = [0

0.7

2.4

3.1

4.2

4.8

5.7

5.9

6.2

6.4

6.4

];

temp1=[10 10.6 10.9 11.1 11.7 11.6 11.5 11.2 11.6 11.4 11.4 ];
temp2=[10 10.7 10.4 11.1 12.2 12.8 12.7 12.9 12.6 12.7 12.7 ];
dados(:,1)=t';
dados(:,2)=y';
dados(:,3)=temp1';
dados(:,4)=temp2';

Para interpolar valores num dado instante usa-se novamente a funo table1
>>

y1 = table1(dados,3.5);

>>

y1 = [ 3.65

11.40

11.65 ]

ou seja so interpolados os valores para a ltura da gua e temperaturas na base e topo.


Matlab: Ferramenta de simulao computacional e clculo numrico

64

2.4 Interpolao a ajuste de curvas

Interpolao a duas dimenses


Novamente para o exemplo do tanque de nveis, foram recolhidos valores para a ltura do nvel
da gua considerando varivel o dimetro da torneira (de 1 a 1.4 centmetros). Esses
resultados mostram-se na tabela e figura seguintes
Tempo (s)

1.0

1.1

1.2

1.3

1.4

0
1
2
3
4
5
6
7
8
9
10

0
0.7
2.4
3.1
4.2
4.8
5.7
5.9
6.2
6.4
6.4

0
4.0
4.2
4.1
4.8
5.2
5.4
6.1
6.5
6.7
6.8

0
3.3
2.4
3.5
4.5
5.2
5.5
6.5
6.9
7.4
7.5

0
3.7
5.2
6.1
6.2
7.2
7.7
7.9
8.2
8.2
8.1

0
3.8
5.0
5.8
6.3
7.4
7.7
8.0
8.3
8.4
8.3

Tabela 2.3 - Valores da altura em funo do dimetro da torneira

E v o lu c a o d a a ltu ra d a a g u a / D ia m e tro to rn e ira


9

d5
d4

8
d3

d2
d1

6
5
4
3
2
1
0

10

M in u to s

Figura 2.7 - Evoluo da altura em funo do dimetro da torneira

Com este conjunto de dados pretende-se agora conhecer o valor da ltura da gua num
instante qualquer, tendo em ateno tambm o dimetro da torneira. Para esse efeito existe a
funo table2. Para comear constri-se uma matriz de dados em que cada linha contm os
dados relativos a cada instante:

"

dados( 1,:)

= [ 0 1.0 1.1 1.2 1.3 1.4 ] ;

dados( 2,:)

= [ 0 0

dados( 3,:)

= [ 1 0.7 4.0 3.3 3.7 3.8 ] ;

] ;

Matlab: Ferramenta de simulao computacional e clculo numrico

65

2.4 Interpolao a ajuste de curvas


dados( 4,:)

= [ 2 2.4 4.2 2.4 5.2 5.0 ] ;

dados( 5,:)

= [ 3 3.1 4.1 3.5 6.1 5.8 ] ;

dados( 6,:)

= [ 4 4.2 4.8 4.5 6.2 6.3 ] ;

dados( 7,:)

= [ 5 4.8 5.2 5.2 7.2 7.4 ] ;

dados( 8,:)

= [ 6 5.7 5.4 5.5 7.7 7.7 ] ;

dados( 9,:)

= [ 7 5.9 6.1 6.5 7.9 8.0 ] ;

dados(10,:)

= [ 8 6.2 6.5 6.9 8.2 8.3 ] ;

dados(11,:)

= [ 9 6.4 6.7 7.4 8.2 8.4 ] ;

dados(12,:)

= [10 6.4 6.8 7.5 8.1 8.3 ] ;

Note-se que os dados so organizados por linhas e no por colunas, como no exemplo
anterior. Para interpolar o valor da gua no instante 3.5 e para um dimetro 1.25 faz-se
>>

y = table2( dados, 3.5, 1.25);

>>

y = 5.0750

Pode-se entender este processo de interpolao como uma interpolao a duas dimenses,
isto , o valor da varivel a determinar depende de duas variveis, neste caso o tempo e a
capacidade da torneira (dimetro).
Interpolao Cbica
Por vezes a aproximao linear pode no constituir uma soluo satisfatria. O Matlab
implementa um outro tipo de interpolao, em que cada curva entre dois pontos adjacentes
consiste num polinmio de terceira ordem (dai a designao de interpolao cbica). A funo
que permite tal a spline.

Retomando o exemplo da ltura da gua dado no incio o aspecto geral deste ltimo tipo de
aproximao, comparada com a linear seria:

Matlab: Ferramenta de simulao computacional e clculo numrico

66

2.4 Interpolao a ajuste de curvas


In te rp ola ca o d a a ltu ra ag u a
7
6
5
4
3
In te rp olao c bica

2
In te rp olao linear

1
0
-1

4
6
T em po (m in u to s)

10

Figura 2.8 - Interpolao linear / cbica

Admitindo que se quer, tal como anteriormente, estimar o valor da ltura no instante 3.5.
Usando a funo spline tem-se
>>

t = 0:1:10;

>>

y = [0 0.7 2.4 3.1 4.2 4.8 5.7 5.9 6.2

>>

y1 = spline( t, y, 3.5 )

>>

y1 =3.6457

6.4 6.4

];

Note-se que no necessrio definir uma matriz de dados como o era no uso da table1. So
usados directamente os valores de t e y.

2.4.2 - Ajuste de Curvas


Assume-se agora que se dispe de um conjunto de dados, por exemplo recolhidos do
processo dos tanque de gua, e que se pretende determinar uma funo que aproxime os
dados reais existentes. Na anlise terica do problema foram apresentados mtodos que
utilizam regresses lineares para essa aproximao, o mesmo dizer, usam rectas. Foi
introduzido o mtodo dos mnimos quadrticos como aquele que de entre todas as rectas
possveis determina a que garante o menor desvio do quadrado das distncias.
Foram depois definidos mtodos de regresso polinomial, isto , a aproximao feita no por
um polinmio de primeira ordem (recta), mas por um polinmio de qualquer ordem.

Aproximao linear: Mtodo dos Mnimos Quadrticos

Matlab: Ferramenta de simulao computacional e clculo numrico

67

2.4 Interpolao a ajuste de curvas


O Matlab dispe da funo polyfit que permite aproximar um dado conjunto de pontos por uma
recta utilizando o mtodo dos mnimos quadrticos. Considerando novamente o problema do
tanque de gua, conhece-se o seguinte conjunto de dados:
>>

t = 0:1:10;

>>

y = [0 0.7

2.4

3.1

4.2

4.8

5.7

5.9

6.2

6.4

6.4 ];
A funo polyfit permite obter os coeficiente do polinmio (dois, os coeficientes da recta):
>>

coef = polyfit(t,y,1);

>>

coef = [ 0.6664

0.8318

Ou seja a recta resultante


y = 0.6664 x + 0.8318
Graficamente o resultado pode ser obtido como se segue
>>

yap = coef(1).*t+coef(2);

>>

plot(t,yap,t,y,'o')
A p ro xim ac ao da altu ra a gu a
8
7
6
5
4
3
2
1
0

4
6
T em po (m in u to s)

10

Figura 2.9 - Recta calculada pelos mnimos quadrticos

Aproximao Polinomial
Usando a funo polyfit possvel aproximar o conjunto de pontos por um polinmio de
qualquer ordem. A sintaxe

Matlab: Ferramenta de simulao computacional e clculo numrico

68

2.4 Interpolao a ajuste de curvas


>>

coef = polyfit(t,y,n);

Em que n a ordem do polinmio. Note-se que a funo vlida para aproximaes lineares,
sendo neste caso n=1.
Para o mesmo exemplo apresenta-se a soluo para polinmios de segunda, terceira, quarta e
quinta ordem.
Segunda ordem: n=2
>>

coef = polyfit(t,y,2);

>>

coef = [ -0.0712

1.3785 -0.2364 ]

f(x) = -0.0712 x2 + 1.3785 x -0.2364


A p ro xim ac ao da altu ra a gu a
7
6
5
4
3
2
1
0
-1

4
6
T em po (m in u to s)

10

Figura 2.10 - Aproximao de segunda ordem

Terceira ordem: n=3


>>

coef = polyfit(t,y,3);

>>

coef = [ -0.0022 -0.0386

1.2540 -0.1580 ]

f(x) = -0.0022 x3 - 0.0386 x2 + 1.2540 x -0.1580

Matlab: Ferramenta de simulao computacional e clculo numrico

69

2.4 Interpolao a ajuste de curvas


A p ro xim ac ao da altu ra a gu a
7
6
5
4
3
2
1
0
-1

4
6
T em po (m in u to s)

10

Figura 2.11 - Aproximao de terceira ordem

Quarta ordem: n=4


>>

coef = polyfit(t,y,4);

>>

coef = [ 0.0010 -0.0232

0.0925

0.9918 -0.0825 ]

f(x) = 0.0010 x4 - 0.0232 x3 + 0.0925 x2 + 0.9918 x -0.0825


A p ro xim a c a o d a a ltu ra a g u a
7
6
5
4
3
2
1
0
-1

4
6
T e m p o (m in u to s )

10

Figura 2.12 - Aproximao de quarta ordem

Quinta ordem: n=5


>>

coef= polyfit(t,y,5);

>>

coef= [-0.0003 0.0075 -0.0791 0.2913 0.7506 -0.0517 ]

f(x) = - 0.0003 x5 + 0.0075x4 - 0.0791 x3 + 0.2913 x2 + 0.7506 x -0.0517

Matlab: Ferramenta de simulao computacional e clculo numrico

70

2.4 Interpolao a ajuste de curvas


A p ro xim a c a o d a a ltu ra a g u a
7
6
5
4
3
2
1
0
-1

4
6
T e m p o (m in u to s )

10

Figura 2.13- Aproximao de quinta ordem

Interpolao Usando a Funo Calculada na Aproximao


A determinao de uma funo que aproxime um conjunto de pontos pode ser usada para o
clculo de valores intermdios, tal como a interpolao. Ora, uma vez calculado o polinmio
que aproxima o conjunto de pontos inicial, depois possvel interpolar o valor para um outro
ponto qualquer recorrendo funo determinada.
Por exemplo, pretende-se interpolar um valor para a altura da gua no instante 3.5. Uma
possvel soluo usar esta ltimo aproximao (quinta ordem) e calcular o valor da funo
em 3.5, fazendo
>>

coef =[[ -0.0003

0.0075 -0.0791

0.2913

0.7506 -

0.0517 ]
>>

y1 = polyval(coef, 3.5)

>>

y1

= 3.7349

2.5 - Integrao Numrica e Diferenciao


Nesta parte estuda-se a aplicao do Matlab integrao numrica e diferenciao de
funes. A saber referem-se as seguinte funes no Matlab
! diff

Clculo das diferenas entre dois valores adjacentes

! quad

Calcula o integral sobre uma curva (Mtodo de Simpson)

! find

ndice dos valores no nulos de um vector

Matlab: Ferramenta de simulao computacional e clculo numrico

71

2.5 Integrao numrica e diferenciao

2.5.1 - Integrao numrica


Referiu-se no estudo terico do problema duas tcnicas de calcular numericamente o integral
de uma funo: a regra trapezoidal e a de Simpson. Na primeira usando uma aproximao
linear para os valores da funo na segunda uma aproximao quadrtica. Em termos de
clculo os mtodos distinguem-se pela frmula que permite calcular o integral (a primeira diz
respeito regra trapezoidal e a segunda de Simpson):
b-a
1. Kap = 2n ( f(xo) + 2 f(x1) + 2 f(x2) + . . . + 2 f(xn-1) + f(xn) )
h
2. Kap = 3 ( f(xo) + 4 f(x1) + 2 f(x2) + 4 f(x3) + . . . + 2 f(xn-2) + 4 f(xn-1) + f(xn) )
em que h o passo de integrao.
O Matlab implementa a regra de Simpson disponibilizando a funo quad para esse efeito.
Funes pr definidas
Considere-se por exemplo a seguinte funo, j referida na parte terica,
y=

Pretende-se calcular o integral, o mesmo dizer a rea abaixo da funo, entre dois valores
positivos a e b (b>a). Na figura seguinte mostra-se a funo no intervalo [0, 5]
2 .5

1 .5

0 .5

Figura 2.14 - Funo raiz quadrada

Para calcular a soluo (valor da rea) para este problema faz-se


>>

area =quad('sqrt', 0, 5)

>>

area =

7.4535

Matlab: Ferramenta de simulao computacional e clculo numrico

72

2.5 Integrao numrica e diferenciao


sqrt especifica o nome da funo,

Os parmetros so:

0 - valor inicial
5 - valor final de integrao.

Funes definidas pelo utilizador


Acontece que na prtica desejado calcular o integral de funes definidas pelo prprio
utilizador (no exemplo anterior a funo existe disponvel no Matlab). Por considere a seguinte
funo
y = f(x) = x2 + 5*sin(x) - cos(2*x) + 1
A seguir mostra-se o seu grfico no intervalo [ -1 .. 5 ]
25

20

15

10

-5
-1

Figura 2.15 - Exemplo de uma funo

Pretende-se calcular a rea abaixo da figura no intervalo [1 .. 4], dada pela rea da figura
abaixo
25

20

15

10

-5
-1

Figura 2.16 - Integral de uma funo

Matlab: Ferramenta de simulao computacional e clculo numrico

73

2.5 Integrao numrica e diferenciao


Primeiro deve-se definir a funo desejada criando uma funo num ficheiro *.m (assunto
abordado na parte de Matlab). O seguinte cdigo ento criado e armazenado num ficheiro de
nome funcao.m

"

function y = funcao(x)
y= x.^2 + 5*sin(x) - cos(2*x)+ 1;
end

Para calcular o valor do integral basta executar o seguinte comando


>>

area = quad('funcao',1,4)

>>

area

= 29.9297

2.5.2 - Diferenciao numrica


Tal como a integrao o clculo da derivada de uma funo pode ser facilmente implementada
em Matlab. A seguir mostra-se como a funo diff pode ser utilizada nessa tarefa.

Derivada
Seja a funo definida pelo seguinte polinmio (rever parte terica)
f(x) = x5 - 3 x4 - 11 x3 + 27 x2 + 10 x -24
Graficamente
600

400

200
f(x)

-200

-400

-600
-4

-3

-2

-1

Figura 2.17 - Exemplo de uma funo

Matlab: Ferramenta de simulao computacional e clculo numrico

74

2.5 Integrao numrica e diferenciao


Para calcular a sua derivada deve-se fazer
>>

x = -4:0.1:5;

>>

y = x.^5 - 3*x.^4 - 11*x.^3 + 27*x.^2 + 10*x -24;

>>

dy = diff(y)./diff(x);

Refira-se que a funo diff no implementa directamente o clculo da derivada mas sim do
clculo das diferenas entre dois valores adjacentes de um vector. Da o clculo da derivada
ser a diviso entre as diferenas de y e as diferenas de x.
dy
y dx
Na figura seguinte mostra-se a funo (y) e respectiva derivada (dy)
600

400
dy
200
y
0

-2.31

-0.17

1.53

3.35

-200

-400

-600
-4

-3

-2

-1

Figura 2.18 - Funo e respectiva derivada

Pontos Crticos
Sabe-se que o conhecimento da derivada permite identificar os valores mximos ou mnimos
de uma funo. Viu-se tambm no captulo 2 como a evoluo da derivada permite concluir da
existncia de pontos crticos.
1. Calcula-se a derivada de uma funo em pontos adjacentes num dado intervalo
2. Se o produto da deriva num ponto x(k) pelo valor no ponto x(k+1) for:
> 0 - no houve variao de sinal
= 0 - a derivada nula num (ou nos dois) dos pontos
< 0 - houve uma variao de sinal
3. Os valores <0 permitem portanto identificar pontos crticos

Matlab: Ferramenta de simulao computacional e clculo numrico

75

2.5 Integrao numrica e diferenciao

Em Matlab este raciocnio possvel de implementar usando a funo find . A funo find
permite determinar, para um determinado vector, quais os ndices dos seus elementos no
nulos.

Por exemplo
>>

indices = find( X > 10);

devolve os ndices do vector X cujos elementos so superiores a 10.


Assim os pontos crticos no exemplo em estudo so obtidos como se indica a seguir
>>

xd = x(2:length(x));

>>

produto = dy(1:length(dy)-1).*dy(2:length(dy));

>>

pcriticos = xd( find (produto<0))

>>

pcriticos = [ -2.31

-0.17

1.53

3.35 ]

Os pontos crticos obtidos podem ser confirmados pela observao da figura anterior.

2.6 - Equaes diferenciais de primeira ordem


Nesta parte estuda-se a aplicao do Matlab resoluo de equaes diferenciais. A saber
referem-se as seguintes funes do Matlab
! ode23

Mtodo de Runge-Kutta de segunda e terceira ordem

! ode45

Mtodo de Runge-Kutta de terceira e quarta ordem

2.6.1 - Introduo
Em Matlab existem duas funes, ode23 e ode45, capazes de calcular numericamente a
soluo de uma equao diferencial do tipo:
Equao diferencial

y= g(x,y)

Soluo

y=f(x)

A primeira implementa o mtodo de Runge-Kutta de segunda-terceira ordem e a segunda o


mtodo de Runge-Kutta de quarta-quinta ordem.

Matlab: Ferramenta de simulao computacional e clculo numrico

76

2.6 Equaes diferenciais de primeira ordem


Uma vez que as duas funes possuem o mesmo nmero de argumentos, explica-se apenas o
funcionamento de uma delas. A outra equivalente diferindo apenas no mtodo
implementado. A sintaxe da funo ode23 a seguinte
[ x, y ] = ode23( derivada, inicio, fim, y0)

Sadas

x
y

- coordenadas
- valores correspondente para y=f(x)

Entradas

derivada
incio
fim
y0

- nome do ficheiro *.m onde deve ser definida a equao diferencial


- ponto inicial a partir do qual se calcula a soluo
- ponto final para o qual se calcula a soluo
- condio inicial para a y=f(xo)

2.6.2 - Exemplo 1
Considere-se a seguinte equao diferencial
y= 2x + 2
Sabe-se que analiticamente a soluo desta equao
y(x) = x2 + 2 x + yo
sendo y0 a chamada condio inicial, isto y(0)=f( x(0) ). Em Matlab este problema pode-se
resolver da seguinte forma:
1. Define-se a funo derivada, construindo um ficheiro *.m, por exemplo, de nome
deriva.m com o contedo:

"

function

dy=deriva(x,y)

dy = 2*x + 2;

2. Uma vez definida a condio inicial, por exemplo y0=1, e o intervalo desejado [0..2]
faz-se
>>

yo= 1;

>>

[x,y]= ode23('deriva',0,2,yo);

Na figura que se segue mostra-se o valor calculado usando a funo ode23 (mtodo de RungeKutta) e o valor analtico exacto (ya) calculado usando a soluo
Matlab: Ferramenta de simulao computacional e clculo numrico

77

2.6 Equaes diferenciais de primeira ordem


y(x) = x2 + 2 x + 1
ya = x.^2 + 2*x + 1;

>>

E q u a c a o D ife re n c ia l
9
8
7
6
y

5
4
3
2
1

0 .5

1
x

1 .5

Figura 2.19 - Derivada analtica e calculada numericamente

Note-se a proximidade das duas solues. Na verdade no possvel distingui-las


grficamente.

2.6.3 - Exemplo 2
Considere-se agora a equao diferencial
y= 4y + e2x
Usando o Matlab procede-se como se referiu no exemplo anterior. Constri-se uma funo

"

function

dy=deriva(x,y)

dy = 3*y + exp(2*x);

Define-se a condio inicial e usa-se a funo ode23.


>>

xo=3;

>>[x,y]=ode23('deriva',0,1,xo);

Sabe-se que analiticamente a soluo dada por


y= f(x)= 3e3x - e2x

Matlab: Ferramenta de simulao computacional e clculo numrico

78

2.6 Equaes diferenciais de primeira ordem


>>

ya=4*exp(3*x)-exp(2*x);

%--

y(0) = 3

A seguir mostra-se um grfico comparativo das duas solues: analtica e numrica


E q ua ca o D ife re n cial
80
70
60
50
y

40
30
20
10
0

0.2

0 .4

0 .6

0.8

Figura 2.20 - Soluo analtica / numrica de uma equao diferencial

Matlab: Ferramenta de simulao computacional e clculo numrico

79

Potrebbero piacerti anche