Você está na página 1de 38

Curso de Introduo a Aplicao de Modelos Matemticos em Engenharia

INTRODUO
O engenheiro modela o sistema em estudo para compreender melhor a
realidade. Modela e faz simulaes para evitar erros e tentativas,
economizando na construo e tambm simula para melhorar a preciso do
sistema ou equipamento planejado.
Nesse contexto, para o estudante de engenharia que j cursou o bsico,
tem conhecimento adequado de clculo para avaliar modelos discretos e
contnuos. As solues das equaes com tcnicas analticas e numricas
esto disponveis em computador para analisar a equao, a soluo, as
condies iniciais e de contorno, fazer experimentos rpidos para atender
as questes que surgem. As solues com as condies propostas podem
ser
visualizadas em grficos 2D ou 3D que ajudam bastante na
compreenso da realidade simulada. A anlise de dados reais e a avaliao
da soluo tambm esto disponveis em tcnicas estatsticas no
computador para complementar as concluses. Com o estudo das solues
se prope uma interao com os problemas mais tpicos dos sistemas de
engenharia como a estabilidade, o estado estacionrio a vibrao, o stress.
Essa metodologia requer uma atualizao das tcnicas de soluo de
equaes diferenciais j estudadas, que devem ser realizada tambm
utilizando os recursos
computacionais e tem um
preo: aprender
suficientemente a utilizar o computador com o software adotado o Matlab. O
preo a pagar ser resgatado com juros, com certeza,
Matlab uma
ferramenta adotada universalmente para o trabalho do engenheiro e do
cientista.
Objetivos de treinar em MATLAB

Apresentar uma ferramenta computacional de alto desempenho, com


uma linguagem simples. E que usado por muitos profissionais ao
redor do mundo, principalmente na engenharia.
Usar funes e tcnicas de computao que sero requeridas no
estudo dos modelos

Carlos Costa Dantas


Curso de Engenharia de Energia
DEN/UFPE, novembro 2013

SUMRIO
I. Introduo
2. Computao com Matlab
2.1 Apresentao Tipo Manual
2
2.2 Apresentao Tcnica
10
2.3 Sistemas de Equaes lineares
13
2.4Estatstica
18
2.5 Nmeros Randmicos e Complexos
20
2.6 Clculo
25
o Polinmios
o Grficos de funes
o Interpolao
o Derivadas e integrais
o Equaes diferenciais
3. Erros de Computao
34

COMPUTAO COM MATLAB

2.1 APRESENTAO TIPO MANUAL


MATLAB um "software" interativo de alta performance voltado para o
clculo numrico. O MATLAB integra anlise numrica, clculo com
matrizes, processamento de sinais e construo de grficos em ambiente
fcil de usar onde problemas e solues so expressos somente como eles
so escritos matematicamente, ao contrrio da programao tradicional.
Programa 1
Compare as duas linguagens de programao
Matlab
D= [1 2 3 4]
Y= sin(D)

Fortran
REAL D(4), Y(4)
DO 100 I = 1,4
Y(I)=SIN(D(I))
100 CONTINUE
2

WRITE(6, ' (4F10.4) ') Y


Os dois retornam a resposta correta
Y= 0.8415 0.9093 0.1411 -0.7568
Voltaremos ao programa 1 depois de um primeiro contato com o Matlab.
Quando voc chama MATLAB para iniciar uma sesso, voc v o prompt
>>
Quando damos instrues para uma operao, ou solicitamos informaes,
pelo prompt, podemos dizer que estamos trabalhando na linha de
comando.
Podemos fazer operaes aritmticas simples na linha de comando, como:
>> (2+3.5^2 -4*7)/12
ans =
-1.1458
Podemos tambm atribuir variveis como
>> x = 2+3.5^2
ans =
14.2500
>> y = 4*7
ans =
28
>> z = (x-y)/12
ans =
-1.1458
Vetores e Matrizes
Vetores e matrizes so os elementos bsicos do ambiente MATLAB.
Aqui vamos tratar vetor como uma lista ordenada de nmeros, escrito
horizontalmente ou verticalmente, exemplo:
u= [ 2, 1.3, 2, -1, ]
onde u um vetor linha.

v=

[]
2
1.3
2
1

e v um vetor coluna. Em MATLAB podemos entrar com o vetor


diretamente no prompt
3

>> u=[2 1.3 sqrt(2) -1 pi];


Observe que foi usado espao para separar um elemento do outro , tambm
pode ser usada a virgula.
Para tornar u um vetor linha em vetor coluna, ou ao contrario, basta tomar
a transposta
>> v=u';
ou escrever diretamente
>> v=[2; 1.3; sqrt(2); -1; pi];
Observe que o ponto e vrgula esto separando linhas.
Deve considerar que em lgebra linear e no Matlab, vetor a se refere ao
vetor coluna e o transposto aT o vetor linha. Generalizando, um vetor
pode ser considerado uma matriz:

vetor linha: matriz(1xn)

vetor coluna: matriz(nx1)

Desta forma, escrever uma matriz similar ao que vimos com vetores,
exemplo:

[ ]
1 2 42
8 7 2 0
15 9

A=

>> A= [ 1 2 4 -2; 8 sqrt(7) 2 0; 1 5 pi 9];


para separar elementos de uma mesma linha utilizar espao ou vrgula,
para separar linhas distintas utilizar ponto e virgula.
Operaes entre Matrizes e entre vetores
Adio e subtrao sempre que as matrizes envolvidas tiverem as
mesmas dimenses
ex.: A(3x3)+B(3x3)
A=[2 3 5;1 6 9; 9 1 5]; B=[ 4 1 2; -7 -2 0; 9 1 -8];
>> A+B
ans =
6

-6

18

2 -3
Multiplicao deve obedecer a lgebra linear em relao as
dimenses das matrizes
4

ex.: A(3x2)*B(2x3)
>>A= [ 2 5; -3 6; 1 9]; B=[4 5 6; 8 1 2];
>> A*B
ans =
48 15

22

36 -9

-6

76 14

24

Operaes Pontuadas
Sejam A e B duas matrizes de mesmas dimenses
A.*B

Multiplica cada elemento de A pelo correspondente em B

ex.:>> A=[2 3 5;1 6 9; 9 1 5]; B=[ 4 1 2; -7 -2 0; 9 1 -8];


>> A.*B
A Exponencial
1. A^2 = A*A,
ex.: A=[2 3 5;1 6 9; 9 1 5];

52 29 62
89 48 104
64 38 79

2. A.^2
4 9
1 36
81 1

= A.*A
25
81
25

Em 1. Temos o produto de matrizes. Em 2. Temos o quadrado de cada


elemento, uma operao pontuada.
Produto escalar (vetores)
C = dot(A,B) retorna o produto escalar dos vetores A e B. A e B devem ser
vetores do mesmo comprimento. Quando A e B so ambos os vetores
coluna, dot( A, B ) o mesmo que A* B.
Produto vetorial (vetores)
C = CROSS (A, B ) retorna o produto cruzado dos vetores A e B. Isto , C = A
x B. A e B deve ser vetores de 3 elementos.
Voltando ao programa 1
5

>> D= [1 2 3 4]
>>Y= sin(D)
Nesse exemplo observamos que, foi criado um vetor D e foi chamada a
funo seno e o vetor D foi passado para a funo que retorna os valores
em Y. Podemos chamar outra funo plot(D, Y) passar para ela os valores de
D e Y, e a funo plot via fazer o grfico. O qual no ser muito elegante,
podemos ver porque, colocando plot(D,Y, o), vemos s os quatro pontos
iniciados por D = [ 1 2 3 4]. Podemos gerar um vetor com mais pontos, por
exemplo, D = 0:pi/20:2*pi e novamente chamar Y e depois plot, do mesmo
modo. Agora reconhecemos a funo seno com bastantes pontos e no
intervalo adequado entre zero e 2. Observamos que podemos criar vetores
de mais de um modo e chamar as mesmas funes. Matlab tem uma
coleo incrvel de funo que podem ser invocadas da tela de trabalho ou
em arquivos.
Programa 1
D=[1 2 3 4];
Y=sin(D);
plot(D,Y);
plot(D,y,'o')
Agora, reescreva o vetor D:
D=0:pi/20:2*pi;
Y=sin(D);
plot(D,Y,'o')
Com o ponto e vrgula o dado no vem para a tela, s aquele que for pedido.
Podemos saber a dimenso do vetor com size(D)e o comprimento length(D)
>>size(D)
ans=
1 41
>>length(D)
ans=
41
Cada funo tem sua sintaxe, conforme observamos e o help ajuda deve ser
consultado. Veremos adiante que podemos escrever os nossos programas
para funes e para invocar estas funes, e tambm veremos exemplos do
help.
Os vetores podem ser escritos x =[ 4.5 7.6 9.4]; e depois chamar x
=4.5000 7.6000 9.4000. Se escrevemos, x =[ 4.5; 7.6; 9.4]; com x =
4.5000
7.6000
9.4000
Os dois tm length3, mas, o primeiro tem size 1 3, e o segundo size 3 1,
como vetor linha e vetor coluna. J vimos que criamos o vetor D com
passos de pi/20, de 0 at 2, se escrevemos x = -2:2:2, vamos comear

