2João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Introdução
MATLAB (MATrix LABoratory)Programa optimizado para cálculos de engenharia e científicosPrograma MATLAB implementa a linguagem de programação MATLAB.Contém mais de 1000 funções pré implementadas.Objectivo: como escrever, depurar e optimizar programas em MATLAB.Livro: Stephen J. Chapman. MATLAB Programmingfor Engineers, 3rd Edition, Thomson.
3João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Vantagens do Matlab
Fácil de utilizar: é uma linguagem interpretada, sendo fácil de escrever e testar programas.Plataforma independente: corre em Windows, Linux, Unix e Macintosh.Contém funções pré-definidas. Pode ser completado com toolboxes (controlo, processamento imagem, etc.)Gera gráficos com facilidade.Pode gerar Graphical User Interfaces.O código pode ser compilado, mas é mais lento que Fortran ou C (C++), por exemplo.
4João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Desvantagens do Matlab
É uma linguagem interpretada, logo é mais lento que as linguagens compiladas. Este problema pode ser reduzido usando o compilador do Matlab.O Matlab é caro. É cerca de 10 vezes mais caro que o compilador de C ou Fortran. Existe no entanto a Student Edition of Matlab, que ébastante mais barata. Esta versão contém quase todas as potencialidades do Matlab. (O Matlab está instalado no LTI e no LEMAC.)
5João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Matlab Desktop
MATLAB Command Window
Current Directory Browsermostra a lista de ficheiros nadirectoria actual
Abre o Help Browser
Esta janela permitemodificar a directoria actual
6João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Command Window
Entrada do utilizador
Resultado do cálculo
7João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Command History Window
8João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Start Button
9João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Edit/Debug Window
10João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Figure Windows
>> x = 0:0.1:6;>> y = sin(x);>> plot(x,y)
11João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Matlab Workspace
>> z = 10;Esta atribuição cria uma varável chamada z no workspace (memória do computador).O workspace contém todas as variáveis e matrizes.A lista de todas as variáveis pode ser obtida através do comando whos.O comando clear pode ser utilizado para apagar variáveis da memória (workspace).
12João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Workspace Browser
Workspace Browsermostra a lista de variáveisdefinida no workspace
Array Editor permite editarqualquer variável seleccionadano Workspace Browser.
13João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Help Browser
>> help>> lookfor>> demo
14João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Execução do Matlab ZZZ
Quando o utilizador escreve um nome, o interpretador de Matlab procura o seguinte:1. Procura uma variável com o nome dado. Se o nome for
uma variável, mostra o seu valor.2. Verifica se existe um ficheiro M-file na directoria de
trabalho. Se existir, executa essa função ou comando.3. Verifica se há uma M-file em qualquer directoria do
caminho do matlab (search path). Se existir, executa essa função ou comando.
O Matlab procura primeiro por nomes de variáveis. Se for definida uma variável com o nome de uma M-file, essa função ou comando torna-se inacessível!
15João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Matlab Path
Se existir mais de uma função ou comando com o mesmo nome, a primeira a ser encontrada será executada.
>> which nomefunção
16João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Matlab para cálculo
Operações: +, -, *, /, ^Exemplo:
>> A = pi * 0.1^2A =
0.0314>> V = A * 0.5V =
0.0157
O valor de pi é pre-definido.O valor de A guardado no workspace é utilizado para calcular V.
18João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Variáveis e arrays
A unidade de dados fundamental em Matlab é a tabela (array) que pode ser um vector ou uma matriz.Em Matlab os vectores são uma linha ou uma coluna.Exemplo: a(3,2) – elemento da 3ª linha, 2ª colunaUma variável em Matlab corresponde a uma região de memória contendo uma tabela (array) com um dado nome.As variáveis em Matlab devem começar por uma letra, seguida de letras, números ou “_”. Devem ter até 63 caracteres.Variáveis devem ter nome com significado correcto.
19João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Variáveis e arrays
O Matlab não exige a declaração de variáveis. As variáveis podem ser criadas em qualquer altura.Cada programa deverá assim incluir no seu cabeçalho a descrição das variáveis utilizadas.Matlab distingue maiúsculas de minúsculas! As variáveis Nome, NOME e nome são diferentes.É aconselhável utilizar sempre minúsculas nos nomes das variáveis.Tipos mais comuns em Matlab: double e char.
20João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Tipo double
double: reais de dupla precisão (64 bits). Valores de 10–308 a 10308 com 15 a 16 algarismos significativos.Todos os valores numéricos são double por omissão, e podem ser reais, imaginários ou complexos.Os índices i ou j podem ser utilizados para números imaginários.Exemplo de número complexo:
>> var = 10 + 10i ou>> var = 10 + 10j
21João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Tipo char
As variáveis do tipo char são escalares ou tabelas de valores de 16 bits, representando um carácter simples.
Exemplo:>> comentario = ‘Isto e uma cadeia de caracteres’
é um array de 1×26.
22João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Inicialização de variáveis
As variáveis em Matlab são automaticamente criadas quando são inicializadas.Há várias formas de inicializar variáveis:1. Atribuir valores numa instrução de atribuição2. Ler dados do teclado3. Ler dados de um ficheiro
Instruções de atribuição:variavel = 40i;array_1 = [1 2 3 4];x = 1; y = 2; array_2 = [1, 2, 3; 4, 5, 6];
23João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Inicialização de arrays
Expressões com matrizes:> [3.4]> [1.0 2.0 3.0]> [1.0, 2.0, 3.0]> [1, 2, 3; 4, 5, 6]> [1, 2, 3;
4, 5, 6]> []
Uma matriz deve ter o mesmo número de elementos em cada linha, senão o Matlab retorna um erro.
24João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Inicializações compostas
Expressões com matrizes:>> a = [0 1+7];
produz o vector a = [0 8]>> e = [1, 2, 3; 4, 5, 6]e =
1 2 34 5 6
>> b = [a(2) 7 a];
produz o vector b = [8 7 0 8]>> c(2,3) = 5;
produz a matriz c =0 0 00 0 5⎡ ⎤⎢ ⎥⎣ ⎦
25João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Inicialização com expressões
Muito útil para variáveis com muitos elementosOperador ‘:’valor_inicial:incremento:valor_final
Exemplos:>> x = 1:2:10x =
1 3 5 7 9>> angulos = (0.01:0.01:1) * pi;>> g = 1:4;>> h = [g’ g’];
produz a matriz h =
1 12 23 34 4
⎡ ⎤⎢ ⎥⎢ ⎥⎢ ⎥⎢ ⎥⎣ ⎦
26João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Inicialização com funções do Matlab
O Matlab contém funções que podem ser utilizadas para inicialização de variáveis:Exemplos:a = zeros(2);b = zeros(2,3);c = [1 2; 3 4];d = ones(size(c));e = eye(5);f = [1; 2; 3; 4]comprimento = length(f);
27João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Inicialização do teclado
Exemplos:>> entrada1 = input(‘Introduza um valor:’);Introduza um valor: 1.23
guarda o valor real 1.23 em entrada1>> entrada2 = input(‘Introduza um valor:’,‘s’);Introduza um valor: 1.23
guarda a cadeia de caracteres ‘1.23’ em entrada2
28João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Tabelas multidimensionais
Exemplo de tabela tridimensional:>> c(:,:,1) = [1 2 3; 4 5 6];>> c(:,:,2) = [7 8 9; 10 11 12];>> whos cName Size Bytes Classc 2x3x2 96 double array
O Matlab aloca os elementos de uma tabela em memória por colunas (por ordem de índices).
29João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Exemplo de tabela em memória
>> a = [1 2 3; 4 5 6; 7 8 9; 10 11 12];a = 1 2 34 5 67 8 910 11 12
1 2 3
4 5 6
7 8 9
10 11 12
(a)
a
7
10
4
1
11
8
5
2
12
9
6
3
.
.
.
.
.
.
(b)
Arrangementin ComputerMemory
a(1,1)
a(2,2)
a(1,2)
a(4,1)
a(3,1)
a(2,1)
a(4,3)
a(3,3)
a(2,3)
a(1,3)
a(4,2)
a(3,2)
a(5) = ?
30João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Sub-tabelas e função end
Exemplos:tabela1 = [1.1 -2.2 3.3 -4.4 5.5];
tabela1([1 4]) produz o vector [1.1 -4.4]tabela1(1:2:5) produz o vector [1.1 3.3 5.5]
Em tabelas multidimenionais “:” pode ser utilizado para todos os valores desse índice.A função endtabela2 = [1 2 3 4 5 6 7 8];
tabela2(5:end) retorna o vector [5 6 7 8]As atribuições podem ser efectuadas a directamente a sub-tabelas.
31João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Valores pré-definidos em Matlab
pi – contém o valor de pi com 15 algarismos significativos. i, j – valor da raíz de –1.Inf – infinito, tal como o resultado da divisão por zero.NaN – not-a-number, tal como a divisão de zero por zero.clock – retorna uma linha com 6 elementos com ano, mês, dia, hora, minuto e segundo.date – retorna a data no formato de cadeia de caracteres. Exemplo: 17-Nov-2005.eps – “epsilon” que é a menor diferença entre dois números representados no computador.ans – resultado de uma expressão que não foi explicitamente atribuído a uma variável.
32João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Saída de dados
O mais simples é não escrever o “;” no fim da linha de código.Formatos por defeito:
Valores inteiros são impressos como inteirosCaracteres são impressos como cadeias de caracteres
Reais podem ter vários formatos:format short – tem 4 dígitos depois do ponto decimal:Exemplos: 12.3457 ou 1.0323e+023
format long – tem 14 dígitos depois do ponto decimal:Exemplos: 12.34578901234567 ou1.23457890123457e+01
33João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Função disp
Esta função aceita um array e mostra o valor na Command Window. Se for do tipo char, apresenta a string contida nesse array.Utiliza as funções num2str e int2str.Exemplo:
>> str = [‘O valor de pi = ’ num2str(pi)];>> disp(str);
O valor de pi = 3.1416
34João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Função fprintf
Forma geral: fprintf(formato, dados)Formatos:
%d – formato para inteiros%f, %e, %g – formato para reais (floating point, exponencial e o mais curto dos dois)\n – muda de linha.
Exemplos:>> fprintf(‘O valor de pi e %f \n’,pi);
O valor de pi e 3.141593>> fprintf(‘O valor de pi e %6.2f \n’,pi);
O valor de pi e 3.14
35João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Ficheiros de dados
Comando save – grava variáveis do workspace num ficheiro:save nomeficheiro var1 var2 var3
Os ficheiros gravados têm a exensão .mat por defeito, e são conhecidos como MAT-files.Este formato pode ser lido e escrito pelo Matlab. Os dados podem ser gravados em ASCII com “-ascii”.Comando load – carrega os dados de um ficheiro no workspace:load nomeficheiro
36João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Operadores aritméticos
37João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Hierarquia de operações
Prioridade dos operadores:1. Todos os parêntesis são avaliados, começando dos interiores
para os exteriores.2. As exponenciações são efectuadas da esquerda para a
direita.3. As multiplicações e divisões são efectuadas em seguida da
esquerda para a direita.4. Adições e subtracções são efectuadas por último também da
esquerda para a direita.
38João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Funções mais comuns
Funções matemáticasabs(x), sin(x), cos(x), exp(x), log(x), rem(x,y), [valor,indice] = max(x), [valor,indice] = min(x)
Funções de arredondamentoround, ceil, floor, etc.
Conversão de cadeias de caractereschar(x) – converte uma matriz numérica em caracteres.double(x) – converte uma string numa matriz de reais.int2str, num2str – convertem números em strings.str2num(x)
39João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Introdução às figuras
Para criar gráficos, basta calcular dois vectores x e ycom os valores e chamar a função plot:x = 0:0.1:10;y = x.^2 – 10.*x + 15;plot(x,y)
40João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Gráficos xy simples
x = 0:0.1:10;y = x.^2 – 10.*x + 15;plot(x,y);title(‘Plot of y = x.^2 – 10.*x + 15’);xlabel(‘x’);ylabel(‘y’);grid on;
41João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Gravar gráficos em ficheiro
>> print –dtiff exemplo.tif
Ou:
42João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Gráficos múltiplos
x = 0:pi/100:2*pi;y1 = sin(2*x);y2 = 2*cos(2*x);plot(x,y1,x,y2);
43João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Linhas, cores e legendas
Cores possíveis para as linhas: y, m, c, r, g, b, w, kMarcas possíveis: ., o, x, *, s, d, ...Estilo de linhas: -, :, -., --Local das legendas:
NW NL NC NR NE
TW TL TC TR TE
MW ML MC MR ME
BW BL BC BR BE
SW SL SC SR SE
Limits of Plot Axes
44João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Exemplo
x = 0:pi/100:2*pi;y1 = sin(2*x);y2 = 2*cos(2*x);plot(x,y1,’k-’,x,y2,’b--’);title(‘Plot of f(x) = sin(2x) and its derivative’);xlabel(‘x’);ylabel(‘y’);grid on;Legend(‘f(x)’,‘d/dx f(x)’,‘tl’)
45João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Escalas logarítmicas
46João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Exemplo: conversão de temperaturas
% Ficheiro script: conversao_temp%% Converte temperaturas de graus Fahreneit em graus Kelvin% Revisoes:% Data Programador Alteraçoes% ======= ============= ===============% 20/03/06 Joao M. Sousa Codigo original%% Variaveis:% temperatura_fahr – temperatura em graus Fahreneit% temperatura_kel – temperatura em graus Kelvin%temperatura_fahr = input(‘Escreva uma temperatura em graus Fahreneit: ’);temperatura_kel = (5/9) * (temperatura_fahr - 32) + 273.15;fprintf(‘%6.2f graus Fahreneit = %6.2f kelvin.\n’, ...
temperatura_fahr, temperatura_kel);
47João Sousa João Sousa –– Miguel Miguel Pedro SilvaPedro Silva ComputaComputaçção e Programaão e Programaçção 2007 / 2008ão 2007 / 2008
Erros de programação
Erros sintácticos, tal como em outras linguagens.Como o Matlab é uma linguagem interpretada, estes são logo detectados:>> x = (y + 3) / 2);??? x = (y + 3) / 2);
|Missing operator, comma, or semi-colon.
Erros de run-time. Matlan pode retornar Inf ou NaN.Erros semânticos ou lógicos. Podem ser reduzidos se:
Todas as variáveis forem inicializadasForem utilizados parêntesis para clarificar atribuições.