Você está na página 1de 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 deconv polyval roots poly polyder Produto de dois polinmios Diviso de dois polinmios Calcula o valor de um polinmio y=f(x) dado o valor de x Razes de um polinmio Calcula um polinmio dadas as suas razes 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 g = [ 0

0 -3 -1 4 -2

2 ]

5 -16 ]

s = f + g s = [ 1 4 -5 4 -14 ]

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


Multiplicao por um escalar

Matlab: Ferramenta de simulao computacional e clculo numrico

52

2.1

Estudo de polinmios

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 g = [ 5

2 ]

-16 ]

s = conv( f, g) s = [ 5 -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, q(x) = 0.2 x + 0.44 r = 9.04
53

Matlab: Ferramenta de simulao computacional e clculo numrico

2.1

Estudo de polinmios

Note-se que vlida a relao 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.
>>

f = poly ([ -3 [

2 ]) 54

Matlab: Ferramenta de simulao computacional e clculo numrico

2.1

Estudo de polinmios
>>

f = [ 1

-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

-3+2*i

-3-2*i ]

f = poly ([ raizes ]) [ f = poly [ 1 5 1 -49 -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 fzero fmins Mnimo de uma funo de uma varivel Zeros de uma funo de uma varivel Mnimo de uma funo de vrias variveis

Considere-se a funo y =f(x) = 1 (x - 1)2 + 0.1 - 1 +

1 (x - 2)2 + 0.05

Pretende-se determinar o seu mnimo e determinar a seus zeros, isto , os pontos x* tais que y(x*)=0. Usando um ficheiro ASCII, comea por se definir a funo em questo, por exemplo com o nome de funcao1.m
function y = funcao1(x)

Matlab: Ferramenta de simulao computacional e clculo numrico

55

2.2

Estudo de funes
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) ymin1=funcao1(min1) ymin2=funcao1(min2)

Matlab: Ferramenta de simulao computacional e clculo numrico

56

2.2

Estudo de funes

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 exemplos anteriores: mnimos e zeros.

resultados

obtidos

nos

dois

20

15

10

-5 -2

-1

Figura 2.2 - Mnimos e zeros de uma funo

Matlab: Ferramenta de simulao computacional e clculo numrico

57

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
\ | inv(A) rank(A) Diviso esquerda Diviso direita Inversa da matriz A Caracterstica de uma matriz

2.3.1 - Diviso Esquerda / Inversa


Considere-se 3x - x x o seguinte sistema de equaes lineares +2y - z = 10 +3y +2z = 5 - y - z = -1

Usando a notao matricial:

3 2 -1 x 2 y -1 3 1 -1 -1 z

10 = 5 -1

A X = B Existem duas formas de solucionar o problema 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

Inversa
>> >> >>

A = [ 3, 2, -1; -1, 3, 2; 1, -1, -1]; ] B = [ 10, 5, -1]; ] X = inv(A)*B

Nos dois exemplos anteriores a soluo ser

58

2.4

Interpolao a ajuste de curvas

x y = z 2.3.2 - Diviso Direita


Se o sistema for definido como X A

-2 5 -1

= B

ento a sua soluo pode ser dada por uma diviso direita X = B/A Seja o seguinte exemplo

3 2 -1 2 [ x y z ] -1 3 1 -1 -1
Diviso direita
>> >> >>

= [ 10

-1 ]

A = [ 3, 2, -1; -1, 3, 2; 1, -1, -1]; ] B = [ 10, 5, -1]; ] X = B/A


X = [ x z ] = [ -3.0 34.0 ]

15.0

2.3.3 - Exemplos
Eis alguns exemplos, e respectiva soluo, de sistemas de equaes lineares: x x x + 2y - z = 1 - 2y + z = 2 + y - z = -1 (x,y,z) = (1.5, 2, 4.5 ) + 2y + z = 1

Soluo:

x 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

x + y + z = 10 - x - y - z = 5 x +
Soluo:

2y

= -1

(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).

Matlab: Ferramenta de simulao computacional e clculo numrico

59

2.4

Interpolao a ajuste de curvas x + 2y + z 2x -+3 y - z 2x 2x = 1 = 2

2y - z = 5 y +z = 1 (x,y,z) = ..

Soluo:

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 polyval spline tabl1 table2 Calcula um polinmio de ordem tcnica dos mnimos quadrados n usando a

Calcula o valor de um polinmio y=f(x) dado o valor de x Determine uma interpolao cbica Determina dimenso Determina dimenso uma uma interpolao interpolao linear linear a a uma duas

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

Matlab: Ferramenta de simulao computacional e clculo numrico

60

2.4

Interpolao a ajuste de curvas

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) 0 1 2 3 4 5 6 7 8 9 10 ltura (y) 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


E voluca o d a a ltu ra da ag u 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:

Matlab: Ferramenta de simulao computacional e clculo numrico

