Sie sind auf Seite 1von 30
2. Aplicagao do Matlab a Resolugao de Problemas Neste capitulo mostram-se as potencialidades do Matlab para resolver alguns problemas concretos. Destacam-se sobretudo as suas capacidades de calculo numérico gréficos. 2.1, Estudo de Polinémios Nesta parte aborda-se o uso do Matlab ao estudo de polinémios. A saber referem-se as seguinte fungdes do Matlab: * conv Produto de dois polindmios * decony Divisao de dois polinémios * polyval Calcula 0 valor de um polinémio y=f(x) dado o valor de x * roots Raizes de um polinémio * poly Calcula um polinémio dadas as suas raizes * polyder Calcula a derivada de um polinémio Na introdugdo tedrica referiram-se como aspectos interessantes sobre este assunto algumas operagdes polinomiais, determinagao de raizes e céleulo de polinémios conhecidas as suas raizes Aborda-se agora como 0 uso do Matlab pode ser itil nestes casos, 2.1.1 Definigdo de um polinémio Um polinémio é definido em Matlab a custa de um vector, cujos valores so os coeficientes do polinémio ordenado por ordem decrescente das suas poténcias. Por exemplo o polinémio 50 2.1 Estudo de polinomios 2 fix) = x2 +x-6 é definido como, SP pelinenio = (1 1-6) Mais exemplos -6 fx) >> polinomio = [ 1 0 -6] fx) = Jb >> polinomio =[ 10-10] fix) = -2x2 43 fh >> polinomio =[ 1-1 -203] 2.1.2 Calculo de valores de polinémios Existem duas formas de calcular 0 valor de um polinémio: ‘escrevendo’ directamente 0 polinémio ou usando a fungao polyval. Da primeira forma procede-se como se indica. Seja 0 polinémio fix) = valor de (x4) pode-se calcular como J >> x = 4; b> £4 = x°d - 3x3 - 24.2 +S >> £4 = 35.0 Pode-se calcular de uma s6 vez 0 valor para um conjunto de valores (vector neste caso). Matlab: Ferramenta de simulagao computacional e calculo numérico 51 2.1 Estudo de polinomios 0:14:10; fs Pe b> £ = w.0d - 3*w°3 - 24w.42 + 3 Usando a fungo polyval Ly [Y= Polat (polinenio, & possivel calcular 0 valor de polinémio (pol) no ponto x. Para exemplo em questo f Pe >> pol = [1 -3 -203] >> £4 polyval( pol, x) b> £4 = 35.0 Jf >> w = 0:21:10; >> £ = polyval( pol, w) Portanto quando x é um escalar polyval devolve um escalar, quando w & um vector devolve um vector. 1.1.3 - Operagées aritméticas A adigdo consiste em somar simplesmente dois vectores, Por exemplo pretende-se somar os dois seguintes vectores 25 x-16 fx) x42) g(@x)=4x3 -2x A sua soma s(x) = f(x) + g(x) & calculada como se indica, & FF [1 0-3-1 2] b> g=[0 4-2 5-16] b> s=ftg b> s=[1 4-5 4-14] © polinémio calculado € s(x)= x4+4x4-5x2 44x -14 Matlab: Ferramenta de simulagao computacional e calculo numérico 52 2.1 Estudo de polinomios Multiplicagao por um escalar A multiplicasdo de um polinémio por um escalar obtém-se simplesmente pela multiplicagdo de um vector (que define o polinémio) por um escalar. Seja o polinémio s(x) ~ 3*£(x), em que f(x) é © polinémio definido acima entéo, L FF p> s = Ste [1 0-3 -1 2] [3 0-9 -3 6] Portanto s(x) =3 x4-9x2-3x+6 Multiplicagao de dois polinémios A multiplicagao de dois polinémios é conseguida usando a fun se multiplicar os polinémios f{x) e g(x) ‘io conv. Por exemplo pretende- -x+2 g(x)=5x-16 \ Preta 21 b> g=[5 -16) b> s = conv( £, ) b> s=[5 -17 -6 -32 | Seria o mesmo que s(x)=$ x Divisao de dois Polinémios A divisiio de dois polinémios é conseguida em Matlab usando a fungao decony. Para dividir os polinémios fix) =x?-x +2 g(x) =5x-16 faz-se Jb >> [4,x] = deconv(£,g) [0.20 0.44) b> [0.0 0.0 9.04] A fungdo deconv calcula 0 quociente (q) ¢ 0 resto (r) da divisdo dos polinémios. Neste caso, Matlab: Ferramenta de simulagao computacional e calculo numérico 53 2.1 Estudo de polinomios g(x) =0.2x+0.44 r=9.04 Note-se que € valida a relagdo A(X) = q(x) * g(x) +r x2 -x+2 =(0.2x+0.44) (5x - 16) +9.04 1.1.4 - Raizes de um Polinémio Existe frequentemente a nece: idade de calcular as raizes de uma polinémio. Recorrendo ao Matlab é facil realizar esta tarefa, mesmo que o polinémio seja de ordem elevada. A fungio roots 6 para esse fim utilizada. Considere-se, por exemplo, o seguinte polinémio de segunda ordem. 2 fix) =x? +x-6 és b> £=[1 1-6] b> x = roots (£) Existem p 3. Outro exemplo, agora com raizes complexas, flee) = x7 - 2x +5 és D> f£=[1 -25] b> x = roots (£) >> 1.0000 + 2.0000 5 1.0000 - 2.0000 5 Existem portanto duas raizes complexas, x=1.0 + 2.0 ie x= 1.0 = 2.0 Especificagdo de um Polinémio conhecendo os suas raizes E possivel em Matlab determinar automaticamente um polinémio que tem determinadas r 70s conhecidas a priori. A fungiio que o permite é a poly. Por exemplo sabe-se que as raizes de um polinémio sio x=-3 e x-2. E possivel determinar um polinémio que tem essas raizes fazendo, Matlab: Ferramenta de simulagao computacional e calculo numérico 54 2.1 Estudo de polinomios v * 4 poly ([-3 2]) Jb Py " [1 1 -6] Por outras palavras o polinémio resultando & fix) =x? +x-6 Mais um exemplo. As raizes de um polinémio sio -2, 0, 3 ¢ -3+2 i, portanto trés raizes reais ¢ duas complexas. Bis como se pode calcular um polinémio que tena tais raizes. Qi Pries=02 0 3 32a 32H] ¥ ” 0 poly ([ raizes ]) v ry 0 poly[1 5 1 -49 -78 0] Sera entio o polinomio f(x) =x> +5 x44 x3 - 49 x2 -78 x 2.2 - Estudo de Fungées Na secgio anterior estudou-se um caso particular de fungdes, os polinémios. Nesta abordam-se os problemas de cailculo de minimos ¢ raizes de fungdes genéricas, © Matlab distingue dois casos: fungGes de uma varidvel e fungdes de varias varidveis, Estudam- se as seguintes as fungdes: + fmin Minimo de uma fungao de uma varidvel + fzero Zeros de uma fungao de uma variével + fmins Minimo de uma fungao de varias variaveis Considere-se a fungao ata (x-1)?+0.1 > (x-2)?+0.05 y =Ax) Pretende-se determinar 0 seu minimo e determinar a seus zeros, isto é, os pontos x* tais que ¥(X")=0, Matlab: Ferramenta de simulagao computacional e calculo numérico 55 2.2 Estudo de fungdes Usando um ficheiro ASCII, comega por se definir a fungao em questéo, por exemplo com o nome de funcaot.m function y = funcaol (x) y= i/( Gl)? + 0.1) + 1 (2) 2 + 00 end Pode-se depois visualiza-la na gama xe|-2..5]. Para isso faz-se eee >> y=Euncaol (x); plot (x,y); >> grid 29) Figura 2.1 «Fungio de uma variével Minimos. Para determinar de uma fungao definida como acima se explicou, existe a fung&o fmin és >> min=fmin(‘funcao’ ,xini,xfin) E assim possivel determinar 0 minimo da fungdo ‘funcao.m' no intervalo compreendi xe [xini xfin] Considerando os dois seguintes intervalos: [ -2, 5] e [ 1, 2] faz-se ido entre \ Pr sistsinin (funcact-2,5) >> min2=fmin(*funcaol’, 1,2) Matlab: Ferramenta de simulagao computacional e calculo numérico 56 2.2 Estudo de fungdes >> ymini=funcaol (mini) b> ymin2=funcaol (min2) As duas primeiras linhas permitem determinar os x minimos em questo e as duas Ultimas o valores de y correspondentes. Os valores obtidos foram xminl = -1.9999 yminl= -0.8278 xmin2 = 1.4629 ymin? = 5.1363 Zeros Para determinar os zeros de uma fungdo existe a fungao fzero & zero (‘funcao’ ,xini) © valor de xini permite especificar uma solucdo inicial para 0 zero da fungao, Recorrendo ao 5 Matlab caloula-se a solugdo nas proximidades de x-0.5 € J >> zerl=fzero('funcaol',0.5) >> zex2: zero ('funcaol',2.5) Os valores obtidos foram -0.0918 zer2 = 3.1098 zerl Na figura que se segue mostra-se os resultados obtidos nos dois exemplos anteriores: minimos e zeros. Matlab: Ferramenta de simulagao computacional e calculo numérico 57 2.2 Estudo de fungdes 20) Figura 2.2- Minimos e zeros de uma fungio 2.3 - Sistemas de Equagées Lineares Nesta parte estuda-se a aplicacao do Matlab a resolugao de sistemas de equagées lineares. A saber referem-se as seguinte fungées/caracteres especiais no Matlab \ Divisdo a esquerda +l Divisdo a direita invA) Inversa da matriz A + rank(A) Caracteristica de uma matriz 2.3.1 - Divisdo a Esquerda / Inversa Considere-se 0 seguinte sistema de equagées lineares 3x 42y -z = 10 5 3 2 +7fx] [10 413 2/y | 5 aaoadiz} la AX=B +3y 422 x -y -z Usando a notagao matricial: Existem duas formas de solucionar o problema Matlab: Ferramenta de simulagéo computacional e calculo numérico 58 2.4 Interpolagao a ajuste de curvas * Divisdo esquerda X = A\B © Inversa X=A'B Divisdo a esquerda és p> A= 3, 2, — [ 10, 5, -1]'; 3, 2; 1, -1, -i7 >> B b> X = A\B Inversa Jk >> A= 13, 2, - 3, 2; 1, -1, -1); b> B= [ 10, 5, -a)'; b> X = inv (A)*B Nos dois exemplos anteriores a solugdo sera Ae 2.3.2 - Diviso a Direita Se o sistema for definido como XA =B entéo a sua solugdo pode ser dada por uma divisdo a direita X= BIA Seja 0 seguinte exemplo 32-4 [x y z]] 1 3 2]-[10 5 1] 1-4-4 Divisdo a direita b> a=[3, 2, — >> B=[10, 5, -1]; b> x = B/A X=[x y Z]=[-3.0 15.0 34.0] 2.3.3 « Exemplos Matlab: Ferramenta de simulagao computacional e calculo numérico 59 2.4 Interpolagao a ajuste de curvas Eis alguns exemplos, e respectiva solugao, de sistemas de equagées lineares: x +2y-z =1 x - dy +z x ty -z Solugdo: (x,y,z) = (1.5, 2, 4.5) x +2y+z =1 a -y-z =5 Solugio: (x,y,z) = Nao & possivel determinar a solugdo uma vez que existe um numero de incégnitas (3) superior ao de equagées (2). Existe uma infinidade de solugdes x ty +2 210 “Ko sy -z =5 x +24 -z 24 Solugio: (Ky.Z (Nan, Nan, Nan ) Note-se que rank(A)=2, ou seja, nao existe um niimero de equagées linearmente independentes igual ao numero de incégnitas e portanto 0 sistema ndo tem solugao (a primeira linha é o simétrico da segunda). x +2 +z ax +By-z =2 2x - dy -z ox -y 4 Solugao: (x,y,z) Nao é possivel determinar a solugao uma vez que existe um ntimero de incégnitas (3) inferior ao de numero de equagées (4). Nao existe portanto solucao. 2.4 - Interpolagao a Ajuste de Curvas Nesta parte estuda-se a aplicagéo do Matlab a interpolagao e ajuste de curvas. A saber referem-se as seguinte fungdes no Matlab * polyfit Calcula um polinémio de ordem n usando a técnica dos| minimos quadrados * polyval Calcula o valor de um polinémio y=f(x) dado o valor de x + spline Determine uma interpolacao cubica Matlab: Ferramenta de simulagéo computacional e calculo numérico 60 2.4 Interpolagao a ajuste de curvas + tablt Determina uma interpolagao linear a uma dimensao + table2 Determina uma interpolagdo linear a duas dimensao 2.4.1 - Interpolagao Basicamente a interpolagao tem por objectivo estimar o valor entre dois pontos para os quais se conhecem os valores. Estudam-se duas formas de aproximagdo: a linear ¢ a cibica Exemplo Considere 0 tanque de agua que se mostra na figura seguinte. Figura 2.3- Tanque de agua Para estudar o sistema abriu-se a torneira e recolheram-se valores da dltura da dgua (y) durante os primeiros dez minutos, que se mostram na tabela seguinte Tempo (s) Altura (y) 0 07 24 31 42 48 7 5.9 62 6.4 10 64 Tabola 2.1 - Valores da evolugao da altura da agua Graficamente pode-se ver a variagdo da Altura da 4gua Matlab: Ferramenta de simulagéo computacional e calculo numérico 61 2.4 Interpolagao a ajuste de curvas Evolucae da altura éa aqua 2 4 5 3 0 Tempo (minutos) Figura 2.4 - Evolugdo da altura égua © objective da interpolagao é estimar o valor da altura da 4gua em pontos intermédios daqueles que se conhece o valor correcto da ditura da agua. Pretende-se, por exemplo, estimar o valor da altura da agua no instante 3.5 minutos. Na andlise tedrica do problema, estudada no capitulo 2, foi explicado como a interpolagao linear poderia ser usada para resolver o problema, Porque a interpolagao é¢ linear aproxima-se esse valor por uma fungdo linear, ou seja, uma recta. Assim 6 facil de entender graficamente 0 resultado da interpolacao de todos os pontos: rectas que unem cada um dos pontos adjacentes, como se mostra na figura seguinte: Interpotacao da altura agua ura da égua Matlab, além da interpolacdo linear, permite solucionar tal problema recorrendo a um método mais preciso, a ciibica, Mais tarde aborda-se novamente este tiltimo método. Matlab: Ferramenta de simulagéo computacional e calculo numérico 62 2.4 Interpolagao a ajuste de curvas Interpotagao Linear Comega-se por representar os dados segundo uma matriz em que a primeira linha é constituida pelos minutos (t) e a segunda pelos valores da dltura da agua (y) de vectores: ‘A fungao table? permite interpolar a altura da agua num valor desejado. J [>> y=tablel( dados, x ) ‘Como argumentos de entrada a tabela de dados e o valor de x aa interpolar, como var saida y=f(x). Neste caso particular pretende-se o valor no instante 3.5, entao oh ridvel de Para obter a interpolagéo nao para um ponto (escalar) mas para um conjunto de pontos (vector) procede-se da mesma forma’ Ay PP 00-480; >> y=tablel( dados, x ) Exemplo 2 No exemplo anterior os dados sao constituides por duas colunas: 0 tempo e a dltura da agua. ‘Suponha-se agora que é adicionalmente sao recolhidos mais dois dados relativos ao tanque de gua, a temperatura da agua na base e nivel superior do tanque. A tabela seguinte contém esses valores: Tempo (s) | Aluragy) | Temp.base | Tomp. Sup. 0 0 70 70 41 oF 70.6 7 2 2a 10.9 "10.4 3 31 1A 11 4 a2 a7 122 Matlab: Ferramenta de simulagao computacional e calculo numérico 63 2.4 Interpolagao a ajuste de curvas a8 TT 28 BT. 115 12.7 3g) TZ 12.9 62 116 12.6 6a Tht 12.7 ea Tht 12.7 ‘Tabola 2.2 - Valores da altura e temperatura da égua Evolucae da altura e tomperaturas da agua Tempo (minutos) Figura 2.6 - Evolugae da altura e temperaturas da 4gua ‘Comega por se definir 0 conjunto de dados, notando que existem agora quatro colunas tenpl=[10 10 ‘temp2=[10 10. dados (=, 1) dados( dados( dados (4) Para interpolar valores num dado instante usa-se novamente a fungdo tablet b> yi = tablei (dados,3.5); b> yl =[ 3.65 11.40 11.65] ou seja 840 interpolados os valores para a ditura da agua e temperaturas na base e topo. Matlab: Ferramenta de simulagéo computacional e calculo numérico 2.4 Interpolagao a ajuste de curvas Interpolagao a duas dimensées Novamente para o exemplo do tanque de niveis, foram recolhidos valores para a altura do nivel da agua considerando varidvel o diémetro da torneira (de 1 a 1.4 centimetros). resultados mostram-se na tabela e figura seguintes ‘Tempo (s) 40 14 12 13 0 0. o 0 a7, 40 35) 37, 24) 42 24. 52, 34 a4 35) 6.1 42, 48 45 62, 48 52. 52. 72, 7, BA, 55, 77. 59) 6.1 65, 72) 62, 65, 6.9) 82, 4) 67, 74. 82. 64) 68. 75, 8.1 ‘Tabola 2.3 - Valores da altura em fungio do dlametro da torneira Evolucao da allura da agua | Diamar lorneira 0 2 ¢ 3 3 70 Minatos Figura 2.7 - Evolugio da altura em fungi do didmetro da torneira Esses Com este conjunto de dados pretende-se agora conhecer o valor da altura da dgua num instante qualquer, tendo em atengao também o diametro da torneira. Para esse efeito existe a fungdo table2, Para comegar constréi-se uma matriz de dados em que cada linha contém os dados relativos a cada instante: dados( 1,:) = [0 1.0 21.3141) dados( 2/1) = [0 o 0 0 1 dados( 3,:) =[10.7 4.03.3 3.81% Matlab: Ferramenta de simulagéo computacional e calculo numérico 65 2.4 Interpolagao a ajuste de curvas zl 12 2. ) =133.1 4.13.5 615.813 dados( 6/:) =[4 4.2 4.84.5 6.263]; dados ( [5 4.8 5.25.27.2 7.417 dados( @/:) = [ 6 5.7 5.4 5.5 a7 dados( 9/1) = [7 5.9 6.1 6.5 ol: dados(10,:) =[ 8 6.2 6.5 6.98.2 8.315 dados(11,:) = [9 6.4 6.7 7.4 8.2 8.413 dados(12,:) = [10 6.4 6.87.5 8.1 8.313 Note-se que os dados sao organizados por linhas e nao por colunas, como no anterior, Para interpolar o valor da agua no instante 3.5 e para um diametro 1.25 faz-se fh >> ¥ table2( dados, 3.5, 1.25) >> y = 5.0750 exemplo Pode-se entender este processo de interpolagéo como uma interpolaco a duas dimensées, isto é, 0 valor da varidvel a determinar depende de duas variaveis, neste caso o tempo e a capacidade da torneira (diametro). Interpolagao Cubica Por vezes a aproximagao linear pode nao constituir uma solug&o satisfatéria. O Matlab implementa um outro tipo de interpolago, em que cada curva entre dois pontos adjacentes consiste num polinémio de terceira ordem (dai a designacao de interpolacdo clibica). A fungao que permite tal é a spline. Retomando o exemplo da dltura da agua dado no inicio 0 aspecto geral deste ultimo tipo de aproximago, comparada com a linear seria: Matlab: Ferramenta de simulagao computacional e calculo numérico 66 2.4 Interpolagao a ajuste de curvas Inierpolacao da altura agua o 2 4 6 3 70 Tempo (minutos) Figura 2.8 -Interpolagio linear / cibica Admitindo que se quer, tal como anteriormente, estimar o valor da dltura no instante 3.5. Usando a fungao spline tem-se dy Pere & b> y = (00.72.43.14.24.85.75.962 646.4 J; 07 >> yl = spline( t, y, 3.5) >> yl =3.6457 Note-se que nao é necessario definir uma matriz de dados como o era no uso da table1. Sao usados directamente os valores de t¢ y, 2.4.2 - Ajuste de Curvas Assume-se agora que se dispde de um conjunto de dados, por exemplo recolhidos do processo dos tanque de agua, e que se pretende determinar uma fungao que aproxime os dados reais existentes. Na andlise tedrica do problema foram apresentados métodos que utiiizam regressées lineares para essa aproximagao, 0 mesmo 6 dizer, usam rectas. Foi introduzido 0 método dos minimos quadréticos como aquele que de entre todas as rectas possiveis determina a que garante o menor desvio do quadrado das disténcias. Foram depois definidos métodos de regressao polinomial, isto 6, a aproximagao ¢ feita nao por um polinémio de primeira ordem (recta), mas por um polinémio de qualquer ordem. Aproximagao linear: Método dos Minimos Quadraticos Matlab: Ferramenta de simulagéo computacional e calculo numérico 67 2.4 Interpolagao a ajuste de curvas © Matlab dispe da fungao polyfit que permite aproximar um dado conjunto de pontos por uma recta utilizando 0 método dos minimos quadrdticos. Considerando novamente o problema do tanque de gua, conhece-se o seguinte conjunto de dados: aN >> t = 01:10; p> y = [00.7 2.4 3.1 4.2 4.8 5.7 5.9 6.41; 6.2 6.4 A fungao polyfit permite obter os coeficiente do polinémio (dois, os coeficientes da rect & p> coef = polyfit(t,y,1); >> coef = [ 0.6664 0.8318 ] Ou seja a recta resultante 6 0.6664 x + 0.8318 Graficamente o resultado pode ser obtido como se segue Jb >> yap = coef (1) .*ttcoef (2) ; >> plot (t,yap,t,y,'o') Rproximacaa da altura agua Tempo (minutos) Figura 2.9 - Recta calculada pelos minimos quadriticos Aproximagao Polinomial Usando a fungao polyfit 6 possivel aproximar 0 conjunto de pontos por um polinémio de qualquer ordem. A sintaxe & Matlab: Ferramenta de simulagao computacional e calculo numérico 68 2.4 Interpolagao a ajuste de curvas é >> cost = polyfit(t,y/n) 7 Em que n é a ordem do polinémio. Note-se que a fungao é vélida para aproximagées lineares, sendo neste caso n= Para 0 mesmo exemplo apresenta-se a solucao para polinémios de segunda, terceira, quarta e quinta ordem Segunda ordem: n=2 J >> coat = polyfit(t,y,/2)7 >> cook = [-0.0712 1.3785 -0.2364 ] f(x) = -0.0712 x? + 1.3785 x -0.2364 Rproximacaa da altura agua o 2 4 é 3 70 Tempo (minutos) Figura 2.10 - Aproximacio de segunda ordem Terceira ordem: n=3 & >> cook = polyfit(t,y,3)7 >> coet [ -0.0022 -0.0386 1.2540 -0.1580 ] f(x) = -0.0022 x? - 0.0386 x? + 1.2540 x -0.1580 Matlab: Ferramenta de simulagao computacional e calculo numérico 69 2.4 Interpolagao a ajuste de curvas Rproximacaa da altura agua Quarta ordem: n=4 7 6 3 2 o “o 2 4 6 3 70 Tempo (minutos) Figura 2.11. - Aproximagio de terceira ordem b> coat = polyfit(t,y/4)7 >> coef = [ 0.0010 -0.0232 0.0925 0.9918 -0.0825 ] f(x) = 0.0010 x‘ - 0.0232 x° + 0.0925 x* + 0.9918 x -0.0825 Rproximacae da altura agua o 2 + 3 a 70 Tempe (minutes) Quinta ordem: n=5 Figura 2.12 - Aproximagio de quarta ord fh b> coet= polyfit (t,y,5); >> coet= [-0.0003 0.0075 -0.0791 0.2913 0.7506 -0 0517 | fox = 0,0003 x° + 0.0075x* - 0,0791 x + 0,2913 x? + 0.7506 x -0.0517 Matlab: Ferramenta de simulagéo computacional e calculo numérico 70 2.4 Interpolagao a ajuste de curvas Aproxinacae da aura agua 6 oe Tempo (minutos) Figura 2.13- Aproximagéo de quinta ordem Interpolagéo Usando a Fungao Calculada na Aproximagao A determinago de uma fungao que aproxime um conjunto de pontos pode ser usada para o calculo de valores intermédios, tal como a interpolagdo. Ora, uma vez calculado o polinémio que aproxima 0 conjunto de pontos inicial, é depois possivel interpolar o valor para um outro ponto qualquer recorrendo a fungao determinada. Por exemplo, pretende-se interpolar um valor para a altura da agua no instante 3.5. Uma possivel solugdo é usar esta timo aproximagao (quinta ordem) e calcular o valor da fungéo em 3.5, fazendo £ pe 0.0517 J -0.0003 0.0075 -0.0791 0.2913 0.7506 - >> yl = polyval(coef, 3.5) b> yl = 3.7349 2.5 - Integragao Numérica e Diferenciagao Nesta parte estuda-se a aplicagéo do Matlab a integragéo numérica e diferenciagao de fungdes, A saber referem-se as seguinte fungdes no Matlab iff Céilculo das diferengas entre dois valores adjacentes * quad Calcula o integral sobre uma curva (Método de Simpson) find Indice dos valores nao nulos de um vector Matlab: Ferramenta de simulagéo computacional e calculo numérico 1 2.5 Integracao numérica e diferenciagao 2.5.1 - Integragdo numérica Referiu-se no estudo tedrico do problema duas técnicas de calcular numericamente o integral de uma fungdo: a regra trapezoidal e a de Simpson. Na primeira é usando uma aproximagao linear para os valores da fungéo na segunda uma aproximagao quadratica. Em termos de calculo os métodos distinguem-se pela férmula que permite calcular o integral (a primeira diz respeito regra trapezoidal e a segunda a de Simpson): 1. Kop =23.((%,) $2 £0) +2 0%) + + 2f%q.4) + FG) 2. Kap = BC 0) + 4 fy) +2 fl) + 4 £4) + #2 0642) # 4064) + 0%) ) em que h é 0 passo de integragao. © Matlab implementa a regra de Simpson disponibilizando a fungéo quad para esse efeito. Fungées pré definidas Considere-se por exemplo a seguinte fungao, jé referida na parte teérica, yey x Pretende-se calcular o integral, o mesmo é dizer a area abaixo da fungo, entre dois valores positivos a e b (b>a). Na figura seguinte mostra-se a fungao no intervalo [0, 5] Figura 2.14 -Fungio raiz quadrada Para calcular a solugo (valor da drea) para este problema faz-se iN >> area =quad('sqrt', 0, 5) 7.4535 Matlab: Ferramenta de simulagéo computacional e calculo numérico 72 2.5 Integracao numérica e diferenciagao Os parametros sao: * ‘sqrt’ especifica o nome da fungao, #0 - valor inicial +5 - valor final de integragao. Fungées definidas pelo utilizador Acontece que na pratica é desejado calcular 0 integral de fungdes definidas pelo proprio utilizador (no exemplo anterior a fungao existe disponivel no Matlab). Por considere a seguinte fungao y = f(x) = x* + 5*sin(x) - cos(2*x) + 1 A seguir mostra-se o seu grafico no intervalo [ -1.. 5] 25; 20] Figura 2.15 -Exemplo de uma fungao Pretende-se calcular a area abaixo da figura no intervalo [1 .. 4], dada pela area da figura abaixo Figura 2.16 -Integral de uma fungo Matlab: Ferramenta de simulagéo computacional e calculo numérico 73 2.5. Integraco numérica e diferenciagao Primeiro deve-se definir a fungao desejada criando uma fungao num ficheiro *.m (assunto abordado na parte de Matlab). O seguinte cédigo é entéo criado e armazenado num ficheiro de nome funcao.m function y = funcao (x) + s¥sin(x) ~ cos (2*x)+ ly end Para calcular 0 valor do integral basta executar 0 seguinte comando Jb >> area = quad('funcao',1,4) b> area = 29.9297 2.5.2 - Diferenciagado numérica Tal como a integragao 0 célculo da derivada de uma fungao pode ser facilmente implementada em Matlab. A seguir mostra-se como a fungdo diff pode ser utllizada nessa tarefa Derivada Seja a fungao definida pelo seguinte polinémio (rever parte teérica) x9- 3x8 11x + 27 x2 + 10 x -24 Graficamente 609) 409] 209] 200] 400] 6008 Figura 2.17 -Exemplo de uma fungao Matlab: Ferramenta de simulagao computacional e calculo numérico 74 2.5. Integraco numérica e diferenciagao Para caloular a sua derivada deve-se fazer b> x = -4:0.d: b> y = x.°5 - 3¥x.°4 - 11*x.°3 + 27*x.°2 + 10*x -2 b> dy = diff (y) ./di ft (x); Refira-se que a fungao diff nao implementa directamente 0 célculo da derivada mas sim do calcul das diferengas entre dois valores adjacentes de um vector. Dai 0 célculo da derivada ser a divisdo entre as diferengas de y e as diferengas de x dy y= ax Na figura seguinte mostra-se a fungao (y) e respectiva derivada (dy) Figura 2.18 - Fungo e respectiva derivada Pontos Criticos Sabe-se que o conhecimento da derivada permite identificar os valores maximos ou minimos de uma fungo. Viu-se também no capitulo 2 como a evolugao da derivada permite concluir da existéncia de pontos criticos. 1. Caloula-se a derivada de uma fungao em pontos adjacentes num dado intervalo 2. Se 0 produto da deriva num ponto x(k) pelo valor no ponto x(k+1) for: > -nao houve variagao de sinal 0 - a derivada é nula num (ou nos dois) dos pontos <0 - houve uma variagao de sinal 3, Os valores <0 permitem portanto identificar pontos criticos, Matlab: Ferramenta de simulagao computacional e calculo numérico 75 2.5. Integraco numérica e diferenciagao Em Matlab este raciocinio € possivel de implementar usando a fungao find . A fungao find permite determinar, para um determinado vector, quais os indices dos seus elementos nao nulos. Por exemplo A) PP indices = fina x > 10); devolve os indices do vector X cujos elementos sao superiores a 10. Assim os pontos criticos no exemplo em estudo sao obtidos como se indica a seguir & >> xa = x (2:length(x))7 >> produto = dy (1: length (dy) -1) . *dy (2: length (dy); b> periticos = xd( find (produto<0)) >> periticos =[-2.31 -0.17 1.53 3.35] Os pontos criticos obtidos podem ser confirmados pela observagao da figura anterior. 2.6 - Equagées diferenciais de primeira ordem Nesta parte estuda-se a aplicagao do Matlab a resolugao de equagées diferenciais. A saber referem-se as seguintes fungSes do Matlab + ode23 Método de Runge-Kutta de segunda e terceira ordem + ode4s Método de Runge-Kutta de terceira e quarta ordem 2.6.1 - Introdugao. Em Matlab existem duas fungées, ode23 e ode4S, capazes de calcular numericamente a solugao de uma equacao diferencial do tipo: Equagéo diferencial y/ (xy) Solugéo y=f(x) A primeira implementa 0 método de Runge-Kutta de segunda-terceira ordem e a segunda o método de Runge-Kutta de quarta-quinta ordem Matlab: Ferramenta de simulagao computacional e calculo numérico 76 2.6 Equagées diferenciais de primeira ordem Uma vez que as duas fungdes possuem o mesmo niimero de argumentos, explica-se apenas 0 funcionamento de uma delas. A outra é equivalente diferindo apenas no método implementado. A sintaxe da fungao ode23 é a seguinte vn [ x, y ] = ode23( ‘derivada’, inicio, fim, y0) Saides ox + coordenadas *y = valores correspondente para y=f(x) Entradas + ‘derivada’ - nome do ficheiro *.m onde deve ser definida a equagao diferencial inicio = ponto inicial a partir do qual se calcula a solugao fim + pont final para o qual se calcula a solugao *y0 ~ condigao inicial para a y=f(xo) 2.6.2 - Exemplo 1 Considere-se a seguinte equagao diferencial Sabe-se que analiticamente a solugao desta equagao & y(x) = x2+2x+yo sendo yO a chamada condigdo inicial, isto é y(0)=f{ x(0) ). Em Matlab este problema pode-se resolver da seguinte forma: 1. Define-se a fung&o derivada, construindo um ficheiro *m, por exemplo, de nome deriva.m com o contetido: function dy-derivaty) ay = 2+ 2. Uma vez definida a condigao inicial, por exemplo yO=1, € 0 intervalo desejado (0..2] faz-se fs >> yo= 1; >> [x,y]= ode23(‘deriva',0,2,yo); Na figura que se segue mostra-se o valor calculado usando a fungo ode23 (método de Runge- Kutta) e 0 valor analitico exacto (ya) calculado usando a solugao Matlab: Ferramenta de simulagao computacional e calculo numérico 7 2.6 Equagées diferenciais de primeira ordem & yx) = P+ 2K41 b> ya = x.*2 + 2*x + 1; Equacae Oierencial Figura 2.19 -Derivada analitca e calculada numericamente Note-se a proximidade das duas solugdes. Na verdade nao é possivel distingui-las graficamente. 2.6.3 - Exemplo 2 Considere-se agora a equagao diferencial Usando 0 Matlab procede-se como se referiu no exemplo anterior. Constréi-se uma fungao y= 4y+e% Function ay=deriva ley) ay = Sey + expos Define-se a condigdo inicial e usa-se a fungao ode23. és Sabe-se que anali >> x0=3; >>[x,y]=0de23 (‘deriva’,0,1,x0); ramente a solugéo é dada por y= f(x)= 3e*- e% Matlab: Ferramenta de simulagao computacional e calculo numérico 78 2.6 Equagées diferenciais de primeira ordem exp (3*x) -exp(2*x) 7 8---y(0) = 3 A seguir mostra-se um grafico comparativo das duas solugées: analitica e numérica Equacae Diferencial 80 10 60 40 20 20 Figura 2.20 -Solugde analitica / numérica de uma equagae diferencial Matlab: Ferramenta de simulagao computacional e calculo numérico 79

Das könnte Ihnen auch gefallen