Fundamentos de MATLAB
O Ambiente MATLAB
Janela de Comando Escrever comandos
Mostrar resultados em formato de texto Janela de Edição
Escrever programas e funções Editar os valores de variáveis Janela de Workspace
Ver os valores das variáveis Escolher variáveis para editar Janela de História
Ver ou repetir comandos anteriores Janela Current Folder
Ver os ficheiros da directoria corrente Escolher ficheiros para editar
Janelas de Figuras
Modo de Cálculo
A janela de Comando pode ser usada como uma calculadora Escrevem-se os comandos linha a linha
O resultado dos cálculos é atribuído a uma variável denominada ans Exemplo:
>> 55 – 16 ans =
39
Se uma variável contém um valor, esta pode ser usada nos
cálculos seguintes:
>> ans + 11 ans =
Variáveis
A variável ans pode ser útil para cálculos rápidos mas é
insuficiente para programação.
Podem-se definir variáveis com outros nomes apenas por
atribuição de valores.
Os valores são armazenados em locais de memória
correspondentes ao nome da variável.
Não é necessário pré-inicializar uma variável. Se esta não
existir, então é criada na atribuição de valores.
As variáveis podem ter valores individuais (escalares) ou
Escalares
Para atribuir um valor a uma variável, basta escrever o nome
da variável, o sinal de igual e o respectivo valor: >> a = 4
a = 4
O nome de uma variável começa sempre por uma letra e pode
conter letras, números e o underscore '_'.
O resultado dos cálculos não é mostrado se se terminar a
linha de comando com ponto e vírgula ';' >> a = 4;
Para mostrar um valor de uma variável, basta escrever o seu
nome: >> a a =
Escalares
Podem-se escrever múltiplos comandos na mesma linha
desde que sejam separados por vírgula ',' ou ponto e vírgula ';'
>> a = 4, A = 6; x = 1; a =
4
O MATLAB é sensível às maiúsculas e minúsculas. A e a
são duas variáveis diferentes: >> A
A = 6
Escalares
Pode-se usar a variável complexa i para representar números
imaginários:
>> x = 2+i*4 x =
2.0000 + 4.0000i
Existem algumas variáveis pré-definidas:
>> pi ans =
3.1416
Podem-se mostrar os resultados em diferentes formatos (o formato
não altera o valor armazenado na variável) :
>> format short; pi ans = 3.1416 >> format long; pi ans = 3.14159265358979
Vectores e Matrizes
As variáveis podem conter sequências de valores:
Vectores: se só tiverem uma dimensão Matrizes: se tiverem duas dimensões
Os vectores e as matrizes são criados com parênteses
rectos '[' e ']'
Os elementos de uma linha são separados por espaços ' '
ou vírgulas ','
Vectores e Matrizes
Vector linha: >> a = [1 2 3] (>> a = [1,2,3]) a = 1 2 3 Vector coluna: >> a = [1;2;3] a = 1 2 3 Matriz 34: >> 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 12Vectores e Matrizes
A transposta de um vector ou de uma matriz pode ser obtida
com o comando apóstrofo ' >> a = [1;2;3]' a = 1 2 3 >> A = [1 2 3 4; 5 6 7 8; 9 10 11 12]' A = 1 5 9 2 6 10 3 7 11 4 8 12
O comando who mostra os nomes das variáveis existentes O comando whos mostra adicionalmente as dimensões, o
espaço ocupado em memória e o tipo de dados das variáveis Todas as variáveis são matrizes!
Vectores e Matrizes
Se V é um vector então V(i) é o seu i-ésimo elemento:
>> a = [2 4 6 8 10]; x = a(4) x = 8 >> b = [1;3;5;7;9]; y = b(3) y = 5
Se M é uma matriz então M(i,j) é o seu elemento da linha i
e coluna j: >> A = [1 2 3; 4 5 6; 7 8 9]; >> x = A(2,3), y = A(3,2) x = 6 y = 8
Vectores e Matrizes
Funções MATLAB para criação de Vectores e Matrizes zeros: cria uma matriz/vector preenchida com zeros (0); ones: cria uma matriz/vector preenchida com uns (1);
rand: cria uma matriz/vector preenchida com números aleatórios; eye: cria uma matriz identidade;
diag: cria uma matriz diagonal;
linspace: cria um vector linha com elementos linearmente
espacejados;
logspace: cria um vector linha com elementos logaritmicamente
espacejados;
Para obter informação sobre matrizes elementares e
manipulação de matrizes usar o comando: >> help elmat
Vectores e Matrizes
Criação de uma matriz 23 só com zeros:
>> A = zeros(2,3) A =
0 0 0 0 0 0
Criação de um vector linha com 3 uns:
>> x = ones(1,3) x =
1 1 1
Criação de um vector coluna com 2 números aleatórios:
>> y = rand(2,1) y =
0.8147 0.9058
Vectores e Matrizes
Criação de uma matriz identidade de 33:
>> A = eye(3) A =
1 0 0 0 1 0 0 0 1
Criação de uma matriz diagonal de 33:
>> v = [1 3 9]; B = diag(v) B =
1 0 0 0 3 0 0 0 9
Vectores e Matrizes
Criação de um vector linha com 5 elementos linearmente
espacejados:
>> x = linspace(0,1,5) x =
0 0.2500 0.5000 0.7500 1
Criação de um vector linha com 4 elementos
logaritmicamente espacejados:
>> y = logspace(-1,2,4) y =
0.1000 1.0000 10.0000 100.0000
Se o número de elementos for omitido, o vector terá
100 e 50 elementos para linspace e logspace respectivamente.
Vectores e Matrizes
O operador dois pontos ':' pode ser usado na forma
'início:passo:limite' para criar um vector linha com
elementos linearmente espacejados: >> x = 1:0.6:3
x =
1 1.6000 2.2000 2.8000
Se o passo for omitido, o seu valor será 1:
>> y = 3:6 y =
3 4 5 6
Para criar séries decrescentes o passo tem que ser negativo:
>> z = 5:-1.2:2 z =
Vectores e Matrizes
Os dois pontos ':' podem ser usados como wildcard para designar toda uma coluna ou linha de uma matriz:
>> A = [1 2 3; 4 5 6; 7 8 9]; >> A(:,1) ans = 1 4 7 >> A(2,:) ans = 4 5 6
Os dois pontos ':' podem ser usados para obter subconjuntos de colunas ou linhas de uma matriz:
>> A(2:3,1) ans =
4 7
Vectores e Matrizes
A notação com dois pontos ':' permite obter resultados de
uma forma compacta:
>> A = ones(8,8); >> A(3:6,3:6) = zeros(4,4) A = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Strings
São sequências de caracteres alfanuméricos Inicializadas como um texto entre plicas:
>> f = 'Miles ' f = Miles >> s = 'Davis' s = Davis
Representadas como vectores:
>> x = [f s], y = x(4:8) x =
Miles Davis y =
Strings
Funções MATLAB para manipulação de Strings
char: converte inteiros para caracteres alfanuméricos; strfind: procura uma substring numa string;
length: devolve o número de caracteres de uma string; num2str: converte um número numa string;
str2num: converte uma string num número; strcmp: compara duas strings;
Strings
A função char pode ser usada para combinar strings:
>> f = 'Miles'; s = 'Davis'; char(f,s) ans =
Miles Davis
ou para obter os caracteres pelo código ASCII:
>> char(49) ans = 1 >> char([77 65 84 76 65 66]) ans = MATLAB
Strings
A função strfind devolve os índices iniciais de ocorrência de uma
string noutra string:
>> s = 'How much wood would a woodchuck chuck?'; >> strfind(s,'a') ans = 21 >> strfind(s,'wood') ans = 10 23 >> strfind(s,'Wood') ans = [] >> strfind(s,' ') ans = 4 9 14 20 22 32
Strings
A função length devolve o número de caracteres da string:
>> f = 'Miles '; s = 'Davis'; length([f s]) ans =
11
A função num2str converte um número numa string:
>> ['x = ' num2str(4.2+12.3) ';'] ans =
x = 16.5;
A função str2num converte uma string num número:
>> x = str2num('4.5')+4 x =
8.5000
A função strcmp verifica se duas strings são iguais:
>> p = 'palavra'; s = 'pal'; >> strcmp(p,s) ans = 0 >> strcmp(p(1:3),s) ans = 1
Operações Matemáticas
Podem ser aplicadas a escalares, vectores ou matrizes Os operadores comuns, por ordem de prioridade, são:
^ Exponenciação 4^2 = 16 - Negação (operação unária) -8 = -8 * / Multiplicação Divisão 2*pi = 6.2832 pi/4 = 0.7854 \ Divisão à esquerda 6\2 = 0.3333 + -Adição Subtracção 3+5 = 8 3-5 = -2
Operações Matemáticas
A ordem das operações é definida primeiro pelos
parênteses e depois pela ordem da tabela anterior:
y = -4^2
dáy = -16
uma vez que a exponenciação é mais prioritária que a negação
y = (-4)^2
dáy = 16
uma vez que a negação é efectuada primeiro devido aos parenteses
y = 1-3+2
dáy = 0
uma vez que, em caso de empate, as operações são efectuadas da esquerda para a direita
Operações Matemáticas
A adição e subtracção de vectores são
efectuadas elemento-a-elemento
>> u = [10 9 8];
(vector linha)
>> v = [1 2 3];
(vector linha)
>> u+v
ans =
11
11
11
>> u-v
ans =
9
7
5
Operações Matemáticas
Os produtos interno e externo de vectores
podem ser obtidos pelo operador de multiplicação
>> u = [10 9 8]; (vector linha) >> v = [1 2 3]; (vector linha)
>> u*v' (produto interno) ans =
52
>> u'*v (produto externo) ans =
10 20 30
9 18 27
Operações Matemáticas
Na multiplicação de matrizes, os elementos da
matriz [C] que resulta da multiplicação de [A] e
[B] são:
cij aikbk j k1 n
Operações Matemáticas
A multiplicação de matrizes pode ser obtida directamente pelo
operador de multiplicação >> A = [3 1; 8 6; 0 4]; (32) >> B = [5 9; 7 2]; (22) >> C = A*B (32) C = 22 29 82 84 28 8 >> C = B*A
??? Error using ==> mtimes
Inner matrix dimensions must agree.
A operação de divisão por uma matriz corresponde à multiplicação
pelo inverso da matriz (tem que ter inversa).
A operação de exponenciação para matrizes corresponde à repetição
Operações Matemáticas
As operações sobre vectores e matrizes são efectuadas
elemento-a-elemento se o respectivo operador for precedido de '.'
ambos os vectores (ou matrizes) têm que ter dimensões idênticas; ou um deles é uma matriz 11 (escalar)
Multiplicação e divisão de vectores elemento-a-elemento:
>> u = [1 2 3]; >> v = [4 5 6]; >> u.*v ans = 4 10 18 >> u./v ans = 0.2500 0.4000 0.5000
Operações Matemáticas
Multiplicação e divisão de matrizes elemento-a-elemento: >> A = [1 2 3 4; 5 6 7 8]; >> B = [8 7 6 5; 4 3 2 1]; >> A.*B ans = 8 14 18 20 20 18 14 8 >> A./B ans = 0.1250 0.2857 0.5000 0.8000 1.2500 2.0000 3.5000 8.0000 Exponenciação de matrizes elemento-a-elemento:
>> A.^2 ans =
1 4 9 16 25 36 49 64
Funções Pré-definidas do MATLAB
Existem várias funções pré-definidas do MATLAB para a
criação e manipulação de dados.
A função help fornece informação sobre as funções
pré-definidas existentes e a sua possível utilização:
help elmat – lista as funções de criação e manipulação de
matrizes elementares, incluindo as funções para obter informação sobre as matrizes.
help elfun – lista as funções matemáticas elementares,
incluindo as funções trigonométricas, exponenciais, complexas, e de arredondamento.
O comando lookfor procura ficheiros de ajuda que
podem ser úteis quando se sabe o objectivo da função mas se desconhece o seu nome.
Funções Pré-definidas do MATLAB
A função help pode ser utilizada para obter informação sobre uma função em
particular:
>> help log
LOG Natural logarithm.
LOG(X) is the natural logarithm of the elements of X. Complex results are produced if X is not positive.
See also log1p, log2, log10, exp, logm, reallog.
Para vectores e matrizes, as funções pré-definidas são aplicadas
elemento-a-elemento:
>> A = [1 2 3; 4 5 6]; log(A) ans =
0 0.6931 1.0986 1.3863 1.6094 1.7918
Gráficos
Existem várias funções pré-definidas do MATLAB para a
criação de gráficos:
plot – gráficos de linhas e/ou pontos (2D) plot3 – gráficos de linhas e/ou pontos (3D) surf – gráficos de superfície (3D)
Adicionalmente pode-se acrescentar texto para
caracterizar o gráfico produzido:
title – define o título do gráfico
xlabel – define o texto do eixo dos X’s ylabel – define o texto do eixo dos Y’s
legend – define texto para distinguir as linhas de um gráfico
Gráficos
Exemplo do comando plot: >> t = [0:2:20]';
>> g = 9.81; m = 68.1; cd = 0.25;
>> v = sqrt(g*m/cd) * tanh(sqrt(g*cd/m)*t); >> plot(t, v)
Gráficos
Exemplo de caracterização de um gráfico:
>> title('Plot of v versus t') >> xlabel('Values of t')
>> ylabel('Values of v') >> grid
Gráficos
Comandos para produzir múltiplas linhas/pontos no mesmo
gráfico:
hold on – mantém o gráfico desenhado e sempre que é feito um
novo plot acrescenta as próximas linhas/pontos ao gráfico corrente;
hold off – quando for feito um novo plot apaga o gráfico
corrente e cria um novo gráfico
Comando para produzir múltiplos gráficos na mesma janela: subplot(m, n, p) – divide a janela numa matriz mn e fica
com a célula p activa para a criação do próximo gráfico. A
numeração começa no canto superior esquerdo e continua ao longo da linha, só mudando de linha após a última coluna.
Comando para apagar todos os gráficos: clf
Gráficos
Exemplo de múltiplos plots num único gráfico: >> hold on
>> plot(t, v, 'o') >> hold off
Gráficos
Exemplo de múltiplos gráficos na mesma janela:
>> clf
>> t = 0:pi/50:10*pi;
>> subplot(1,2,1); plot(sin(t),cos(t)) >> axis square
Gráficos
Exemplo de múltiplos gráficos na mesma janela:
>> subplot(1,2,2); plot3(sin(t),cos(t),t); >> title('(b)')
Caso de Estudo
Análise Exploratória de Dados
Análise Exploratória de Dados
Problema: a velocidade de um bungee jumper Modelo diferencial: Modelo analítico: 0 ) 0 ( v m v c g dt dv d 2
t m gc c gm t v d d tanhAnálise Exploratória de Dados
Problema: a velocidade de um bungee jumper
t v 0 dvt c v g d t 2 0 c mg
Análise Exploratória de Dados
Problema: determinação do coeficiente de
resistência cd de um bungee jumper
Podemos obter uma estimativa de cd se
medirmos a velocidade terminal vt de vários
bungee jumpers com massa m conhecida:
2 t d v mg c m (kg) 83.6 60.2 72.1 91.1 92.9 65.3 80.9 vt (m/s) 53.4 48.5 50.9 55.7 54.0 47.7 51.1
Análise Exploratória de Dados
Os dados da tabela podem ser representados pelos
vectores m e vt:
>> m = [83.6 60.2 72.1 91.1 92.9 65.3 80.9]; >> vt = [53.4 48.5 50.9 55.7 54.0 47.7 51.1];
A aceleração da gravidade é conhecida:
>> g = 9.81;
Os coeficientes de resistência podem ser determinados
pela equação: >> cd = g*m./vt.^2 cd = 0.2876 0.2511 0.2730 0.2881 0.3125 0.2815 0.3039 2 t d v mg c
Análise Exploratória de Dados
Podem-se usar agora funções pré-definidas do MATLAB
para obter alguma informação estatística dos resultados:
>> cdavg=mean(cd), cdmin=min(cd), cdmax=max(cd) cdavg = 0.2854 cdmin = 0.2511 cdmax = 0.3125
Baseados no valor médio do coeficiente de resistência
cdavg podemos prever a velocidade terminal:
>> vpred = sqrt(g*m/cdavg) vpred =
Análise Exploratória de Dados
Qual a qualidade do valor médio obtido para o coeficiente
de resistência? Vamos produzir uma figura com dois gráficos.
Um gráfico permite a comparação dos valores previstos
para a velocidade terminal com os valores observados:
>> subplot(2,1,1); plot(vt,vpred,'o',vt,vt) >> xlabel('Measured')
>> ylabel('Predicted')
Análise Exploratória de Dados
Um segundo gráfico permite verificar se os coeficientes de
resistência estimados são constantes ou estão relacionados com a massa do bungee jumper.
Acrescenta-se um gráfico dos coeficientes de resistência
estimados em função da massa do bungee jumper:
>> subplot(2,1,2); plot(m,cd,'o') >> xlabel('Mass (kg)')
>> ylabel('Estimated drag coefficient (kg/m)') >> title('Plot of drag coefficient versus mass')
Análise Exploratória de Dados
Os coeficientes de resistência estimados parecem aumentar com o aumento da massa do bungee jumper.
O modelo necessita ser melhorado! cd Kd
AKd → constante