61

2.4

Interpolao a ajuste de curvas


Inte rp ola cao da altu ra a g ua 7 6 5 4 3 2 1 0

4 6 T em p o (m inu tos)

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. 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 )

Matlab: Ferramenta de simulao computacional e clculo numrico

62

2.4

Interpolao a ajuste de curvas


>>

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) 0 1 2 3 4 5 6 7 8 9 10 ltura (y) 0 0.7 2.4 3.1 4.2 4.8 5.7 5.9 6.2 6.4 6.4 Temp. base 10 10.6 10.9 11.1 11.7 11.6 11.5 11.2 11.6 11.4 11.4 Temp. Sup. 10 10.7 10.4 11.1 12.2 12.8 12.7 12.9 12.6 12.7 12.7

Tabela 2.2 - Valores da altura e temperatura da gua

E vo lu ca o d a a ltura e te m p eratu ra s da ag ua 14 12 10
O - tem pera tura na base

* - tem pera tura no to po


8 6
ltura

4 2 0

4 6 T em p o (m inu tos)

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 Matlab: Ferramenta de simulao computacional e clculo numrico 63

2.4

Interpolao a ajuste de curvas


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 ] valores para a ltura da gua e

ou seja so interpolados os temperaturas na base e topo.

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) 0 1 2 3 4 5 6 7 8 9 10 1.0 0 0.7 2.4 3.1 4.2 4.8 5.7 5.9 6.2 6.4 6.4 1.1 0 4.0 4.2 4.1 4.8 5.2 5.4 6.1 6.5 6.7 6.8 1.2 0 3.3 2.4 3.5 4.5 5.2 5.5 6.5 6.9 7.4 7.5 1.3 0 3.7 5.2 6.1 6.2 7.2 7.7 7.9 8.2 8.2 8.1 1.4 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

Matlab: Ferramenta de simulao computacional e clculo numrico

64

2.4

Interpolao a ajuste de curvas


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 8 7 6 5 4 3 2 1 0 0 2 4 M in u to s 6 8 10
d3 d5 d4 d2 d1

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,:) dados( 2,:) dados( 3,:) dados( 4,:) dados( 5,:) dados( 6,:) dados( 7,:) dados( 8,:) dados( 9,:) dados(10,:) dados(11,:) dados(12,:) = [ 0 1.0 1.1 1.2 1.3 1.4 ] ; = [ 0 0 0 0 0 0 ] ;

= [ 1 0.7 4.0 3.3 3.7 3.8 ] ; = [ 2 2.4 4.2 2.4 5.2 5.0 ] ; = [ 3 3.1 4.1 3.5 6.1 5.8 ] ; = [ 4 4.2 4.8 4.5 6.2 6.3 ] ; = [ 5 4.8 5.2 5.2 7.2 7.4 ] ; = [ 6 5.7 5.4 5.5 7.7 7.7 ] ; = [ 7 5.9 6.1 6.5 7.9 8.0 ] ; = [ 8 6.2 6.5 6.9 8.2 8.3 ] ; = [ 9 6.4 6.7 7.4 8.2 8.4 ] ; = [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);

Matlab: Ferramenta de simulao computacional e clculo numrico

65

2.4

Interpolao a ajuste de curvas


>>

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, (dimetro). neste caso o tempo e a capacidade da torneira

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:
Inte rp ola cao da altu ra a g ua 7 6 5 4 3
Interpola o cb ic a

2 1 0 -1 0 2

Interpola o lin ear

4 6 T em p o (m inu tos)

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.

Matlab: Ferramenta de simulao computacional e clculo numrico

66

2.4

Interpolao a ajuste de curvas

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 O Matlab dispe da funo polyfit que permite conjunto de pontos por uma recta utilizando o quadrticos. Considerando novamente o problema conhece-se o seguinte conjunto de dados:
>> >>

aproximar um dado mtodo dos mnimos do tanque de gua,

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')

Matlab: Ferramenta de simulao computacional e clculo numrico

67

2.4

Interpolao a ajuste de curvas


A proxim a ca o d a a ltu ra ag u a 8 7 6 5 4 3 2 1 0 0 2 4 6 T em p o (m inu tos) 8 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
>>

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 segunda, terceira, quarta e quinta ordem. Segunda ordem: n=2
>> >>

para

polinmios

de

coef = polyfit(t,y,2); coef = [ -0.0712 1.3785 -0.2364 ]

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

Matlab: Ferramenta de simulao computacional e clculo numrico

68

2.4

Interpolao a ajuste de curvas


A proxim a ca o d a a ltu ra ag u a 7 6 5 4 3 2 1 0 -1 0 2 4 6 T em p o (m inu tos) 8 10

Figura 2.10 - Aproximao de segunda ordem

Terceira ordem: n=3


>> >>

