TUTORIAL MATLAB MATEMÁTICA COMPUTACIONAL Aula 20-Novembro-2013 MATLAB (MATrix LABoratory) é um software de alta performance direccionado para o cálculo numérico. O MATLAB integra áreas como análise numérica, cálculo com matrizes, processamento de sinais e construção de gráficos. O MATLAB é um sistema interativo cujo elemento básico de informação é uma matriz que não requer dimensionamento. Esse sistema permite a resolução de muitos problemas numéricos em relativamente menos tempo que linguagens semelhantes como o C ou Fortran. As soluções dos problemas são expressas matematicamente. Ao abrir o MATLAB duas janelas são exibidas: a Janela de Comando (Command Windows) e Janela Gráfica (Graphic Windows). Janela de Comando ou "prompt" padrão (>>) pode ser usado como um shell interativo de matemática. Sequências de comandos podem ser guardadas em um arquivo de texto, tipicamente utilizando o MATLAB Editor, como um script ou encapsulado em uma função e estes são guardados em ficheiros do tipo M-File (.m) MATLAB no IST O MATLAB está disponível no IST para Sistema Operativo Windows, UNIX ou Mac. As últimas versões do MATLAB estão disponíveis para download no site: https://delta.ist.utl.pt/software/matlab.php Note que, estas licenças não permitem acesso à Toolbox Symbolic. Para requerer esta toolbox deverá enviar um email para ci@ist.utl.pt. MATLAB O Básico Vamos começar com algo simples, como a definição de um vector linha cujos elementos são os números 1, 2, 3, 4, 5. O vector será guardado na variavel x. >> x = [1 2 3 4 5] x = 1 2 3 4 5 Para criar um vector coluna, podemos utilizar o ponto e vírgula 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 = [1 2 3 4 5]' Vectores e Matrizes É interessante também ver como se definem vectores e matrizes com elementos igualmente espaçados. Isto é feito definindo o primeiro elemento do vector, o incremento e o último elemento. Por exemplo, vamos criar o vector u cujos elementos são 0, 1, 2, 3, 4, 5, e o vector u2 cujos elementos são os números pares de 0 a 8. >> u = [0:5] u = 0 1 2 3 4 5 >> u2 = [0:2:8] u2 = 0 2 4 6 8 O Matlab permite-nos localizar partes específicas de um vector/matriz. Para exemplo, queremos apenas os 3 primeiros elementos do vector u2. >> u2(1:3) 0 2 4 Definir uma matriz é muito semelhante a definir um vector. Podemos tratar cada linha de uma matriz como um vector. >> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 Podemos referir-nos a um elemento particular da matriz utilizando os parêntises. Por exemplo, o número 5 encontra-se na segunda linha, segunda coluna, logo: >> A(2,2)
5 Podemos também extrair uma coluna/lina inteira, usando :. Por exemplo, se quisermos todos os elementos da segunda coluna. >> A(:,2) 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 = [1 2 3; 4 5 6; 7 8 9]; >> B = [1 0 1; 2 1 0; 3 3 3]; >> A + B 2 2 4 6 6 6 10 11 12 O mesmo acontece com vectores. >> s = [1 2 3] s = 1 2 3 >> t = [2; 3 ; 5] t = 2 3 5 >> s t Error using Matrix dimensions must agree. Tal como esperado, não nos é possível substrair um vector de tamanho 1-por-3 por um de 3-por-1.
Como tal teriamos que usar s t'. O mesmo cuidado tem que ser mantido quando se trata da multiplicação. >> B * s Error using * Inner matrix dimensions must agree. >> B * t 7 7 30 Há outras operações que queremos ver executadas elemento a elemento da matriz ou vector. Por exemplo, se quisermos multiplicar cada elemento do vector por si próprio. s 2 = [s(1)*s(1), s(2)*s(2), s(3)*s(3)]. >> s*s Error using * Inner matrix dimensions must agree. Neste caso, para que tal operação seja possível, é necessário especificar que a multiplicação é feita elemento a elemento, utilizando.* ou.^2. >> s.*s >> s.^2 1 4 9 1 4 9 Os operadores disponíveis no matlab são + adição subtracção * multiplicação ^ potência ' transposto \ divisão à esquerda / divisão à direita
O MATLAB permite-nos visualizar valores reais de duas formas: 4 casas decimais ou 16 casas decimais >> format short (4 casas decimais) >> format long (16 casas decimais) Algumas funçoes disponíveis 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 seno trigonométrico cosseno trigonomirco tangent exponencial logaritmo natual valor absoluto raiz quadrada resto arredondamento ao inteiro mais próximo Funções disponíveis em MATLAB para vectores e que retornam escalares. Max min length sort sum prod maior elemento menor eemento tamanho do vector ordenar vector (ascente) soma dos elementos produto dos elementos >> length(s) 3 >> max(s) 3 Funções disponíveis em MATLAB para martizes. Eye zeros ones diag matriz identidade matriz de zeros matriz de uns extrai a diagonal de uma matriz (ou usada para criar diagonal de uma matriz)
triu parte triangular superior de uma matriz tril parte triangular inferior de uma matriz. >> eye(4,4) 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 >> ones(2) 1 1 1 1 Alguns comandos que podem ser úteis para o trabalho de MC. Det inv eig poly norm determinante da matriz inverso de uma matriz valores próprios/vectores próprios polinómio caracteristico norma da matriz (norma 1, norma 2, norma infinita) >> K = [9, 7 0; 0, 8, 2; 7, 2, 3] K = >> det(a) 278 9 7 0 0 8 2 7 2 3 Podemos confirmar os nossos resultados fazo: KK -1 = I. >> K*inv(K) 1.0000 0 0.0000
0 1.0000 0 0.0000 0.0000 1.0000 Gráficos (Plot) Dados 2 vectores, de tamanho igual, podemos facilmente desenhar o gráfico da função utilizando a função plot. Por exemplo, vamos criar o gráfico da função y = cos(x), de -π a π (com incremento de 0.01) >> x = [ pi:0.01:pi]; >> y = cos(x); >> plot(x,y) Para melhor representar o grafico podemos catalogar cada eixo. >> xlabel('x'); >> ylabel('y=cos(x)'); >> title('grafico da função');
É possível utilizar diferentes linhas, cores e símbolos para definir os gráficos. Alguns exemplos. Y amarelo. ponto m magenta o círculo r vermelho * estrela g verde tracejado v azul Condições Ifs if condição operação elseif condição operação else operação Para exemplo valor definir uma função definida por ramos
Definimos o dominio de -1 a 1. >> x = 1:0.01:1; >> for i=1:length(x) if x(i) < 0.5 F(i) = x(i).^2; else F(i) = 0.25; >> plot(x,f) Para criarmos rotinas no matlab, criamos ficheiros.m que são consideradas funções. A título de exemplo vamos criar uma função com o método da bisecção. >> syms x >> f = x^3+1 f = x^3 + 1 >> f = inline(f) f =
Inline function: f(x) = x.^3+1.0 >> r = bisection( f, 3,2, 15, 10^ 3 ); O método convergiu p = 0.9999 Ficheiro bisection.m function [ r ] = bisection( f, a, b, nmaxiter, tolerancia ) %f : funã à o %a : limite inferior do intervalo %b : limite superior do intervalo %nmaxiter : nr mã ximo 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) nã o tãªm sinais contrã rios' ); p = (a+b)/2; for i = 1:nmaxIter if f(a)*f(p)<0 b = p; else a = p; p = (a + b)/2; err = abs(f(p)); if err < tolerancia disp('o metodo convergiu'); p f(p) break; ; r(i) = p; if i == nmaxiter disp('o metodo não convergiu');
Imprimir resultados printf('%s %d\n', 'iteradas= ',i); printf('%s %d %d %s\n', 'Raiz = ',p); printf('%s %d\n', 'erro= ',err); %s Texto %d valor real/inteiro Derivada de Funções (diff) >> syms x >> f = x^2+3 f = x^2 + 3 >> df = diff(f) df = 2*x >> d2f = diff(f,2) d2f = 2