MATLAB - fenix.tecnico.ulisboa.ptP_C... · João Sousa – Miguel Pedro Silva Computação e...

47
MATLAB

Transcript of MATLAB - fenix.tecnico.ulisboa.ptP_C... · João Sousa – Miguel Pedro Silva Computação e...

MATLAB

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.

MATLAB

Elementos básicos

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.