com -2 e com passos de 2 at 2. Agora x=10:-1:1, teremos a mesma


resposta de x = [10 9 8 7 6 5 4 3 2 1]. Podemos criar vetores com a funo
x = linspace(-3,3, 50), e obtemos o vetor nos limites -3 e 3, com 50 passos
iguais.
Gravura Melancolia
Um bom exemplo para comear ser analisar as propriedades da matriz
retirada da gravura renascentista, Melancolia, do artista alemo e
matemtico amador Albrecht Drer
Essa matriz conhecida como mgica devido a algumas propriedades
particulares que veremos a seguir. Para entrar com a matriz de Drer:
>> A=[16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
O ano que o artista pintou este quando est no meio da ultima linha
Por que ela mgica?
Voc provavelmente lembra de que a qualidade mgica de um quadrado
mgico tem a ver com as vrias maneiras de somar os seus elementos.
Vamos verificar usando MATLAB
Para encontrar a soma dos elementos da primeira coluna
>>A(1,1) + A(2,1)+A(3,1)+A(4,1)
ans=
34
% quando voc no atribui uma varivel, o matlab usa a
varivel ans, abreviao de "answer".
outra maneira de calcular esta soma criar um vetor v = 1:4;
>> 1:4;
% pode ser usado pra gerar vetores rapidamente.
S1=sum(A(1:4,1)) %agora podemos somar todos os elementos da coluna
1
S1=
% usando o operador e encontramos a mesma resposta
34
S2=sum(A(:,1)) % voc tambm pode usar uma abreviao mais curta
S2=
% quando se trata de toda a coluna
34
S3=sum(A)
% se voc aplicar o comando sum para toda a matriz
S3=
% ir obter a soma de todas as colunas
34 34 34 34
Agora veremos interessantes propriedades da matriz
% para calcular a soma das linhas voc pode chamar a transposta de A
>> B= A'
% o operador (') d a transposta da matriz
>> sum(B)=
ans=
34 34 34 34

% assim, sum(B) ser a soma das linhas de A

tambm podemos usar o comando diag(A) para extrair a diagonal principal


da matriz
>> d=diag(A); % voc pode atribuir uma varivel ao comando
>>sum(d)
ans=
34
>>sum(diag(A)) % ou aplicar os dois comandos juntos
ans=
34
Voc tambm pode saber a soma da diagonal secundria, para isso usa o
comando fliplr, que faz apenas escrever a matriz da esquerda para direita
>> B=fliplr(A);
>>sum(diag(B))
ans=
34
>>sum(diag(fliplr(A)))
ans=
34
Curiosamente, o numero 34 tambm aparece em outros lugares, veja s:
>>eig(A)

% essa funo calcula os autovalores da matriz A

ans =
34.0000
8.0000
0.0000
-8.0000
>>svd(A)
ans =

% funo para decomposio em valores singulares


% retorna os valores singulares para A

34.0000
17.8885
4.4721
0.0000
%Voc pode ver o quadro Melancolia e tambm a matriz que nele %se
encontra ampliada, rodando o programa:
Programa 2
load durer
%whos
image(X)
colormap(map)
axis image
image(X)
8

axis image, axis of

Passar dados para o vetor. O vetor tambm recebe dados, programa


abaixo, verifique:
Programa 3
1 m=5;n=4*m+1;
2 x=linspace(0,1,n); a =x(1:m+1);
3 y=zeros(1,n);
4 y(1:m+1)= sin(2*pi*a);
5 y(2*m+1:-1:m+2)=y(1:m);
6 y(2*m+2:n)=-y(2:2*m+1);
Os vetores na linha 2: x e a - so independentes, na linha 3: y criado com
a funo zeros, y um vetor com n = 21 zeros, n = 4*m+1, j sabendo que
m =5.Na linha 4 y recebe 6 valores do seno de 2*a, os outros valores de y
continuam zero. Confirme rodando o programa e colocando % antes da
linha:
% 5 y(2*m+1:-1:m+2)=y(1:m);
% 6 y(2*m+2:n)=-y(2:2*m+1);
Agora, quando roda no l as linhas 5 e 6, pedindo y se pode comprovar o
valor da linha 4. Faa um experimento escreva: 4 y(1:m+1)= exp(2*pi*a), e
observe. Depois retire os % das linhas 5 e 6, reescreva a linha 4 como
estava no Exemplo 3, rode. Coloque plot(x,y, o), na linha 7 e observe os
valores de y.
Help
Para obter informaes sobre um determinado comando ou operao, basta
digitar help mais o nome do comando. Por exemplo, para obter informaes
sobre como usar os comandos de plot digite:
>> help plot
Teremos mais exemplos do help, adiante.
Arquivos Mfiles
Mfiles so formas muito convenientes e flexveis de coleta de seqncia de
comandos que podem ser longo ou tedioso para digitar uma e outra vez no
prompt. Mfiles podem ser salvos para ser utilizado em outro momento.
Existem dois tipos de mfiles: funo e script. Estes arquivos tm a extenso
m. Por exemplo, energia.m, para chamar: energia.

script so usados para coletar uma seqncia de comandos que


constituem um programa. Quando entramos com o nome melancolia
na linha de comando, o programa ir ser executado. Podem tambm
chamar uma ou mais funes.

function - so usados principalmente para escrever funes


numricas cuja expresso longa ou complicada e que queremos
guardar para uso futuro.

Exemplo de function e script.


Suponha que queremos calcular a funo

f ( x )=

x esin (x )
2
(1+ x )

no intervalo de 0 a

10;
podemos criar um arquivo function chamado func para a funo f(x)
Programa 4
function y = func(x); % entrada o valor de x
y = x*exp(-sin(x))/(1+x^2); % % sada a funo f(x)

Para salvar o Matlab j vai colocar func e salva func.m


O outro arquivo um script: chamafunc .m
x= 0:0.1:10;
z= func(x)
plot(x, z)
O Matlab vai reclamar:
Error using ==> mtimes
Inner matrix dimensions must agree.
Isso porque no arquivo func y = x*exp(-sin(x))/(1+x^2); no est
vetorizado. Pode ento escrever: y = x.*exp(-sin(x))./(1+x.^2);

Programao
O MATLAB tambm aceita argumentos lgicos e entrada de dados. Os loops
tambm fazem parte do ambiente MATLAB, porm para efeito prtico,
veremos que em muitos casos mais simples vetorizar o programa do que
entrar em um loop ou lao.
Exemplo de loop que pode ser vetorizado:
n = 21;
x = linspace(0,1,n);
y = zeros(1,n)
for k=1:n
y(k)= sin(2*pi*x(k));
end
Esse mesmo resultado pode ser obtido s com vetores
n = 21;
x = linspace(0,1,n);
10

y = sin(2*pi*x);
Agora, vamos ver um loop com comando lgico
Programa 5
%calcula os nmeros de Fibonacci
f=[1 1]; n=1;
while f(n)+f(n+1)<80
% comando while, com argumento lgico
f(n+2)= f(n) + f(n+1);
n=n+1;
end
f
plot(f); % grfico do crescimento da funo
Outros laos tambm podem ser criados com: for; if, else, switch e case

2.2 APRESENTAO TCNICA


A maioria dos computadores usa caracteres ASCII American Code for
Information Interchange, para armazenar texto bsico. O Matlab usa 128
caracteres, desses os primeiros 32 so sem controle de impresso como:
tab, backspace, e final de linha, e 95 so caracteres de impresso. Incluindo
espao, 10 dgitos, 26 letras minsculas, 26 maisculas e 32 sinais de
pontuao. Para visualizar:
Exemplo 4:
X=reshape(32:127,32,3);
Produz uma matriz: size(X) = 3 32
A funo char converte nmero em caractere.
c=char(X);
Os caracteres representando dgitos esto na primeira linha de c
d = char(48:57);
Apresenta 10- caractere string
d = 0123456789
String pode ser convertido no valor numrico
double(d)-0;
Escrevendo palavras
S = Exemplo de string
size(S)
k=Double(S)
Bit a sigla para Binary Digit, que em portugus significa dgito binrio, ou
seja, a menor unidade de informao que pode ser armazenada ou
transmitida, e geralmente usada na computao e teoria da informao.
Um bit pode assumir somente 2 valores: 0 ou 1
Byte (B)
11

1 Byte = 8 bits
Quilobyte (kB)
1kByte = 1024 Bytes (210) Bytes.
1 024 Byte = 8 192 Bits
Megabyte (MB)
1 024 kB
1 048 576 (220)Bytes
8 388 608 Bits
Aritmtica de ponto flutuante
Aritmtica de ponto flutuante envolve o conjunto de nmeros finitos com
preciso finita, que leva a arredondamento, underflow e overflow. O nvel
de arredondamento eps chamado as vezes de floating-point zero, mas, o
menor nmero no Matlab o realmin. Menor do que ele chamado
underflow. E o numero maior dado pelo realmax e tentativa de obter maior
leva a overflow, e o resultado apresentado como Inf. Escrevendo no
Matlab se observa:
eps
Realmin
Realmax
Os nmeros so apresentados, por exemplo, teclando (pi) em format short
com 5 algarismos por arredondamento e em format long com 16 algarismos.
A funo vpa especifica o nmero de algarismos assim:
vpa(pi, 25 )
=3.141592653589793238462643
A seqncia de arredondamento ocorre com um simples nmero
como
t = 0.1
Que no exato porque 0.1 expresso com a frao decimal 1/10
numa seria infinita
1/10= 1/2^4+ 1/2^5+ 1/2^6 + 1/2^7 + 1/2^8 + 1/2^9 + 1/2^10 +
1/2^11 +
Depois do primeiro termo a seqncia de coeficientes: 1,0,0,1 se repete
muitas vezes at o valor definido pela aritmtica do ponto flutuante.
Se pelo menos um dos elementos da matriz no inteiro exato, existem
vrias possibilidades de formatar a sada. O formato "default", chamado de
formato short, mostra aproximadamente 5 dgitos significativos ou usam
notao cientfica. Por exemplo, a expresso,
>> x = [4/3 1.2345e-6]
mostrada , para cada formato usado, da seguinte maneira:

12

format short
format short e
Format long
Format long e
Format hex
Format rat
Format bank
format +

1.3333 0.0000
1.3333e+000 1.2345e-006
1.33333333333333 0.000000123450000
1.333333333333333e+000 1.234500000000000e-006
3f5555555555555 3eb4b6231abfd271
4/3 1/810045
1.33 0.00
++

Com o formatos short e long, se o maior elemento da matriz maior que


1000 ou menor que 0.001, um fator de escala comum aplicado para que a
matriz completa seja mostrada. Por exemplo,
>> x = 1.e20*x
resultado da multiplicao ser mostrado na tela.
X=

l.0e+2
*
0
1.3333 0.0000

O formato + uma maneira compacta de mostrar matrizes de grandes


dimenses. Os smbolos "+", "-", e "espao em branco" so mostrados,
respectivamente para elementos positivos, elementos negativos e zeros.
EXERCCIOS 2.1 e 2.2
1.As operaes com vetores e matrizes utilizaram nmeros, mas, tambm
podem ser realizadas com caracteres simblicos. Tome o vetor do programa
1, D = [1 2 3 4]; e aplique v = sym(D), agora calcule o produto escalar,
compare com o numrico. Depois calcule o produto externo px = v*v; Faa
M = px, e calcule g = M*M. Compare estes clculos com valores numricos
e explique.
2.Com a matriz k =magic(4), obtenha a matriz simblica k = sym(k), refaa
os exemplos feitos com a matriz da Gravura Melancolia com nmeros.
3.Com a funo do Programa 4, utilize o comando inline:
f = inline('x*exp(-sin(x))/(1+x.^2)')
ezplot(f, 0,10), grfico para funo, o intervalo o mesmo . Faa o grfico
sem definir
o intervalo. Obtenha a mesma funo com sym e use
ezplot.
4. Analise o grfico do polinmio;
x=0.988:0.0001:1.012;
y = x.^7-7*x.^6+21*x.^5-35*x.^4+35*x.^3-21*x.^2+7*x-1;
plot(x,y);
Acha que o grfico de um polinmio tem este aspecto, ou deveria ser mais
suave? Escreva y = (x-1).^7; use o ezplot e compare. No grfico numrico
se observa erros de arredondamento, explique.

13

5. Escreva o programa seguinte:


tic
N=1000;
plot(eig(randn(N))/sqrt(N),'.');
axis([-1 1 -1 1 ])
axis equal
toc

Explique os comandos o que esta apresentado no grfico. Faa experimento


com N = 300, 500, 1000, 3000, observe o tempo de computao e escreva
como ele varia com N.
2.3 SISTEMAS DE EQUAES LINEARES
Dado um sistema linear geral , expresso na forma matricial Ab = y, uma das
trs possibilidades pode ocorrer: o sistema tem uma nica soluo, tem uma
infinidade de solues ou no tem soluo. Por outro lado, ao se procurar
resolver um sistema linear usando a funo "inverso esquerda" (b = A\y)
do MATLAB, obtemos uma resposta, mesmo no caso em que o sistema no
tem soluo. Para entender a resposta dada pelo MATLAB, precisamos
conhecer como o programa encontra tal soluo.
Inicialmente, vemos que na forma escalar o sistema linear:
A*b = y
2*b = 6 % com os valores de A e b
b = 6/2
O sistema tem soluo.
No caso representado pela forma matricial Ab = y, como num sistema de
equaes, Esse sistema s resolvido b = A-1y, se podemos inverter A.
Quando A no for uma matriz quadrada, o sistema ainda pode ser resolvido
pelo mtodo dos mnimos quadrados.
ATAb=ATy; % multiplicando os dois lados da equao por A T
b=(ATA)-1ATy ;

(1)

Podendo-se observar que (ATA)-1 pode ser invertida. O Matlab aplica o MMQ
com diversas funes, por exemplo, b = A\y; que vai calcular a expresso
(1).
Temos solues diversas para os diversos sistemas com o mesmo algoritmo,
cujas solues dependem de A. Para avaliar a soluo estimamos o erro
dado por:
e = Ab y;

(2)

Sendo Ab o valor calculado e y o valor experimental. Aqui em (2),


calculamos a distancia entre os dois vetores Ab e y, cuja mtrica dada
pela norma Euclidiana

e2

A bT y , a raiz quadrada do produto

escalar, no Matlab norm(e).

14

% neste exemplo vamos analisar trs matrizes de dimenses diferentes:


0.1x1 + 0.3x2 + 0.15x3 = 18.70
0.3x1 + 0.4x2 + 0.25x3 = 21.60
0.1x1 + 0.2x2 + o.15x3 = 20.70
0.27x1 + 0.18x2 + 0.34x3 = 23.43
0.14x1 + 0.23x2 + 0.41x3 = 25.09

(3)

Exemplo 1 Considere o sistema de equaes dado em (3), as trs primeiras


linhas, seria formado pela matriz A=[0.1 0.3 0.15;0.30 0.40 0.25;0.10 0.20
0.15], com o lado direito correspondente: y=[18.7 21.6 20.7]'; ento para
Ab = y, teremos A(3,3)*b(3,1) = y(3,1); a soluo encontrar b:
Programa 6
b = A\y ; calcula b
e=A*b-y; % calcula o erro, um vetor (3,1);
n1 = norm(e); um nmero a norma do vetor e.
plot(1:length(y),e, 'ro'); visualize o intervalo do erro, e sua distribuio que
deve ser normal e~N(0,1).
Exemplo 2. Agora Monte a matriz B tomando A do Exemplo 1:
B=[A;0.27 0.18 0.34]; e z=[y;23.43].
B(4,3) e z(4,1), e b ser (3,1)?
Programa 6a
b = A\z;; calcula b
e1 = A*b-y; % calcula o erro, um vetor qual a dimenso?;
n2 = norm(e); calcula a norma do vetor e1.
plot(1:length(y),e1, 'ro'); visualize o intervalo do erro, e sua distribuio que
deve ser normal.
Exemplo 3. Monte a matriz C tomando B do Exemplo 2:
C=[B;0.14 0.23 0.41]; e w = z[z; 25.09];
Escreva o programa e calcule o erro e a norma,e compare os valores com os
dos Exemplo 1 e do Exemplo 2. Faa o grfico comparando, os trs erros:
plot(1:length(y),e,'ro',1:length(z),e1,'s',1:length(w),e2,'^') axis([-0.5 5.5 -7
4])
Pelo grfico da distribuio de erros, qual deve ser o mais prximo de zero?
Como vai se comportar o erro no sistema de equaes lineares se o numero
de linhas de A vai aumentando? E o que vai ocorrer se a partir de A se
aumenta o numero de colunas?
Quando a matriz A do sistema quadrada e inversvel, a soluo dada
formalmente por
b = A -y. Para o caso de A no ser quadrada, o mtodo
dos mnimos quadrados resolve o sistema (1), aproxima a soluo,

15

otimizando a norma Euclidiana

e , conforme se verifica nos Exemplos

de 1 a 3 acima. Tcnicas numricas so utilizadas para fatorar a matriz A, e


melhorar o desempenho computacional na soluo do sistema linear, por
exemplo a fatorao QR .
Fatorao de Matrizes com o QR
A fatorao QR realiza a decomposio ortogonal triangular da matriz a [Q
R] = qr(A).
Funciona tambm com matriz retangular. Produz a matriz Q ortogonal e R
triangular superior.
A =[1 2 3;4 5 6;7 8 9;10 11 12], observe que a matriz posto reduzido, a
coluna do meio a mdia das outras duas, a fatorao revela o posto
reduzido.
[Q,R] = qr(A); fatorao qr de A
y = [1;3;5;7]; dado um vetor
b = A\y; a soluo obtida em duas etapas: c = Q'*b; e b = R\c;
Rode o programa verifique as matrizes ortogonais e triangular superior
chamando Q e R, confira as duas etapas para obter y e b. Multiplique A por
b e veja se o vetor o mesmo y.
Faa um experimento com a fatorao qr, escrevendo o programa para
obter os quatro primeiros polinmios de Legendre:
Programa 7.
x=(-128:128)'/128; % discretizao em [-1 1];
A=[x.^0 x.^1 x.^2 x.^3]; % constri a matriz de Vandermonde
[Q,R]=qr(A,0); % obtm a fatorao QR
scale =Q(257,:) % seleciona ultima linha de Q
Q=Q*diag(1./scale); %multiplica Q pela matriz diagonal e divide as colunas
pelos nmeros em scale.
plot(Q) % Plota as novas colunas de Q
axis([0 300, -1.5 1.1])
Confira a dimenso e o intervalo de x, a matriz de Vandermonde A formada
pelos monmios:
x0, x1, x2, x3, faa o grfico. Veja o comando diag para gerar a matriz
diagonal que multiplicada por Q e no grfico os anlogos discretos dos
polinmios de Legendre. Anlogos, por que os polinmios de Legendre so
produzidos por produto escalar continuo.
Decomposio em valores singulares SVD
Uma matriz A do tipo m por n (real ou complexa) pode sempre ser escrita
como:
A = U S V'; onde U e V so ortogonais (unitrias) e S diagonal. As colunas
da matriz m por m U so os auto vetores da matriz A A' enquanto que as
colunas da matriz n por n V so os auto vetores da matriz A A'. Alm disso,

16

os chamados valores singulares que so os elementos da diagonal de S, que


so as razes quadradas dos autovalores no nulos de A A' e de A' A
Em MATLAB para calcularmos a decomposio em valores singulares (SVD)
de uma matriz A usamos o comando: svd(A)
Exemplo:
A = [ 2 0; 0 -3; 0 0]
[ U, S, V] = svd(A)
U=
0
1
0

1
0
0

S=
3
0
0

0
2
0

V=
0
-1

1
0

0
0
1

A soluo de sistemas lineares pode ser feita com base na decomposio


em valores singulares. Por meio da pseudo inversa cuja computao
baseada na svd(A), e obtida com o comando pinv(A). Para a soluo do
sistema Ab = y, teremos: b = pinv(A)*y. Vamos a um exemplo:
Programa 8
1 A = magic(8); A = A(:,1:6);% matriz mgica quadrada e depois A(8,6)
2 y = 260*ones(8,1);% um vetor (8,1);
3 b1=A\y; % soluo dos mnimos quadrados
4 b = pinv(A)*y; % soluo com pseudo inversa
5 e1=(A*b-y);e2=(A*b1-y);
6 n1=norm(e1);n2=norm(e2);
7 np = norm(b);
8 nm = norm(b1);
A matriz A tem posto 3, verifique rank(A), o mtodo dos mnimos quadrados
vai receber aviso:
Warning: Rank deficient, rank = 3, tol = 1.8829e-013.
As normas n1 e n2 , na linha 6, so calculadas com valores de ordem dos
erros de arredondamento (e-013), com n1 menor do que n2, e a norma np
inequivocamente menor do que a norma nm. Confirmando que a norma
obtida com a pseudo inversa menor do que a norma de qualquer outra
soluo.
Outra aplicao da decomposio SVD na compresso de imagem. Como
exemplo da utilidade de posto restrito, ou rank deficient, na compresso
de imagens digitais. Em um computador, uma imagem simplesmente uma
matriz denotando cores de pixel. Por exemplo, uma imagem em tons de
cinza pode ser representada como uma matriz cujas entradas so nmeros

17

inteiros entre 0 e 255 (para 256 tons de cinza). Tipicamente, tais matrizes
podem ser bem aproximadas por matrizes de posto restrito.
Um exemplo, iremos mostrar por meio dos valores singulares de uma matriz
de imagem, uma fotografia dos lideres dos clculos com matrizes, tomada
na Conferncia de 1964 Gatlinburg em lgebra numrica computacional: da
esquerda para a direita, temos Jim Wilkinson, Wallace Givens, George
Forsythe, Alston Householder, Peter Henrici, e Fritz Bauer

Programa 9
load gatlin %carrega arquivo de imagem, do MATLAB
[U,S,V] = svd(X); % armazena a imagem na variavel "X"
figure(1),clf % plota os valores singulares
semilogy(diag(S),'b.','markersize',20)% comando do grfico
set(gca,'fontsize',16)
title('singular values of the "gatlin" imagematrix')
xlabel('k'), ylabel('\sigma_k')
figure(2),clf % plota a imagem original
image(X), colormap(map) % comando para exibir matriz de imagem
axis equal, axis of
title('trueimage (rank 480)','fontsize',16)
figure(3),clf %
k = 100; %%% plota o rank na aproximao
Xk = U(:,1:k)*S(1:k,1:k)*V(:,1:k)';
image(Xk), colormap(map)
axis equal, axis of
title(sprintf('bestrank-%d approximation',k),'fontsize',16)
O posto reduzido, voc pode testar mudando o rank, observe como pode
otimizar a qualidade da figura, .
equao Ax = x.
Alm da equao Ab = y, vamos estudar outra equao fundamental, Ax =
x. A matriz dada, uma matriz A (n, n),e x, um autovetor um vetor no
nulo tal que para algum escalar (real ou complexo) temos:
A*x= *x
Onde o escalar chamado de autovalor
det(A - I**x = 0

( I obtido com eye(n) = matriz identidade )

Podemos calcular:
A = [1 2 ; 2 1 ]
[V, D] = eig(A)
V=
-0.7071
0.7071

0.7071
0.7071

% autovetores

18

D=
-1
0

0
3

% autovalores

Podemos verificar a equao Ax = x, com o exemplo acima:


A*V(:, 1) = D(1,1)*V(:, 1);
Pode fazer c1 = A*(:, 1); c2 = D(1,1)*V(:, 1), e depois pea para o programa
verificar:
c1 = = c2; o comando lgico = =, responde sim = 1, no = 0.
EXERCCIOS 2.3
1.O sistema dado na equao (1), resolvido no Programa 6 do Exemplo1,
por:
b = A\y;; como esse comando (\) resolve o sistema? Poderia usar (/)? ,
consulte help \.
2.Poderia resolver o Exemplo 1 calculando b= A -1*y; usando o comando
para inverter A, que seria: b =inv(A)*y, qual seria a melhor soluo
computacional?
3. Nos exemplos 2 e 3 as matrizes B e C tem m > n, como seria a soluo
do sistema com matrizes com m < n, por exemplo com a matriz D=[A
[0.27 0.18 0.34]'], resolva o sistema, compare os erros e a norma com o os
erros e as normas dos exemplos 1, 2 e 3.
4. A computao da matriz A para resolver o sistema Ab = y, envolve
eliminao de Gauss, que se pode observar aplicando o comando rref, use
as matrizes A, B e C, dos Exemplos 1, 2 e 3; e. Escreva o resultado e suas
concluses.
5. Um algoritmo bastante usado para resolver o sistema Ab = y, a
fatorao LU. Com as mesmas matrizes do Exerccio 4. E compute [L, U, P]
= lu(A); observe as matrizes triangulares
L e U e a matriz de projeo P. A fatorao produz L*U = P*A. Depois da
fatorao LU das matrizes B e C, escreva as observaes. Compare P com a
matriz equivalente do Exerccio 4., obtida com o comando rref, e explique
as propriedades dessas duas matrizes.
2.4 ESTATSTICA
Para fazer estimativas em estatstica bsica, existem diversos comandos
que calculam os parmetros, como vamos no ver no seguinte:
Programa 10
1 subplot(2,1,1)
% chama um grfico dividido
2 x = rand(1000,1); %vetor coluna randmico,distribuio uniforme
3 hist(x,30); % faz o grfico do tipo histograma
4 axis([-1 2 0 60]) % fixa os limites dos eixos
5 title('Distribution of Values in rand(1000,1)') % ttulo
6 xlabel(sprintf('Mean = %4.3f. Median=4.3f.',mean(x),median(x)))
7 subplot(2,1,2); %chama um grfico dividido
8 xn = randn(1000,1);%vetor coluna randmico, distribuio normal
19

9 hist(xn,linspace(-2.9,2.9,100));%faz o grfico do tipo %histograma


10 title('Distribution of Values in randn(1000,1)')% ttulo
11 xlabel(sprintf('Mean = %5.3f. Standard Deviation =

%5.3f',mean(xn),std(xn)))
Nas linhas 6 e 11 os comandos xlabel e sprintf, colocam strings no eixo x
para a mdia mean(x), a mediana median(x) e desvio padro std(xn), para x
e xn. E sprintf utiliza o formato % 5.3f e 5.3f cujo primeiro inteiro especifica
o numero total de algarismos, o segundo numero especifica quantas casas
decimais.
Rodando o programa, observe as distribuies e os valores que aparecem
nos grficos. Depois escreva uma linha 15, com mean(x), mean(xn), std(xn),
compare com os valores do grfico. Agora, para verificar a distribuio
normal escreva mais uma linha com
z = linspace(-2.9,2.9,100), (copiado da linha 9) e chame a funo de
densidade de probabilidade y = normpdf(z), depois faa o grfico. No se
esquea de escrever figure antes do grfico, e a vai observar a curva
Gaussiana.
Exemplo de aplicao em teste de hiptese. Uma indstria de peas
metlicas vende 10 caixas do produto. Variao no processo causa um
desvio padro de 1.25 kg em cada caixa cujo peso mdio de 11.5 kg. Qual
a percentagem de caixas que poderia ter menos de 10 kg. Essa questo
pode ser resolvida com o comando normspec que gera o grfico da
densidade de probabilidade normal :
1 normspec([10 inf],11.5,1.25, 'outside');
O grfico mostra a probabilidade contra o valor crtico, no caso, a
probabilidade 0.11507 de ocorrer um valor igual ou menor do que 10. O
comando requer o intervalo entre os limites inferior e superior [ inf inf], a
mdia e o desvio padro. No caso [10 inf], 11.5 1.25. Escrevendo 11.5 no
lugar de 10 na linha 1 do programa qual ser a probabilidade que o grfico
vai mostrar? Claro que 0.5. Porque se fizer o teste com a distribuio
normal padro, deveria escrever:
2 normspec([0 inf],0,1, 'outside');
E a probabilidade a mesma 0.5. E agora, qual a percentagem dos valores
com um desvio padro estarem dentro da curva? Escreva a linha:
3 normspec([-1 1],0,1, 'inside');
Vemos no grfico a rea em torno da mdia: A = 1, que representa
aproximadamente 68,2 % do total.
Faa uma consulta ao help, por exemplo: help normspec
Normal density plot between specifications
Syntax
normspec(specs)
normspec(specs,mu,sigma)
normspec(specs,mu,sigma,region)
p = normspec(...)
[p,h] = normspec(...)
20

Description
normspec(specs) plots the standard normal density, shading the portion
inside the specification limits given by the two-element vector specs. Set
specs(1) to -Inf if there is no lower limit; set specs(2) to Inf if there is no
upper limit.
normspec(specs,mu,sigma) shades the portion inside the specification limits
of a normal density with parameters mu and sigma. The defaults are mu = 0
and sigma = 1.
normspec(specs,mu,sigma,region) shades the region either 'inside' or
'outside' the specification limits. The default is 'inside'.
p = normspec(...) also returns the probability, p, of the shaded area.
[p,h] = normspec(...) also returns a handle h to the line objects.
Existem diversas possibilidades d e consulta ao help, alm um determinado
comando, como help normspec, por exemplo. Para saber sobre um
assunto como Poisson, use lookfor, escreva lookfor poisson, e vai aparecer
na tela diversos comandos que vo calcular parmetros referentes a
distribuio de Poisson, e tambm comando como o: poisolve que resolve
a equao de Poisson numa malha retangular.
Para saber sobre os operadores escreva: help \, e o que pode consultar
escreva: help help.
EXERCCIOS 2.4
1.No Porgrama 10, calcule a mdia, o desvio padro e a varincia de x =
rand(1000,1) e de xn= randn(1000,1), utilizando os comandos mean, std e
var. Estes valores esto de acordo com as suas distribuies? Consulte
normpdf e unidpdf, explique.
2. Simule uma amostra randmica com 100 valores da distribuio normal
com mdia 0.1
x = normrnd(0.1,1,1,100); % media 0.1 varincia 1, vetor(1,100)
% Teste a hiptese nula de que a amostra de uma distribuio normal com
mdia 0,
[h,p,ci] = ttest(x,0); % h = 0 no rejeita a hiptese nula, h =1 rejeita. % p
a probabilidade de
% obter um valor to extremo ou mais extremo do
que o teste estatstico,
% ci o intervalo de confiana da mdia.
h= 0
p = 0.8323
ci = -0.1650 0.2045
No se pode rejeitar a hiptese nula a um nvel de significncia 0.05, dado
pelo default do programa, a probabilidade de um valor mais extremo dada
por p, que bem maior do que 0.05, e ci o intervalo de confiana a 95 %
correspondente ao nvel de significncia 0.05, inclui a mdia 0. Agora
simule uma amostra randmica maior com 1000 valores:
y = normrnd(0.1,1,1,1000); aplique o teste a escreva as concluses.

21

3.Com o resultado do teste de significncia da amostra randmica com


1000 valores, poderia prever o resultado com o nvel de significncia 0.01?
Altere o default do nvel de significncia:
[h,p,ci] = ttest(y,0,0.01), faa o teste, escreva as concluses e explique
porque pode prever o resultado sem fazer o teste.
4. Defina varivel aleatria, discreta e continua e funo de densidade de
probabilidade, com exemplos aplicando os comandos de nmeros
randmicos.
5. Na soluo de sistemas de equaes lineares, no item 2.3, na avaliao
dos erros e=A*b-y, se compara valores calculados Ab e valores
experimentais y, e o grfico vai mostrar como os erros esto distribudos.
Qual a distribuio que erros devem obedecer? Mostre que utilizando os
programas 6 e 6a e exemplo 3, que a avaliao da norma consistente com
o grfico dos erros.
2.5NMEROS RANDMICOS E COMPLEXOS
Nmeros Randmicos
Um computador no gera nmeros
realmente randmicos porque o
computador usa algoritmo determinstico. Mas, alguns algoritmos geram
nmeros pseudo-randmicos que so considerados randmicos.
Os nmeros randmicos so gerados em Matlab para diversas funes de
densidade de probabilidade. Funo densidade de probabilidade, ou
simplesmente funo de densidade utilizada para representar a
distribuio de probabilidade.
Consultando help random:
Y = random(name, A,B, m,n ) retorna nmeros randmicos Y de uma famlia
de distribuies especificada por name com dois parmetros A e B, cuja
dimenso uma matriz (m, n).
Exemplo 1:
rn = random('Normal',0,1,2,4).
rn =
1.1650 0.0751 -0.6965 0.0591
0.6268 0.3516 1.6961 1.7971
Distribuio normal os parmetros A mdia = 0, B desvio padro = 1, que
gera a matriz randmica (2, 4)
rp = random('Poisson',1:6,1,6)
rp =
0 0 1 2 5 7
Distribuio de Poisson um parmetro A mdias de 1 at 6, matriz (1,6)
Os nmeros randmicos tambm podem ser obtidos:
R = normrnd(mu,sigma,m,n), gera nmeros randmicos da distribuio
normal com parmetros da media mu e desvio padro sigma e os valores
escalares m e n so linha e coluna da matriz R.

22

R = poissrnd(lambda,m,n), gera nmeros randmicos da distribuio de


Poisson com o parmetro da mdia lambda, numa matriz (m, n).
Exemplo 2:
n2 = normrnd(0,1, [2 6])
lambda = 1:6;
R = poissrnd(lambda, 1,6)
Matlab gera nmeros pseudo-randmicos com algoritmos especficos para
randn nmeros randmicos normalmente distribudos, e rand nmeros
uniformemente distribudos.
A funo randn gera nmeros de uma distribuio normal com mdia = 0 e
desvio padro = 1.
Y = randn(m,n,p), gera matriz (m, n, p). Os dados de entrada m, n e p
devem ser escalares positivos. Os inteiros negativos so tratados como
zero.
Exemplo 3. Com nmeros randmicos normalmente distribudos.
R = randn(3,4):
R=
1.1650 0.3516
0.6268 -0.6965
0.0751 1.6961

0.0591 0.8717
1.7971 -1.4462
0.2641 -0.7012

Para gerar matriz (5 ,5) de nmeros randmicos com mdia 0,6 e varincia
0,1:
x = .6 + sqrt(0.1) * randn(5)
x=
0.8713
0.9966
0.0960
0.1443
0.7806

0.4735
0.8182
0.8579
0.8251
1.0080

0.8114
0.9766
0.2197
0.5937
0.5504

0.0927 0.7672
0.6814 0.6694
0.2659 0.3085
1.0475 -0.0864
0.3454 0.5813

A funo rand gera nmeros de uma distribuio uniforme no intervalo [0


1].
Y = rand(m,n,p) gera matriz (m,n,p) como mencionado acima para randn.
Etambm
Exemplo 4 Gera nmeros randmicos no intervalo [0 1],
numa matriz (3, 4)
R = rand(3,4)
R=
0.8147 0.9134
0.9058 0.6324

0.2785
0.5469

0.9649
0.1576
23

0.1270 0.0975

0.9575

0.9706

Para gerar uma matriz (5, 5) uniformemente distribuda no intervalo [10,50],


a = 10; b = 50;
x = a + (b-a) * rand(5)
x=
19.159149.8454
46.533513.1270
16.095127.7071
43.032714.2661
31.533748.4759

10.1854
40.9964
42.6921
44.7478
13.3774

25.9913
20.3948
42.0027
27.2566
46.4259

17.2739
20.5521
15.8216
15.4427
44.7717

Nmeros complexos
Numero complexo uma expresso da forma

z=a+ bi

(Expresso na forma cartesiana)

Onde, a= Re[z] a parte real e b=Im[z] a parte imaginria.


i=

i =1 ;

z =abi ; chamado o conjugado de z.


r=| z|= a2 +b

Onde r o mdulo de z

Transformando em coordenadas polares,

a=rcos e b=rsen

(1)

z=rcos+ir sen
(2)

z=r ( cos+i s en)

Onde

=arctan

b
a

A figura 1 vem ilustrar a forma cartesiana e polar para o nmero complexo


z. Esta representao conhecida como plano complexo ou diagrama de
Argand.
Para chegar a formula de Euler, analisaremos os seguintes passos:

24

X
n!

e =
x

n=0

(i)
i 2 2 i 3 3 i4 4
=1+i+
+
+
+
2!
3!
4!
n=0 n !

e i=

(3)

i 2=1 ; i 3=i; i 4 =1,i 5=i ; assim por diante

Ento

. Logo (3) pode ser separada

em parte real e parte imaginria:

e i= 1

2 4
3 5
+ + +i( + )
2! 4!
3! 5!

(4)

Mas, lembramos que

(1)n 2 n
(1)n 2 n +1
cos=
e s en=

n=0 ( 2 n ) !
n=0 ( 2 n+1 ) !

Em que cada serie converge para o numero real , portanto (4) pode ser
escrita.

e i=cos+i sen
(5)
Em vista de (5), a forma polar (2), de um nmero complexo pode ser
expressa de maneira compacta:
z= r

O MATLAB suporta tratamento de nmeros complexos de forma simples, tal


qual escrevemos.
>> z1= 1 +i
z1=
1.0000 + 1.0000i
Para a representao do nmero imaginrio

no MATLAB so aceitos

os smbolos i e j.
>> z2= cos(pi/4)+j*sin(pi/4)
z2=
0.7071 + 0.7071i
Na forma polar, podemos usar a funo exp:
>> z3= 3*exp(-j*pi)
z3=
-3.0000 0.0000i
As operaes aritmticas com nmeros complexos so como para nmeros
reais
>> z3-z1
ans=
-4.0000 1.0000i
>> z3*z1
ans=
25

-3.0000 3.0000i
>> z1/z3
ans=
-0.3333 0.3333i
>> z1^2
ans=
0 + 2.0000i
Abaixo, algumas funes disponveis para realizar operaes com complexo
conjugado, o mdulo e angulo. Exemplo:
Exemplo plano complexo
g=randn(3);
% gera nmeros randmicos
gc=sqrt(g); % raz quadrada, gera nmeros imaginrios e reais
ZC=conj(gc);
% conjugado
ZCi=imag(ZC); % extrai a parte imaginria
ZCr=real(ZC); % extrai a parte real
R = abs(gc);
% calcula o mdulo
theta = angle(gc); % angulo
gc = R.*exp(i*theta);%reescreve a partir da equao de %Euler
plot(ZCr,ZCi,'.') % para representar graficamente podemos usar
axis([-2 2 -2 2]) % as funes compass ou plot
figure
compass(ZC)
EXERCCIOS 2.5
1.Defina um intervalo adequado para as pdf normpdf, poisspdf e para a
pdf do Qui-quadrado: chi2pdf, chame a pdf e faa o grfico. Por exemplo,
x=0:0.2:30; y = chi2pdf(x,4), plot(x,y). Observa as curvas e os parmetros
que utilizou e diga se descrevem cada uma das distribuies. Faa
experimentos com poisspdf aumentando o valor de e diga o que observa.
Faa tambm o mesmo experimento com chi2pdf.
2. Gere nmeros randmicos das mesmas distribuies do Exerccio 1, e
apresente os dados no
histograma. Por exemplo, x=-4:0.1:4;
y=rand(1000,1), hist(y,x). Para experimentos equivalente com valores
crescente da mdia como no Exerccio 1,explique.
3. Escreva um programa para demonstrar que cada serie converge para o
numero real , portanto (4) pode ser escrita

e i=cos+i sen .

4.
Com o Exemplo do plano complexo gere g = randn(15); gere nmeros
randmicos
gc = sqrt(g); % gera nmeros imaginrios e reais, faa o grfico
apresentado o diagrama de Argandt, interprete.
5. Gere nmeros randmicos com mdia e varincia especificadas. Defina
um intervalo [a b], com b > a para os nmeros randmicos gerados faa os
grficos, explique.
2.6 CLCULO
26

Polinmios.
MATLAB representa polinmios com os coeficientes ordenados de forma
decrescente pela potncia, por exemplo:
% p(x)= x3 -2x-5
representado como
p = [1 0 -2 -5]
r = roots(p)
%calcula as razes do polinmio
p2 = poly(r)
% retorna os coeficientes do polinmio dadas as suas razes
polyval(p,n)
% avalia o polinmio para o valor n
Para traar o grfico de um polinmio, pode-se usar a funo fplot:
fplot (f.m, [-5,5])% chamar uma funo f.m; ou escreve a funo:
fplot ('x^2 + 5*x + 6', [-10 10])
Grficos de funes.
O MATLAB possui uma variedade de comandos para grficos em duas e trs
dimenses, iremos ver alguns exemplos.

Comando plot , como j vimos em exemplos anteriores.

subplot(m,n,p) divide a janela em uma matriz mxn de pequenos eixos


seleciona o p-simo eixo para o plot atual.
subplot(2,1,1), plot(income) % divide a janela em grfico superior
subplot(2,1,2), plot(outgo) % grfico inferior.

Funes meshgrid / mesh


exemplo:
x = -7.5:.5:7.5; %pontos igualmente espaados
y = x;
[X,Y] = meshgrid(x,y); % grade retangular dos vetores x e y
R= sqrt(X.^2+Y.^2); % funo das matrizes X e Y
Z = sin(R)./R; Matriz Z
mesh(X,Y,Z) % gera o grfico tridimensional

funo surf uma opo para o grfico de superfcie da matriz Z:


surf(X,Y,Z)

Exemplo de subplot
2

( x1) 2 y
+(1c) e( x+1) y
seja f =c e

Podemos fazer diferentes grficos para valores diferentes de c


Programa 11
f = inline('c*exp(-(x-1).^2 -2*y.^2) +(1-c)*exp(-(1+x).^2 -y.^2)', 'x', 'y', 'c')
% escreve a funo com o comando inline
27

[X,Y] = meshgrid(-2:.2:2);%gera um par de matrizes representando % uma


uma grade retangular de pontos no plano
subplot(3,2,1) % seleciona o primeiro eixo para plotagem
surf(X,Y,f(X,Y,1)) % utiliza a funo de grfico tridimensional
title('c = 1')
subplot(3,2,2) % seleciona o segundo eixo de plotagem
surf(X,Y,f(X,Y,.4))
title('c = .4')
subplot(3,2,3) % o terceiro eixo
surf(X,Y,f(X,Y,.8))
title('c = .8')
subplot(3,2,4)
% o quarto eixo
surf(X,Y,f(X,Y,.2))
title('c = .2')
subplot(3,2,5)
surf(X,Y,f(X,Y,.6))
title('c = .6')
subplot(3,2,6)
surf(X,Y,f(X,Y,0))
title('c = 0')
colormap(cool)
Grfico de funo em coordenadas polares
Seja

f ( x , y ) =x1+ y

sobre o disco { (x-1) + (y -3) = 4 }

% [X,Y]= meshgrid(x,y)
% cria uma matriz X cujas linhas so cpias do vetor x e uma matriz Y
%cujas colunas so cpias do vetor y
r = linspace(0,2,21);
theta = linspace(0, 2*pi, 41);
[R,TH] = meshgrid(r,theta);
% Agora converte o meshgrid nas coordenadas polares
X = 1 + R.*cos(TH);
Y = 3 + R.*sin(TH);
Z = X-1 + Y.^2;
surf(X,Y,Z)
hold on
% adiciona ao plano z = -5;
surf(X,Y,-5+0*Z)
hold of
%%%%coordenadas esfricas
syms b c
a=4;
t=[a*sin(b)*cos(c),a*sin(b)*sin(c),a*cos(b)];
ezsurf(t(1),t(2),t(3),[0,pi],[0,2*pi])
Interpolao
28

No MATLAB veremos algumas funes que esto implementadas:


Exemplo, programa oceano.m que utiliza interpolao de superfcie.
Dadas as medidas de profundidade do oceano, a partir de uma interpolao,
pode-se fazer o grfico da superfcie para visualizar a regio. A malha dos
dados num retngulo (x, y) dada:
Programa 12
x=0:0.5:4;
y=0:0.5:6;
A matriz Z com os valores da profundidade:
z=[100 99 100 99 100 99 99 99 100;
100 99 99 99 100 99 100 99 99;
99 99 98 98 100 99 100 100 100;
100 98 97 97 99 100 100 100 99;
101 100 98 98 100 102 103 100 100;
102 103 101 100 102 106 104 101 100;
99 102 100 100 103 108 106 101 99;
97 99 100 100 102 105 103 101 100;
100 102 103 101 102 103 102 100 99;
100 102 103 102 101 101 100 99 99;
100 100 101 101 100 100 100 99 99;
100 100 100 100 100 99 99 99 99;
100 100 100 99 99 100 99 100 99];
mesh(x,y,z) % primeiro grfico
title('Profundidade do Oceano, m')
xlabel('X, km'),ylabel('Y,km')
figure
xi=linspace(0,4,30); % define um quadrado
yi=linspace(0,6,30);
[xxi,yyi]=meshgrid(xi,yi); % malha mais fina
zzi = interp2(x,y,z,xxi,yyi,'cubic');% interpolao
zzi=griddata(x,y,z,xxi,yyi,'cubic');
mesh(xxi,yyi,zzi)
figure
surf(xxi,yyi,zzi)% grfico da superfcie
%linspace: cria vetores xi e yi, com 30 pontos iguais, a partir dos
pontos inicial e final de x e de y.
%meshgrid: gera duas matrizes (n, n) com o produto externo de xi e
yi.
%Interp2: calcula a interpolao com um modelo z = f (x, y), com
tcnicas como %spline, cubic, etc.
%mesh e surf so comandos para fazer grfico em 3D. E figure
separa os %grficos.

29

Para interpolar dados necessrio um modelo, no caso, a interpolao usou


o modelo que existe no default do programa, a funo intrep2.
Exemplo de interpolao com funo de vrias variveis; comea definindo
uma funo anonymous function, para computar:
Programa 13
%f= t*exp(-x^2-y^2-z^2);
f = @(x,y,z,t) t.*exp(-x.^2 - y.^2 - z.^2); %anonymous function
%
% avaliar a funo f numa malha dada por ndgrid:
%
[x,y,z,t] = ndgrid(-1:0.2:1,-1:0.2:1,-1:0.2:1,0:2:10);
v = f(x,y,z,t);
%
% E agora constri uma malha mais fina
%
[xi,yi,zi,ti] = ndgrid(-1:0.05:1,-1:0.08:1,-1:0.05:1, ...
0:0.5:10);
%
%Compute a interpolao spline interpolando em xi, yi, zi, and ti:
%
vi = interpn(x,y,z,t,v,xi,yi,zi,ti,'spline');
%
% %Plota a funo interpolada, e ento introduz um movie:
%
nframes = size(ti, 4);
for j = 1:nframes
slice(yi(:,:,:,j), xi(:,:,:,j), zi(:,:,:,j), ...
vi(:,:,:,j),0,0,0);
caxis([0 10]);
M(j) = getframe;
end
movie(M);

Derivadas e integrais
Para calcular a derivada podemos usar a funo dif
Exemplo
syms x y% declara as variveis simblicas
y= 2*x^3+ 5*x % escreve a funo
dif(y)% calcula a derivada
ans = 6*x^2 + 5
Tambm podemos chamar o comando gradiente para obter o gradiente,
que calculado tomando as derivadas parciais da funo.
Programa 14
v = -2:0.2:2;
[x,y] = meshgrid(v);
z = x .* exp(-x.^2 - y.^2); % funo
30

[px,py] = gradient(z,.2,.2); % gradiente


contour(v,v,z), hold on, % grfico de curva de nvel, e comando para
superpor os grficos
quiver(v,v,px,py), % plota as posies e velocidade como setas do campo
vetorial
hold of % desativa o comando de superposio
Explique os comandos e interprete.
Integrao Simblica
Integrais duplas podem ser expressas como integrais interadas
b d

d b

f ( x , y ) dA= f ( x , y ) dydx= f ( x , y ) dxdy


a c

Desta forma podemos usar a integrao simblica do MATLAB para calcular


primeiro a interior e depois a outra integral. Exemplo , calcular a funo
f(x,y) = x3 + x + y, no retngulo:
R= {1 x 2, 0 y 3}
Programa 15
>>syms x y
%% declara as variveis simblicas
>> f = x^3+x+y ;
%% escreve a funo
>>int(int(f,y,0,3),1,2)
%% calcula a integral
%
%% a funo int duas vezes

utilizando

O MATLAB possui suas prprias funes para o calculo de integrais, como j


vimos no exemplo anterior na integrao simblica com a funo int.
Integrao numrica
Numericamente, para integrais simples as funes so quad e quad8. Para
integral dupla a funo dblquad. Elas usam mtodos semelhantes regra de
Simpson, mas aplica de uma maneira mais sofisticada chamada de
quadratura adaptativa.
quad regra de Simpson Adaptativa
quad8 regra de Newton Cotes Adaptativa
trapz aproximao da integral a partir do mtodo do trapzio
dblquad integrao dupla

Exemplo: Calcular

sin ( x ) dx
0

Com a aproximao numrica do trapzio


X = 0:pi/100:pi; % cria um vetor espaado de pi/100
Y = sin(X);
31

Z = trapz(X,Y);
Z = pi/100*trapz(Y)
Z = 1.9998
Veja com size(X) que este vetor tem 101 valores, e que tal a aproximao
da soluo?
Agora com quad
Z=quad('sin(x)',0,pi)
Z = 2.0000
Melhor aproximao do resultado exato = 2, veja com format long o valor
calculado.
Exemplo : Integrao Dupla com a funo dblquad
f(x,y) = (4/)exp(-x-y)
f=

R= {0 x 0.5, 0 y 1}

@(x,y)exp(-x.^2 -y.^2)*(4/pi

% escreve a funo annima de variveis x e y


>>dblquad(f,0,0.5,0,1)
ans = 0.438625686710238
Exemplo, integrao simblica, integral tripla:
Programa 16
syms x y z
f=(y+z)*sin(pi*(x^2+y^2));
resp=int(int(int(f,x,0,1),y,0,1),0,1);
double(resp)
Mudana de coordenadas
Teorema de Green

F2

( x
R

F1
) dxdy ( F1dx F2 dy )
y
C

Considere um campo vetorial F=(x^2*y^5,x^3*y^2) dentro de uma regio


D=(x+y=1)
com uma parametrizao em coordenadas polares, para um circulo unitrio
na origem 0 < t <2
%
Soluo
Considere a integral do lado direito. O contorno parametrizado:
r(t)=[cos(t),sin(t)];
Programa 17
syms x y t
32

F =[x^2*y^5,x^3*y^2]; % campo vetorial


circ = [cos(t),sin(t)];
%% observe que ele usa uma parametrizao em coordenadas polares
line_integrand = inline('cos(t).^2.*sin(t).^5.*(-sin(t))
+cos(t).^3.*sin(t).^2.*cos(t)','t');
%
yv= quad(line_integrand,0,2*pi)
yv =0,1473
Agora vamos calcular o lado esquerdo da integral
%cdigo calcula a integral dupla:
%
surf_int = inline('(3*x.^2*y^2-5*x.^2*y^4).*((x.^2+y^2)<=1)','x','y');
db3=dblquad(surf_int,-1,1,-1,1)
db3= 0,1473
Teorema de Stoke

(rot F ) n dA F r ' (s)


S

Programa 18
syms z x y t r % declara as variveis
F4=[z, x, y];
% utiliza uma parametrizao em coordenadas esfricas
sigma=[r*cos(t),r*sin(t),r^2*cos(t)*sin(t)];
boundary=subs(sigma,r,2); % faz a substituio
realdot = @(u, v) u*transpose(v);
Z = int(realdot(subs(F4,[x,y,z],boundary),dif(boundary,t)),t,0,2*pi)
Explique os comandos e diga como o programa demonstrou o teorema.
Equaes diferenciais
Teste de da soluo de uma ODE.
Dada a equao diferencial ordinria
Programa 19
du/dt-au = 0;
testar se u(t) = exp(a*t) a soluo
syms a t
u=exp(a*t)
Podemos computar o lado esquerdo da equao diferencial e ver se igual
ao lado direito zero.
d1=dif(u,t)-a*u
ans = 0
Ento a funo dada u a soluo. E a funo y(t) = at, outra soluo?
Vamos checar:
v=a*t
v = a*t
33

d2=dif(v,t)-a*v
ans =
a - a^2*t
Desde que a resposta no zero a funo y no uma soluo.
Teste para EDP
Seja a equao diferencial parcial:
(d^2 u)/(dx^2 )+(d^2 u)/(dy^2 ) = 0
Testar se w(x,y)=sin(pi*x)+sin(pi*y) a soluo
syms x y
w=sin(pi*x)+sin(pi*y)
dif(w,x,2)+dif(w,y,2)
ans =- pi^2*sin(pi*x) - pi^2*sin(pi*y)
simplify(ans)
EDO Numrica
Calcular o movimento do pendulo com o mtodo de Euler
Programa 20
length= 1; % comprimento do pendulo
g=9.8 % acelerao da gravidade
npoints = 250; %discretizao do tempo em 250 intervalos
dt = 0.04; % tempo com passo em segundos
omega = zeros(npoints,1); % inicializa omega, um vector de dimenses
npoints
theta = zeros(npoints,1); % inicializa theta, um vector com zero em todos os
pontos.
time = zeros(npoints,1); % teste inicializa o vetor tempo para ser zero
theta(1)=0.2; % necessrio tem algum deslocamento, se no o pendulo
no vai oscilar
for step = 1:npoints-1 % loop
omega(step+1) = omega(step) - (g/length)*theta(step)*dt;
theta(step+1) = theta(step)+omega(step)*dt
time(step+1) = time(step) + dt;
end
plot(time,theta,'r' ); % plota a soluo numrica em vermelho
xlabel('time (seconds) ');
ylabel('theta (radians)');
Calcular o movimento do pendulo com o mtodo de Euler-Cromer
Programa 21
clear;
length= 1;
g=9.8; %
npoints = 250;
dt = 0.04;
omega = zeros(npoints,1);
theta = zeros(npoints,1);
time = zeros(npoints,1);
theta(1)=0.2;
for step = 1:npoints-1 %
34

omega(step+1) = omega(step) - (g/length)*theta(step)*dt;


theta(step+1) = theta(step)+omega(step+1)*dt; % Note que
% esta linha a nica diferena deste para o mtodo de Euler do Exemplo 1
time(step+1) = time(step) + dt;
end;
plot(time,theta,'r' );
xlabel('time (seconds) ');
ylabel('theta (radians)');
Calcular o movimento do pendulo amortecido usando o mtodo de EulerCromer
Programa 22
length= 1;
g=9.8;
q=1; % fator de amortecimento
npoints = 250;
dt = 0.04;
omega = zeros(npoints,1);
theta = zeros(npoints,1);
time = zeros(npoints,1);
theta(1)=0.2;
for step = 1:npoints-1
omega(step+1) = omega(step) - (g/length)*theta(step)*dtq*omega(step)*dt;
theta(step+1) = theta(step)+omega(step+1)*dt;
% No mtodo de Euler os valores de Omega e de theta so usados para
calcular os novos valores de Omega e de theta. No Mtodo de Euler-Cromer
os valores previamente calculados de Omega e de theta so usados para
calcular os novos valores de Omega. Entretanto, o novo valor de omega
usado para calcular o novo valor de theta.
%
time(step+1) = time(step) + dt;
end;
plot(time,theta,'r' ); %plots the numerical solution in red
xlabel('time (seconds) ');
ylabel('theta (radians)');
EXERCCIOS 2.6
1.O polinmio do exemplo p(x)= x^3 -2*x-5, observe como ele
representado: p = [1 0 -2 -5], escreva num programa e com o comando r =
roots, e depois com p2 = poly(r), verifique se p = p2, escreva o valor de x
para avaliar o polinmio n = 3, por exemplo, e ento, invoque
pv=polyval(p,n). Faa o grfico como no exemplo e faa tambm com uma
anonymous function.
2. Com a funo annima do exemplo 1, calcule fzero(f,1), qual o valor
obtido? Esse valor o mesmo de roots? Qual a diferena?

35

3. ezplot(@humps, 0,1); Essa tambm uma funo annima? De qual


arquivo?. Pelo grfico, variando as condies pode dizer como se comporta
a funo num determinado intervalo?
4. Escreva syms x
h=1/((x-.3)^2+0.01)+1/((x-.9)^2+0.4)-6;
I =int(h); produz integral indefinida
D = simple(int(h,0,1))
Qx=double(D);
Explique os comandos e de exemplos da aplicao. Escreva outra funo e
calcule a integral.
5. Reescreva o Programa 13, substituindo a funo annima por inline, e
depois escreva com dois programas um script e uma funo. Diga sua
preferncia e explique.
6. Escreva a funo do Programa 14, e calcule o gradiante, rode novamente
o Programa, e interprete. Faa experimento escrevendo f(x,y,z) = 4x
+10y^2 sin(z), calcule o gradiente e rode o programa com essa funo,
escreva sua observao.
7. Faa uma substituio da funo F =[x^2*y^5,x^3*y^2], no Programa
17, calcule e explique.
8. Escreva as equaes do movimento do pendulo correspondentes aos
programas 20 e 21 e 22 compare com os grficos, explique.
9. Explique a diferena em ter os mtodos Euler e Euler- Cromer,
comparando os programas e o grficos correspondentes.
10. A funo ode45 do Matlab um solver de equaes diferenciais
ordinrias, veja no help a sintaxe e escreva um programa para calcular o
movimento do pendulo. Compare o resultado com os obtidos com os
mtodos de Euler e Euler Cromer.
11. O solver simblico para EDO o dsolve, use para o exemplo dado no
Porgrama 19, du/dt au = 0; por exemplo: y = -2xy, com y(0) = 1.
Resolva e aplique solve( Dy = -2*y, y(0) =1), compara a soluo. Confira
notao diga quem so as variveis independes. Resolva o mesmo exemplo
com o dsolve sem a condio inicial. Use o comando ezplot para fazer o
grfico e interprete a soluo.
12. Use dsolve para resolver a equao do pendulo, faa o grfico com o
comando simblico e compara com o resultado de 10.
3. ERROS DE COMPUTAO
Os Erros em computao podem
arredondamento e truncamento.

ser

classificados

em

inicial,

Para computar f(x) onde x um nmero real e f uma funo real. Na


computao o nmero x deve ser aproximado por um nmero racional x
desde que o computador no pode armazenar um nmero infinito de
36

decimais. A diferena x x constitui o erro inicial enquanto a diferena1 =


f(x) - f(x) a propagao do erro correspondente. Em muitos casos a
funo f precisa ser substituda por uma funo mais simples f 1 (comumente
uma expanso em srie de f). A diferena 2 = f1(x) f(x) ento o erro de
truncamento. Os clculos em computao levam o valor correspondente a
f1(x) para um outro valor f 2(x), o qual um valor computado erradamente
de uma funo errada de um argumento errado. A diferena 3 = f2(x)
f1(x)pode ser chamada de propagao de erros de arredondamento. O erro
total = f2(x) f(x) = 1+ 2 + 3.
Por exemplo, para determinar e1/3 os clculos sero feitos com 4 decimais.
Para iniciar vamos computar e0.3333 em vez de e1/3 a propagao de erros fica:
1= e0.3333 - e1/3 = e0.3333 (1 e0.00003333 ). = - 0.00004 65196.
O passo seguinte, no computamos ex, mas:
1+ x/1! + x^2/2! + x^3/3! + x^4/4! para x = 0.3333, ento o erro
de truncamento
2 =-(0.3333^5/5! + 0.3333^6/6! + ) = -0.00003 62750
finalmente, a soma com a srie truncada dada com valores arredondados,
o resultado:
1 + 0.3333 + 0.0555 + 0.0062 + 0.0005 = 1.3955,
e no 1.395552 96304 obtida com 10 decimais. Ento: 3= -0.00002 96304
e o erro total:
= 1.3955 e1/3 =1 + 2 + 3 = -.00011 24250

EXERCCIOS
Calcule o erro absoluto

|x|

e o erro relativo

|x|
|x| , com o

programa:
Arquivo: Formula de Stirling
Imprime uma tabela mostrando o erro na aproximao do fatorial de n, pela
formula de Stirling.
close all
clc
disp( ' ')
disp('
Stirling
Absolute
Relative')
disp('
n
n!
Approximation
Error
Error')
disp('--------------------------------------------------------------')
e=exp(1);
nfact=1;
for n=1:13
nfact = n*nfact;
s = sqrt(2*pi*n)*((n/e)^n);
abserror = abs(nfact - s);

37

relerror = abserror/nfact;
s1 = sprintf(' %2.0f
%10.0f
%13.2f',n,nfact,s);
s2 = sprintf('
%13.2f
%5.2e',abserror,relerror);
disp([s1 s2])

end

Rode o programa, escreva com quantos algarismos significativos esto


calculados os erros absoluto e relativo. Observa que s1 e s2 esto
concatenados antes do display com o comando disp. Escreva a formula de
Stirling para ficar bem claro o que o programa calculou, e diga como
comportam os erros em funo do valor de n? Faa experimentos e escreva
as observaes.

38