Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Vol2 Matlab PDF
Apostila Vol2 Matlab PDF
Aplicao do Matlab
Resoluo de Problemas
Nesta parte aborda-se o uso do Matlab ao estudo de polinmios. A saber referem-se as seguinte
funes do Matlab:
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.
50
2.1 Estudo de polinmios
f(x) = x2 + x - 6
definido como,
Mais exemplos
f(x) = x2 6
f(x) = x3 - x
>> polinomio = [ 1 0 -1 0 ]
f(x) = x4 - x3 - 2 x2 + 3
>> polinomio = [ 1 -1 -2 0 3 ]
f(x) = x4 - 3x3 - 2 x2 + 3
>> x = 4;
>> 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;
y = polyval( polinomio, x)
>> x = 4
>> pol = [ 1 -3 -2 0 3 ]
>> f4 = 35.0
>> w = 0:1:10;
>> f = [ 1 0 -3 -1 2 ]
>> g = [ 0 4 -2 5 -16 ]
>> s = f + g
>> s = [ 1 4 -5 4 -14 ]
>> f = [ 1 0 -3 -1 2 ]
>> s = 3*f
>> s = [ 3 0 -9 -3 6 ]
Portanto s(x) = 3 x4 - 9 x2 - 3 x + 6
A multiplicao de dois polinmios conseguida usando a funo conv. Por exemplo pretende-
se multiplicar os polinmios f(x) e g(x)
f(x) = x2 - x + 2 g(x) = 5 x - 16
>> f = [ 1 -1 2 ]
>> g = [ 5 -16 ]
>> s = conv( f, g)
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
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
f(x) = x2 + x 6
>> f = [ 1 1 -6 ]
>> r = roots(f)
>> r= -3
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
>> f = [ 1 1 -6 ]
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.
Considere-se a funo
1 1
y =f(x) = 2 + 2 -1
(x - 1) + 0.1 (x - 2) + 0.05
Pretende-se determinar o seu mnimo e determinar a seus zeros, isto , os pontos x* tais que
y(x*)=0.
"
function y = funcao1(x)
end
>> x=-2:0.1:5;
>> y=funcao1(x);
>> plot(x,y);
>> grid
20
15
10
-5
-2 -1 0 1 2 3 4 5
Mnimos
Para determinar de uma funo definida como acima se explicou, existe a funo fmin
>> min=fmin(funcao,xini,xfin)
>> min1=fmin(funcao1,-2,5)
>> ymin2=funcao1(min2)
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)
Na figura que se segue mostra-se os resultados obtidos nos dois exemplos anteriores:
mnimos e zeros.
20
15
10
-5
-2 -1 0 1 2 3 4 5
!\ Diviso esquerda
!| Diviso direita
! inv(A) Inversa da matriz A
! rank(A) Caracterstica de uma matriz
3 2 -1 x 10
-1 3 2 y = 5
1 -1 -1 z -1
AX=B
Existem duas formas de solucionar o problema
Diviso esquerda
>> A = [ 3, 2, -1; -1, 3, 2; 1, -1, -1]];
>> X = A\B
Inversa
>> A = [ 3, 2, -1; -1, 3, 2; 1, -1, -1]];
>> X = inv(A)*B
>> X = B/A
2.3.3 - Exemplos
x + 2y - z =1
x - 2y + z =2
x + y - z = -1
Soluo: (x,y,z) = (1.5, 2, 4.5 )
x + 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
x +y + z = 10
-x - y -z =5
x + 2y - z = -1
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).
x + 2y + z =1
2x -+3 y - z =2
2x - 2y - z =5
2x - y +z =1
Soluo: (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.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.
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
E voluc ao da altu ra d a a gu a
7
y (m ) 3
0
0 2 4 6 8 10
T e m p o (m in uto s)
In te rp ola ca o d a a ltu ra ag u a
7
0
0 2 4 6 8 10
T em po (m in u to s)
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;
>> 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;
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 0 10 10
1 0.7 10.6 10.7
2 2.4 10.9 10.4
3 3.1 11.1 11.1
4 4.2 11.7 12.2
12
O - tem peratura na bas e
10
* - tem peratura no topo
8
6
ltura
4
0
0 2 4 6 8 10
T em po (m in u to s)
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);
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
Tabela 2.3 - Valores da altura em funo do dimetro da torneira
8 d4
d3
7 d2
d1
6
0
0 2 4 6 8 10
M in u to s
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( 2,:)
= [ 0 1.0 1.1 1.2 1.3 1.4 ] ;
= [ 0 0 0 0 0 0 ] ;
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:
3
In te rp olao c bica
2
In te rp olao linear
-1
0 2 4 6 8 10
T em po (m in u to s)
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 6.4 6.4 ];
>> y1 =3.6457
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.
>> y = [0 0.7 2.4 3.1 4.2 4.8 5.7 5.9 6.2 6.4
6.4 ];
>> plot(t,yap,t,y,'o')
A p ro xim ac ao da altu ra a gu a
8
0
0 2 4 6 8 10
T em po (m in u to s)
Aproximao Polinomial
Usando a funo polyfit possvel aproximar o conjunto de pontos por um polinmio de
qualquer ordem. A sintaxe
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.
A p ro xim ac ao da altu ra a gu a
7
-1
0 2 4 6 8 10
T em po (m in u to s)
-1
0 2 4 6 8 10
T em po (m in u to s)
A p ro xim a c a o d a a ltu ra a g u a
7
-1
0 2 4 6 8 10
T e m p o (m in u to s )
-1
0 2 4 6 8 10
T e m p o (m in u to s )
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
>> y1 = 3.7349
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) )
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= x
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
0
0 1 2 3 4 5
25
20
15
10
-5
-1 0 1 2 3 4 5
Pretende-se calcular a rea abaixo da figura no intervalo [1 .. 4], dada pela rea da figura
abaixo
25
20
15
10
-5
-1 0 1 2 3 4 5
"
function y = funcao(x)
end
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)
0
-200
-400
-600
-4 -3 -2 -1 0 1 2 3 4
>> 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
600
400
dy
200
y
0
-2.31 -0.17 1.53 3.35
-200
-400
-600
-4 -3 -2 -1 0 1 2 3 4
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.
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
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);
Os pontos crticos obtidos podem ser confirmados pela observao da figura anterior.
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)
Sadas
x - coordenadas
y - valores correspondente para y=f(x)
Entradas
derivada - nome do ficheiro *.m onde deve ser definida a equao diferencial
incio - ponto inicial a partir do qual se calcula a soluo
fim - ponto final para o qual se calcula a soluo
y0 - condio inicial para a y=f(xo)
2.6.2 - Exemplo 1
Considere-se a seguinte equao diferencial
y= 2x + 2
"
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;
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
Matlab: Ferramenta de simulao computacional e clculo numrico 77
2.6 Equaes diferenciais de primeira ordem
y(x) = x2 + 2 x + 1
E q u a c a o D ife re n c ia l
9
5
y
4
1
0 0 .5 1 1 .5 2
x
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);
>>[x,y]=ode23('deriva',0,1,xo);
70
60
50
40
y
30
20
10
0
0 0.2 0 .4 0 .6 0.8 1
x