Escolar Documentos
Profissional Documentos
Cultura Documentos
MATEMTICA COMPUTACIONAL
Aula 20-Novembro-2013
MATLAB (MATrix LABoratory) um software de alta performance direccionado para o clculo
numrico. O MATLAB integra reas como anlise numrica, clculo com matrizes, processamento de
sinais e construo de grficos.
O MATLAB um sistema interativo cujo elemento bsico de informao uma matriz que no requer
dimensionamento. Esse sistema permite a resoluo de muitos problemas numricos em relativamente
menos tempo que linguagens semelhantes como o C ou Fortran. As solues dos problemas so
expressas matematicamente.
Ao abrir o MATLAB duas janelas so exibidas: a Janela de Comando (Command Windows) e Janela
Grfica (Graphic Windows).
Janela de Comando ou "prompt" padro (>>) pode ser usado como um shell interativo de matemtica.
Sequncias de comandos podem ser guardadas em um arquivo de texto, tipicamente utilizando o
MATLAB Editor, como um script ou encapsulado em uma funo e estes so guardados em ficheiros
do tipo M-File (.m)
MATLAB no IST
O MATLAB est disponvel no IST para Sistema Operativo Windows, UNIX ou Mac.
As ltimas verses do MATLAB esto disponveis para download no site:
https://delta.ist.utl.pt/software/matlab.php
Note que, estas licenas no permitem acesso Toolbox Symbolic. Para requerer
esta toolbox dever enviar um email para ci@ist.utl.pt.
MATLAB O Bsico
Vamos comear com algo simples, como a definio de um vector linha cujos elementos so os
nmeros 1, 2, 3, 4, 5. O vector ser guardado na variavel x.
>>x=[12345]
x=
1
Para criar um vector coluna, podemos utilizar o ponto e vrgula entre elementos ou, criar inicialmente
um vector linha e depois calcular o seu transposto (').
>>y=[1;2;3;4;5]
y=
1
2
3
4
5
>>x=[12345]'
Vectores e Matrizes
interessante tambm ver como se definem vectores e matrizes com elementos igualmente espaados.
Isto feito definindo o primeiro elemento do vector, o incremento e o ltimo elemento. Por exemplo,
vamos criar o vector u cujos elementos so 0, 1, 2, 3, 4, 5, e o vector u2 cujos elementos so os
nmeros pares de 0 a 8.
>>u=[0:5]
u=
0
>>u2=[0:2:8]
u2=
0
O Matlab permite-nos localizar partes especficas de um vector/matriz. Para exemplo, queremos apenas
os 3 primeiros elementos do vector u2.
>>u2(1:3)
ans=
0
Definir uma matriz muito semelhante a definir um vector. Podemos tratar cada linha de uma matriz
como um vector.
>>A=[123;456;789]
A=
1
4
7
2
5
8
3
6
9
ans=
5
Podemos tambm extrair uma coluna/lina inteira, usando :. Por exemplo, se quisermos todos os
elementos da segunda coluna.
>>A(:,2)
ans=
2
5
8
Uma das principais vantagens do MATLAB a facilidade com que se manipulam vectores e matrizes.
Por exemplo, se quisermos somar/subtrair 2 matrizes.
>>A=[123;456;789];
>>B=[101;210;333];
>>A+B
ans=
224
666
101112
Omesmoacontececomvectores.
>>s=[123]
s=
123
>>t=[2;3;5]
t=
2
3
5
>>st
Errorusing
Matrixdimensionsmustagree.
Tal como esperado, no nos possvel substrair um vector de tamanho 1-por-3 por um de 3-por-1.
>>B*s
Errorusing*
Innermatrixdimensionsmustagree.
>>B*t
ans=
7
7
30
H outras operaes que queremos ver executadas elemento a elemento da matriz ou vector.
Por exemplo, se quisermos multiplicar cada elemento do vector por si prprio. s2 = [s(1)*s(1), s(2)*s(2),
s(3)*s(3)].
>>s*s
Errorusing*
Innermatrixdimensionsmustagree.
Neste caso, para que tal operao seja possvel, necessrio especificar que a multiplicao feita
elemento a elemento, utilizando .* ou .^2.
>>s.*s
ans=
149
>>s.^2
ans=
149
Os operadores disponveis no matlab so
+
*
^
'
\
/
adio
subtraco
multiplicao
potncia
transposto
divisoesquerda
divisodireita
O MATLAB permite-nos visualizar valores reais de duas formas: 4 casas decimais ou 16 casas
decimais
>>formatshort
>>formatlong
(4casasdecimais)
(16casasdecimais)
Algumas funoes disponveis em MATLAB (para escalares e que operam elemento a elemento
quando aplicadas a vectores ou matrizes)
sin
cos
tan
exp
log
abs
sqrt
rem
round
senotrigonomtrico
cossenotrigonomirco
tangent
exponencial
logaritmonatual
valorabsoluto
raizquadrada
resto
arredondamentoaointeiromaisprximo
maiorelemento
menoreemento
tamanhodovector
ordenarvector(ascendente)
somadoselementos
produtodoselementos
>>length(s)
ans=
3
>>max(s)
ans=
3
Funes disponveis em MATLAB para martizes.
Eye
zeros
ones
diag
matrizidentidade
matrizdezeros
matrizdeuns
extraiadiagonaldeumamatriz(ouusadaparacriar
diagonaldeumamatriz)
triu
partetriangularsuperiordeumamatriz
tril
partetriangularinferiordeumamatriz.
>>eye(4,4)
ans=
1000
0100
0010
0001
>>ones(2)
ans=
11
11
Alguns comandos que podem ser teis para o trabalho de MC.
Det
inv
eig
poly
norm
determinantedamatriz
inversodeumamatriz
valoresprprios/vectoresprprios
polinmiocaracteristico
normadamatriz(norma1,norma2,normainfinita)
>>K=[9,70;0,8,2;7,2,3]
K=
970
082
723
>>det(A)
ans=
278
Podemos confirmar os nossos resultados fazendo: KK-1 = I.
>>K*inv(K)
ans=
1.000000.0000
01.00000
0.00000.00001.0000
Grficos (Plot)
Dados 2 vectores, de tamanho igual, podemos facilmente desenhar o grfico da funo utilizando a
funo plot.
Por exemplo, vamos criar o grfico da funo y = cos(x), de - a (com incremento de 0.01)
>>x=[pi:0.01:pi];
>>y=cos(x);
>>plot(x,y)
possvelutilizardiferenteslinhas,coresesmbolosparadefinir
osgrficos.
Algunsexemplos.
Y
m
r
g
v
amarelo
magenta
vermelho
verde
azul
.
o
*
ponto
crculo
estrela
tracejado
Condies Ifs
if
condio
operao
elseif
condio
operao
else
operao
end
Definimos o dominio de -1 a 1.
>>x=1:0.01:1;
>>fori=1:length(x)
ifx(i)<0.5
F(i)=x(i).^2;
else
F(i)=0.25;
end
end
>>plot(x,F)
f=
x^3+1
>>f=inline(f)
f=
Inlinefunction:
f(x)=x.^3+1.0
>>r=bisection(f,3,2,15,10^3);
Omtodoconvergiu
p=
0.9999
Ficheirobisection.m
function [ r ] = bisection( f, a, b, nmaxIter, tolerancia )
%f : funo
%a : limite inferior do intervalo
%b : limite superior do intervalo
%nmaxIter : nr mximo de iteradas
%tolerancia : criterio de paragem
if ( f(a) == 0 )
r(1) = a;
return;
elseif ( f(b) == 0 )
r(1) = b;
return;
elseif ( f(a) * f(b) > 0 )
error( 'f(a) and f(b) no tm sinais contrrios' );
end
p = (a+b)/2;
for i = 1:nmaxIter
if f(a)*f(p)<0
b = p;
else
a = p;
end
p = (a + b)/2;
err = abs(f(p));
if err < tolerancia
disp('O metodo convergiu');
p
f(p)
break;
end;
r(i) = p;
end
end
if i == nmaxIter
disp('O metodo no convergiu');
end
Imprimirresultados
printf('%s %d\n', 'iteradas= ',i);
printf('%s %d %d %s\n', 'Raiz = ',p);
printf('%s %d\n', 'erro= ',err);
%sTexto
%dvalorreal/inteiro
f=
x^2+3
>>df=diff(f)
df=
2*x
>>d2f=diff(f,2)
d2f=