c&p matlab2006 1 - fenix.tecnico.ulisboa.ptp... · os índices iou jpodem ser utilizados para...
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
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.