c&p matlab2006 1 - fenix.tecnico.ulisboa.ptp... · os índices iou jpodem ser utilizados para...

24
1 MATLAB João Miguel da Costa Sousa 525 Introdução MATLAB (MATrix LABoratory) Programa optimizado para cálculos de engenharia e científicos Programa MATLAB implementa a linguagem de programação MATLAB. Contém mais de 1000 funções pré implementadas. Objectivo: ensinar a escrever, depurar e optimizar programas em MATLAB. Livro: Stephen J. Chapman. MATLAB Programming for Engineers, 3rd Edition, Thomson.

Upload: phungdien

Post on 26-Dec-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

1

MATLAB

João Miguel da Costa Sousa 525

Introdução

� MATLAB (MATrix LABoratory)

� Programa optimizado para cálculos de engenharia e científicos

� Programa MATLAB implementa a linguagem de programação MATLAB.

� Contém mais de 1000 funções pré implementadas.

� Objectivo: ensinar a escrever, depurar e optimizar programas em MATLAB.

� Livro: Stephen J. Chapman. MATLAB Programmingfor Engineers, 3rd Edition, Thomson.

2

João Miguel da Costa Sousa 526

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.

João Miguel da Costa Sousa 527

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 compildor 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.)

3

João Miguel da Costa Sousa 528

Matlab Desktop

MATLAB Command

Window

Current Directory Browsermostra a lista de ficheiros nadirectoria actual

Abre o Help Browser

Esta janela permitemodificar a directoria actual

João Miguel da Costa Sousa 529

Command Window

Entrada do utilizador

Resultado do cálculo

4

João Miguel da Costa Sousa 530

Command History Window

João Miguel da Costa Sousa 531

Start Button

5

João Miguel da Costa Sousa 532

Edit/Debug Window

João Miguel da Costa Sousa 533

Figure Windows

>> x = 0:0.1:6;

>> y = sin(x);

>> plot(x,y)

6

João Miguel da Costa Sousa 534

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).

João Miguel da Costa Sousa 535

Workspace Browser

Workspace Browser

mostra a lista de variáveisdefinida no workspace

Array Editor permite editarqualquer variável seleccionadano Workspace Browser.

7

João Miguel da Costa Sousa 536

Help Browser

>> help

>> lookfor

>> demo

João Miguel da Costa Sousa 537

Execução do Matlab

� 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!

8

João Miguel da Costa Sousa 538

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

João Miguel da Costa Sousa 539

Matlab para cálculo

�Operações: +, -, *, /, ^

�Exemplo:

>> A = pi * 0.1^2

A =

0.0314

>> V = A * 0.5

V =

0.0157

� O valor de pi é pre-definido.

� O valor de A guardado no workspace é utilizado para calcular V.

9

MATLAB

Elementos básicos

João Miguel da Costa Sousa 541

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ª coluna

�Uma variável em Matlab corresponde a uma região de memória contendo uma tabela 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.

10

João Miguel da Costa Sousa 542

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.

João Miguel da Costa Sousa 543

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 defeito, 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

11

João Miguel da Costa Sousa 544

Tipo char

�As variáveis do tipo char são escalares ou tabelas de valors de 16 bits, representando um carácter simples.

�Exemplo:>> comentario = ‘Isto e uma cadeia de caracteres’

� é um array de 1×26.

João Miguel da Costa Sousa 545

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ção

2. Ler dados do teclado

3. Ler dados de um ficheiro

� Instruções de atribuição:variavel = 40i;

tabela = [1 2 3 4];

x = 1; y = 2;

array = [1, 2, 3; 4, 5, 6];

12

João Miguel da Costa Sousa 546

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]

> []

�Número de elementos nas linhas e colunas devem ser o mesmo, senão o Matlab retorna um erro.

João Miguel da Costa Sousa 547

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 3

4 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 0

0 0 5

13

João Miguel da Costa Sousa 548

Inicialização com expressões

�Muito útil para variáveis com muitos elementos�Operador ‘:’

valor_inicial:incremento:valor_final

�Exemplos:>> x = 1:2:10

x =

1 3 5 7 9

>> angulos = (0.01:0.01:1) * pi;

>> g = 1:4;

>> h = [g’ g’];

� produz a matriz h =

1 1

2 2

3 3

4 4

João Miguel da Costa Sousa 549

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);

14

João Miguel da Costa Sousa 550

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

João Miguel da Costa Sousa 551

Tabelas multidimensionais

�Exemplo de tabela tridimensional:>> c(:,:,1) = [1 2 3; 4 5 6];

>> c(:,:,2) = [7 8 9; 10 11 12];

>> whos c

Name Size Bytes Class

c 2x3x2 96 double array

�O Matlab aloca os elementos de uma tabela em memória por colunas (por ordem de índices).

15

João Miguel da Costa Sousa 552

Exemplo de tabela em memória

>> a = [1 2 3; 4 5 6; 7 8 9; 10 11 12];

a =

1 2 3

4 5 6

7 8 9

10 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)

Arrangement

in 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) = ?

João Miguel da Costa Sousa 553

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.

16

João Miguel da Costa Sousa 554

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.

João Miguel da Costa Sousa 555

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 inteiros� Caracteres 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

17

João Miguel da Costa Sousa 556

Função disp

�Esta função aceita um array e mostra o valor na Command Window. Se for do tipo char, imprime 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

João Miguel da Costa Sousa 557

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

18

João Miguel da Costa Sousa 558

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 – insere os dados de um ficheiro no workspace:load nomeficheiro

João Miguel da Costa Sousa 559

Operadores aritméticos

19

João Miguel da Costa Sousa 560

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.

João Miguel da Costa Sousa 561

Funções mais comuns

�Funções matemáticas� abs(x), sin(x), cos(x), exp(x), log(x), mod(x,y),

[valor,indice] = max(x), [valor,indice] = min(x)

�Funções de arredondamento� round, ceil, floor, etc.

�Conversão de cadeias de caracteres� char(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)

20

João Miguel da Costa Sousa 562

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)

João Miguel da Costa Sousa 563

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;

21

João Miguel da Costa Sousa 564

Gravar gráficos em ficheiro

>> print –dtiff exemplo.tif

�Ou:

João Miguel da Costa Sousa 565

Gráficos múltiplos

x = 0:pi/100:2*pi;

y1 = sin(2*x);

y2 = 2*cos(2*x);

plot(x,y1,x,y2);

22

João Miguel da Costa Sousa 566

Linhas, cores e legendas

�Cores possíveis para as linhas: y, m, c, r, g, b, w, b

�Marcas 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

João Miguel da Costa Sousa 567

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’)

23

João Miguel da Costa Sousa 568

Escalas logarítmicas

João Miguel da Costa Sousa 569

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);

24

João Miguel da Costa Sousa 570

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 inicializadas

� Forem utilizados parêntesis para clarificar atribuições.