Introdução ao Matlab: comandos - Professor Doutor Cesar da Costa

Propaganda
EST - Setúbal
SINAIS, SISTEMAS E SIMULAÇÃO
Laboratório 1a - Trabalho de Matlab
“Introdução ao Matlab: comandos”
Curso de LEACI (3º Sem) e LEII (5º Sem)
Realizado em Outubro / 2006 por João Nabais. Revisto e formatado em Novembro / 2006 por Rogério Largo
Curso: _____ Turma:_____ Grupo: ___
Objectivos
O trabalho tem por principal objectivo a familiarização
com a ferramenta computacional Matlab.
Em
concreto pretende-se salientar as seguintes tarefas,
•
•
•
Álgebra (manipulação e operações sobre matrizes, vectores)
Gráficos (criar e editar gráficos 2D)
Programação (realização de scripts e funções)
O Matlab tem um vasto campo de aplicação onde se salientam entre outras as seguintes áreas
•
•
•
•
•
•
Controlo de Sistemas
Processamento de Sinais
Aquisição de Sinais
Instrumentação
Optimização
Financeira
A. Apresentação
A interface do Matlab é intuitiva e simples. Ao abrir a aplicação tem acesso ao ambiente de
desenvolvimento que se caracteriza por disponibilizar as seguintes secções,
Barra de Menus dependentes da tarefa seleccionada
Área de introdução de comandos e visualização de resultados (prompt)
Menu de navegação de directórios
Visualização do Workspace (variáveis criadas e existentes na memória)
Visualização do histórico dos comandos introduzidos por sessão de trabalho
Acesso ao Editor para programação
Vamos proceder à abertura de alguns módulos programados para verificar as potencialidades.
Na linha de comandos escreva seguido de enter,
>> travel
>> truss
>> teapotdemo
>> thermo
B. Configuração – Directório de Trabalho
Antes de iniciarmos a sessão de trabalho vamos modificar o directório de trabalho – menu
superior. Assim, tudo o que estiver nesta directoria estará disponível para o Matlab. São
exemplos disso os M-Files desenvolvidos pelos teus colegas.
SSSimul
Lab-1a
1
EST - Setúbal
Caso pretendas reconhecer o conteúdo de uma directoria mas trabalhar noutra então terás de
adicionar a primeira ao conjunto de directorias em que o Matlab procura por código,
Menu/Set_Path
C. Álgebra
Pode definir constantes. Os nomes das variáveis não devem começar por números.
>> a = 10, b = 5, c = 2
O operador “,” serve para realizar espaçamento entre instruções. Pode realizar mais do que
uma instrução na mesma linha.
O que vê na prompt do Matlab? Visualize o Workspace. O que regista?
[R]
Para limpar variáveis da memória pode apagá-las. Estando a monitorizar o workspace faça,
>> clear a
>> clear all
Voltemos a definir as mesmas variáveis, mas agora com uma pequena alteração nas linha de
código,
>> a = 10; b = 5; c = 2;
Também se pode pedir ao Matlab a listagem do workspace, na prompt faça: >> whos.
O que vê na prompt do Matlab? Visualize o Workspace. Qual a função do operador “;” nesta
linha de código?
[R]
Sobre variáveis pode realizar operações. Para se aceder à listagem de operações disponíveis,
faça na prompt do Matlab,
>> help +
Sempre que queira saber algo (precise de ajuda sobre uma função) pode na prompt do Matlab
introduzir: >> help [nome_função], (sem parentesis). Outra forma de pedir ajuda é recorrer à
barra de menus.
Podemos realizar algumas operações,
>> rho = ( 1 + sqrt(5))/2
>> a = abs(3+4*i)
>> huge = exp(log(realmax))
Que cálculo é realizado em cada instrução?
[R]
SSSimul
Lab-1a
2
EST - Setúbal
Decerto reparaste que foram feitas referências a variáveis não existentes no workspace e o
código correu sem problemas. O Matlab tem um conjunto de números definidos por defeito.
Qual o valor de …
[R]
pi ….
[R]____________________________________
i…
____________________________________
j…
____________________________________
eps …
____________________________________
realmax …
____________________________________
realmin …
____________________________________
inf …
____________________________________
NaN …
____________________________________
C1. Matrizes
Vamos iniciar a manipulação de matrizes. Defina-se na prompt do Matlab a matriz A,
>> A = [ 16 , 2, 3 , 13 ; 5 , 11, 10, 8 ; 9 , 7, 6, 12; 4 , 14, 15, 1]
Os vectores e matrizes definem-se sempre por parêntesis rectos. Dentro dos argumentos do
vector o operador “,” separa os elementos e o operador “;” muda de linha.
Quais as dimensões da matriz definida?
[R]
A dimensão de uma matriz pode ser lida pelo comando “size”.
Agora realize a soma dos valores por coluna da matriz, faça,
>> sum(A)
Alguma particularidade na resposta?
[R]
Transponha a matriz A e defina a matriz B como sendo a transposta, faça,
>> B = A’
Agora realize a soma dos valores por coluna. Alguma particularidade?
[R]
Aceda aos elementos da diagonal da matriz A e some-os, faça,
>> sum( diag(A) )
Pode-se encadear operações numa mesma instrução. Caso prefiras por legibilidade de código
podes fazer uma instrução por linha.
Note-se: As funções têm sempre parêntesis curvo para receber os argumentos.
SSSimul
Lab-1a
3
EST - Setúbal
O resultado anterior poderia ser obtido pela referência a cada elemento da matriz em particular,
faça,
>> A(1,1) + A(2,2) + A(3,3) + A(4,4)
Os elementos de um array são obtidos por referência dos seus índices dentro de parêntesis
curvos.
Qual a dimensão de diag(A)? Alguma particularidade quanto ao resultado?
[R]
É verdade! És um mágico da matemática!
Acabaste de encontrar uma matriz mágica. Faz no Matlab,
>> A – magic(4)
Que operação acabaste de realizar? Que te permite concluir?
[R]
Existem mais matrizes interessantes que podem ser definidas. Fazer no Matlab:
Que operações são realizadas pelas instruções seguintes: (pode fazer help para pormenores)
>> n = 3
>> zeros(n)
>> ones(n)
>> eye(n)
>> rand(n)
_________________________________________________
_________________________________________________
_________________________________________________
_________________________________________________
Existem operações especialmente dedicadas à manipulação de matrizes já tuas conhecidas.
Aqui são implementadas via,
>> rank(A)
>> det(A)
>> eig(A)
>> inv(A)
>> svd(A)
_________________________________________________
_________________________________________________
_________________________________________________
_________________________________________________
_________________________________________________
C2. Mais um pouco sobre manipulação de matrizes…
Caso queiras aceder apenas a algumas colunas ou linhas da matriz A faz,
>> D = A(1:3,:)
O operador “:” no primeiro caso é lido como “do índice 1 a 3” e no segundo caso como
“qualquer”.
Qual a semelhança entre D e A?
SSSimul
Lab-1a
4
EST - Setúbal
[R]
Caso pretendas apagar uma coluna ou linha da matriz faz,
>> D(:,2) = [ ]
O que foi apagado da matriz original A?
[R]
Quando se define uma matriz nem sempre tem de ser introduzido elemento a elemento. Podem
ser adicionados elementos a matrizes ou criada uma matriz a partir de matrizes. Chama-se a
isto concatenação. Faça na prompt do Matlab,
>> X = A
>> X(4,5) = 17
Qual a dimensão final de X ?
[R]
>> C = [A , A+32; A+48 A+16]
A matriz C é não singular? (Não te recordas da definição, usa o método indicado acima)
[R]
O Matlab é ou não uma ferramenta amiga do programador? …. ________________________
Cria no Matlab o seguinte vector de inteiros, (já iremos estudar melhor)
>> n = [-5:5]’
O operador “:” nesta instrução indica a existência de um intervalo, no caso entre -5 e 5 com
incremento unitário. Como procederias para cumprir o mesmo objectivo noutra linguagem?
[R]
Sobre um vector de dados pode-se pretender realizar operações, nomeadamente calcular o
quadrado de cada entrada entre outras.
As operações sobre elementos de vectores são geralmente acompanhadas do operador “.”.
(Fazer >> help + ). No Matlab faz:
>> pow = [ n, n.^2, 2.^n]
Qual o significado de cada coluna de pow?
SSSimul
Lab-1a
5
EST - Setúbal
[R]
Pode realizar gráficos de dados armazenados em matrizes. Em relação ao exemplo cada
coluna da matriz tem o significado indicado. Para ver o significado graficamente faça na prompt
do Matlab,
>> plot(n,pow)
Qual o significado da curva a azul, verde e vermelha?
[R]
O nível de iniciado está concluído. Decerto ficaste cansado de introduzir comandos e de
os reintroduzir quando algum erro acontecia. Utilizar a pompt do Matlab é apenas para
amadores, os profissionais utilizam as capacidades de programação que o Matlab
oferece.
D. Nível Avançado
O Matlab permite a programação em ficheiros designados de M-file. No caso existem
dois tipos distintos de M-file,
Scripts – que não aceitam nem retornam argumentos. Operam sobre o workspace e
podem criar variáveis para o workspace,
Function – aceitam e retornam argumentos. Possuem variáveis locais (internas) À
própria função.
D1. – M-file
[O código elaborado nesta secção tem de ser entregue no final da sessão]
Vamos focar atenção para já nos Scripts (a utilização de funções é análoga).
Para consolidar a manipulação de M-file abra a partir da barra de menus do Matlab File/New/Mfile. Assim abre o editor do Matlab onde pode introduzir exactamente os mesmos comandos
que realizou anteriormente directamente na prompt do Matlab. Realize um ficheiro muito
simples introduza,
%
% O meu primeiro M-file
%
n = (-5:5)’;
pow = [ n, n.^2, 2.^n];
plot(n,pow)
Grava o ficheiro com o nome “eureka”.
O caracter “%” é especial pois indica que tudo o que estiver à direita é interpretado como
comentário. Caso a primeira linha de código se inicie com o símbolo “%” então o bloco de
linhas consecutivo iniciado pela linha indicada representa o help do ficheiro. Confuso? Faz no
Matlab
>> help eureka
SSSimul
Lab-1a
6
EST - Setúbal
Mais claro agora?
Para correr o seu ficheiro tem duas alternativas:
• Chamar directamente a partir da prompt do Matlab introduzido apenas o nome do
ficheiro
• Atalhos existente na barra de menus do Editor.
No Matlab faça,
>> eureka
Vamos construir uma função para implementar o mesmo código. A função requer uma
definição padronizada logo na primeira linha,
function “valores retornados” = “nome_da_função”(argumentos_entrada)
A função obedece ao mesmo critério de help que um script –o bloco de comentário logo abaixo
da definição da function é o help da função.
O nome do ficheiro M-file da função e o nome da função devem ser o mesmo.
Usualmente uma função recebe argumentos. Atendendo ao código pode-se utilizar a
parametrização do vector inicial, isto é, n = (-arg:arg)’. Assim introduz,
function pow = eureka_f(arg)
%
% A minha primeira function
%
n = (-arg:arg)’;
pow = [ n, n.^2, 2.^n];
plot(n,pow)
Grava o ficheiro com o nome “eureka_f”.
Antes de correr a função repara no worksapce existente após o Script. Agora apaga todas as
variáveis e fecha a figura. Chama a tua função com um parâmetro do valor que achares
criterioso.
Que diferença existe entre o código implementado via Script e via Function? (Sugestão: analisa
o workspace)
[R]
SSSimul
Lab-1a
7
Download