coef = polyfit(t,y,3); coef = [ -0.0022 -0.0386 f(x) = -0.0022 x3


7 6 5 4 3 2 1 0 -1 0 2 4 6 T em p o (m inu tos) 8 10

1.2540 -0.1580 ]

- 0.0386 x2 + 1.2540 x -0.1580

A proxim a ca o d a a ltu ra ag u a

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 ] + 0.9918 x -0.0825 69

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

Matlab: Ferramenta de simulao computacional e clculo numrico

2.4

Interpolao a ajuste de curvas


7 6 5 4 3 2 1 0 -1 0 2 4 6 T e m p o (m in u to s ) 8 10 A p r o x im a c a o d a a ltu ra a g u a

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


7 6 5 4 3 2 1 0 -1 0 2 4 6 T e m p o (m in u to s ) 8 10 A p r o x im a c a o d a a ltu ra a g u a

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.

Matlab: Ferramenta de simulao computacional e clculo numrico

70

2.4

Interpolao a ajuste de curvas

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 quad find Clculo das adjacentes diferenas entre dois valores

Calcula o integral sobre uma curva (Mtodo de Simpson) ndice dos valores no nulos de um vector

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 Simpson): 1. Kap f(xn) ) 2. Kap
2)

diz

respeito

regra

trapezoidal

segunda

de

b - a ( f(xo) + 2 f(x1) + 2 f(x2) + 2n

. . . + 2 f(xn-1) +

h = 3 (

f(xo) + 4 f(x1) + 2 f(x2) + 4 f(x3) + . . . + 2 f(xn-

+ 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. Matlab: Ferramenta de simulao computacional e clculo numrico 71

2.5

Integrao numrica e diferenciao

Funes pr definidas Considere-se por exemplo terica,

seguinte

funo,

referida

na

parte

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

Os parmetros so: sqrt especifica o nome da funo, 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 ]

Matlab: Ferramenta de simulao computacional e clculo numrico

72

2.5

Integrao numrica e diferenciao


25 20 15 10 5 0 -5 -1

Figura 2.15 - Exemplo de uma funo

Pretende-se calcular a rea abaixo da figura no intervalo dada pela rea da figura abaixo
25 20 15 10 5 0 -5 -1

[1 .. 4],

Figura 2.16 - Integral de uma funo

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 73

Matlab: Ferramenta de simulao computacional e clculo numrico

2.5

Integrao numrica e diferenciao

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) Graficamente
600 400 200
f(x)

= x5 - 3 x4 - 11 x3 + 27 x2 + 10 x -24

0 -200 -400 -600 -4

-3

-2

-1

Figura 2.17 - Exemplo de uma funo

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)

Matlab: Ferramenta de simulao computacional e clculo numrico

74

2.5

Integrao numrica e diferenciao


600 400 dy 200 0 -200 -400 -600 -4 y
-2.31 1.53

-0.17

3.35

-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 = 0 - no houve variao de sinal - a derivada nula num (ou nos dois) dos pontos

< 0 - houve uma variao de sinal


3. Os valores <0 permitem portanto identificar pontos crticos

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 Matlab: Ferramenta de simulao computacional e clculo numrico 75

2.5

Integrao numrica e diferenciao


>> >> >> >>

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 ode45 Mtodo de Runge-Kutta de segunda e terceira ordem 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. 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
Entradas

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

derivada - nome do ficheiro *.m onde deve ser definida equao diferencial incio - ponto inicial a partir do qual se calcula a soluo fim - ponto final para o qual se calcula a soluo Matlab: Ferramenta de simulao computacional e clculo numrico

76

2.6

Equaes diferenciais de primeira ordem y0 - 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 x2 + 2 x + yo sendo y0 a chamada condio inicial, isto y(0)=f( x(0) ). y(x) = 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)

Em Matlab

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 Runge-Kutta) e o valor analtico exacto (ya) calculado

usando a soluo y(x) =


>>

x2 + 2 x + 1

ya = x.^2 + 2*x + 1;

Matlab: Ferramenta de simulao computacional e clculo numrico

77

2.6

Equaes diferenciais de primeira ordem


9 8 7 6 y 5 4 3 2 1 0 0 .5 1 x 1 .5 2 E q u a c a o D ife re n c ia l

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= Usando o Matlab procede-se Constri-se uma funo
function dy=deriva(x,y)

4y + e2x se referiu no exemplo anterior.

como

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 %-y(0) = 3

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

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

Matlab: Ferramenta de simulao computacional e clculo numrico

78

2.6

Equaes diferenciais de primeira ordem


E qu a cao D ife re ncia l 80 70 60 50 y 40 30 20 10 0 0 0 .2 0 .4 x 0 .6 0 .8 1

Figura 2.20 - Soluo analtica / numrica de uma equao diferencial

Matlab: Ferramenta de simulao computacional e clculo numrico

79