Escolar Documentos
Profissional Documentos
Cultura Documentos
1 - Apostila Introducao MatLab PDF
1 - Apostila Introducao MatLab PDF
HENRIQUE
DEPARTAMENTO DE MÁQUINAS MARÍTIMAS
MANUAL
DE INTRODUÇÃO
AO
MATLAB
Por:
Prof. Luis Fernandes Mendonça
E.N.I.D.H. - 2003/2004
CAPÍTULO
1
INTRODUÇÃO AO
MATLAB
PLANO DO CAPÍTULO
Quando iniciamos o MATLAB aparece-nos uma janela, designada por Command window,
através da qual iremos fazer a interacção com o programa. Nela aparece, além de uma barra
de menus, o símbolo » (prompt), que nos indica que o MATLAB está pronto para executar as
operações e instruções por nós introduzidas.
Command Window
O MATLAB possui todas as operações básicas da matemática podendo ser utilizado com
uma simples máquina de calcular. Aqui estão alguns exemplos:
» 56/8
ans =
7
» 8\56
ans =
7
» 4*250 + 2*100
ans =
1200
OPERAÇÕES ARITMÉTICAS
Adição, a + b + 5+3
Subtracção, a – b - 23 - 12
Multiplicação, a . b * 3.14 * 0.85
Divisão, a ÷ b / ou \ 56/8 = 8\56
Potenciação, ab ^ 5^2
FORMATOS NUMÉRICOS
» preco=1/3
preco =
0.3333
Nota: A representação interna dos números não é alterada quando se utilizam estes
comandos
» cadernos=4
cadernos =
4
» canetas=2
canetas =
2
» itens=cadernos+canetas
itens =
6
» custo_total=cadernos*250+canetas*100
custo_total =
1200
» equetalestenomeparaumavariavel=2
equetalestenomepara =
2
As variáveis não podem ter símbolos de pontuação. É permitido utilizar o símbolo “ _
”.
» e_que_tal_este_nome_para_uma_variavel =0
e_que_tal_este_nome =
0
Variáveis Especiais
MATLAB WORKSPACE
De seguida enumeram-se algumas das coisas que podemos fazer, relacionadas com o
workspace:
Se quisermos obter uma lista com as variáveis presentes no workspace basta utilizar o
comando who. Também podemos utilizar o comando whos que juntamente com os
nomes das variáveis refere, também, qual a memória que cada uma ocupa assim como a
sua dimensão - o que é muito útil se as variáveis forem matrizes.
» who
Your variables are:
ans canetas itens
cadernos custo_total
» save
Saving to: matlab.mat
» save meu
% grava as variáveis em format binário para o ficheiro meu.mat
» who
Your variables are:
ans equetalestenomepara
cadernos itens
canetas preco
custo_total e_que_tal_este_nome
» clear cadernos
» who
Quando inserimos um comando no MATLAB ele produz um eco, i.e., surge uma
confirmação da operação efectuada no ecrã. Se não quisermos que tal aconteça devemos
utilizar o símbolo ;.
Podemos utilizar a virgula (,) para introduzir vários comando na mesma linha
lapis =
4
» itens=canetas+ ...
lapis+vidros
itens =
27
» c1=1-2i
c1 =
1.0000 - 2.0000i
» c2=3*(2-sqrt(-1)*3)
c2 =
6.0000 - 9.0000I
» c3=sqrt(-2)
c3 =
0 + 1.4142i
As operações aritméticas entre complexos são escritas de forma semelhante ao que se fazia
para os reais.
ENIDH/DMM – Luis M. Mendonça Pág.8
» c6=c1+c2
c6 =
7.0000 -11.0000i
» c7=(c1+c2)/c3
c7 =
-7.7782 -4.9497i
» c9=real(c6)
c9 =
7
Apresentam-se, agora, as funções utilizadas para estabelecer a correspondência entre a
representação algébrica (z = a+ bi) e a representação polar ( z = r (cos θ + sen θ ), em que r =
|z|):
» c1
c1 =
1.0000 - 2.0000i
» mag_c1=abs(c1)
mag_c1 =
2.2361
» angle_c1=angle(c1)
angle_c1 =
-1.1071
» deg_c1=angle_c1*180/pi
deg_c1 =
-63.4349
Com estas duas funções conseguimos obter as coordenadas polares que desejamos.
a = r cos θ , b = r sin θ
» conj(c1)
ans =
1.0000 + 2.0000i
» imag_c1=imag(c1)
imag_c1 =
-2
» real_c1=real(c1)
real_c1 =
1
» x=sqrt(2)/2
x =
0.7071
» y=asin(x)
y =
0.7854
» y_deg=y*180/pi
y_deg =
45.0000
» z=rem(23,4)
z =
3
» z1=23/4
z1 =
5.7500
» a=exp(c1)
a =
-1.1312 - 2.4717i
» sign(1.2)
ans =
1 % a resposta é 1 pois o número é positivo
» sign(-23.4)
ans =
-1 % a resposta é –1 quando o número é negativo
ENIDH/DMM – Luis M. Mendonça Pág.11
» sign(0)
ans =
0
Para criarmos um novo script (ou m-file) basta procurar o comando [New] localizado no
menu [File] e seguidamente escolher [M-file].
Como um m-file é um ficheiro de texto então, pode ser feito em qualquer editor de texto –
o ficheiro tem de ter a extensão .m.
Para executar um m-file basta introduzir o seu nome, por exemplo:
» exemplo
O comando echo on diz ao MATLAB para fazer o eco dos comandos que vai lendo e
executando. O comando echo off faz o contrário.
Exemplo de um m-file:
%Exemplo1 – m-files
cadernos=4;
canetas=input(' Introduza o nº de canetas > ');
itens=cadernos+canetas
custo_total=cadernos*250+canetas*100
» exemplo1
Reparar na utilização da função input. Esta função pode receber como valor de entrada
qualquer expressão matemática que seja equivalente ao valor que se pretende introduzir.
» exemplo1
Introduza o nº de canetas > round(sqrt(13))+3
itens =
11
custo_total =
1700
Aqui está um quadro com algumas das funções úteis na construção de m-files.
%Exemplo2 - .m files
cadernos=4;
ENIDH/DMM – Luis M. Mendonça Pág.13
canetas=2;
keyboard
itens=cadernos+canetas
custo_total=cadernos*250+canetas*100
» exemplo2
K»
K» who
Your variables are:
a equetalestenomepara
angle_c1 imag_c1
ans itens
c1 lapis
c2 mag_c1
c3 preco
c4 real_c1
c6 vidros
c7 x
c8 y
cadernos y_deg
canetas z
custo_total z1
deg_c1
e_que_tal_este_nome
K» return
itens =
6
custo_total =
1200
Existem dois comandos que permitem encontrar ajuda no MATLAB: O comando help e o
comando lookfor.
Um método equivalente ao comando help baseia-se na utilização do menu [Help].
» help
HELP topics:
toolbox\local - Local function library.
matlab\datafun - Data analysis and Fourier transform functions.
matlab\elfun - Elementary math functions.
ENIDH/DMM – Luis M. Mendonça Pág.14
matlab\elmat - Elementary matrices and matrix manipulation.
matlab\funfun - Function functions - nonlinear numerical methods.
matlab\general - General purpose commands.
matlab\color - Color control and lighting model functions.
matlab\graphics - General purpose graphics functions.
matlab\iofun - Low-level file I/O functions.
matlab\lang - Language constructs and debugging.
matlab\matfun - Matrix functions - numerical linear algebra.
matlab\ops - Operators and special characters.
matlab\plotxy - Two dimensional graphics.
matlab\plotxyz - Three dimensional graphics.
matlab\polyfun - Polynomial and interpolation functions.
matlab\sounds - Sound processing functions.
matlab\sparfun - Sparse matrix functions.
matlab\specfun - Specialized math functions.
matlab\specmat - Specialized matrices.
matlab\strfun - Character string functions.
matlab\dde - DDE Toolbox.
matlab\demos - Demonstrations and samples.
simulink\simulink - SIMULINK model analysis and construction functions.
simulink\blocks - SIMULINK block library.
simulink\simdemos - SIMULINK demonstrations and samples.
toolbox\signal - Signal Processing Toolbox.
toolbox\ident - System Identification Toolbox.
nnet\examples - Neural Network Toolbox examples.
nnet\nnet - Neural Network Toolbox.
toolbox\robust - Robust Control Toolbox.
mutools\commands - Mu-Analysis and Synthesis Toolbox.
mutools\subs - Mu-tools examples and internal routines.
toolbox\optim - Optimization Toolbox.
toolbox\splines - Spline Toolbox.
toolbox\control - Control System Toolbox.
toolbox\mmle3 - MMLE3 Identification Toolbox.
toolbox\wintools - GUI tools for MATLAB for MS Windows.
Se já soubermos aquilo que procuramos podemos utilizar o comando help de uma forma
mais precisa.
» help general
General information.
info - Information about MATLAB and The MathWorks, Inc.
subscribe - Become subscribing user of MATLAB.
hostid - MATLAB server host identification number.
whatsnew - Information about new features not yet documented.
ver - MATLAB, SIMULINK, and TOOLBOX version information.
» help sqrt
No caso de o MATLAB não encontrar informação sobre o tópico pretendido obtemos uma
mensagem deste tipo.
» help controladores
controladores not found.
» lookfor complex
CPLXPAIR Sort numbers into complex conjugate pairs.
CONJ Complex conjugate.
IMAG Complex imaginary part.
REAL Complex real part.
CDF2RDF Complex diagonal form to real block diagonal form.
RSF2CSF Real block diagonal form to complex diagonal form.
CPLXDEMO Maps of functions of a complex variable.
CPLXGRID Polar coordinate complex grid.
CPLXMAP Plot a function of a complex variable.
GRAFCPLX Demonstrates complex function plots in MATLAB.
LOGM2 LOGM2(X) is the matrix natural logarithm of X . Complex
CCEPS Complex cepstrum.
PHASE Computes the phase of a complex vector
mixedalg.m: % [MULT,XQO] = MIXEDALG(T,XQI,K) finds the existence of a
complex,diagonal
DSORT Sort complex discrete eigenvalues in descending order.
2
MATRIZES E
VECTORES
PLANO DO CAPÍTULO
» a=[1 2 3 4 5 6]
a =
1 2 3 4 5 6
» x= [0 .1*pi .2*pi .3*pi .4*pi .5*pi .6*pi .7*pi .8*pi .9*pi pi]
x =
Columns 1 through 7
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
Columns 8 through 11
2.1991 2.5133 2.8274 3.1416
» y=sin(x)
y =
Columns 1 through 7
0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511
Columns 8 through 11
0.8090 0.5878 0.3090 0.0000
» y1=(0:0.1:1)*pi
y1 =
Columns 1 through 7
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
Columns 8 through 11
2.1991 2.5133 2.8274 3.1416
» g=logspace(0,2,11)
g =
Columns 1 through 7
1.0000 1.5849 2.5119 3.9811 6.3096 10.0000 15.8489
Columns 8 through 11
Utilizando os “ : ”
» z(1:4) % queremos do primeiro até ao quarto elemento
ans =
6 5 4 3
Usando outro vector para extrair os elementos pela ordem pretendida
» y([4 2 3 1])
ans =
2.3562 0.7854 1.5708 0
» A=[1 2 3;4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
» B=[1;2;3;4;5]
B =
1
2
3
4
5
Podemos criar uma nova matriz adicionando novos elementos a uma matriz já existente.
»C=[A;10 11 12]
C =
1 2 3
4 5 6
7 8 9
10 11 12
TRANSPOSTA
Para obter a transposta da matriz A e explicitá-la pela matriz T devemos fazer:
» T=A'
T =
1 4 7
2 5 8
3 6 9
» A=[1 2 3;4 5 6; 7 8 9]
A =
7 8 9
» B=[1 4 7; 2 5 8; 3 6 0]
B =
1 4 7
2 5 8
3 6 0
» A+B
ans =
2 6 10
6 10 14
10 14 9
MULTIPLICAÇÃO
» X=[-1 0 2]
X =
-1 0 2
» Y=[-2 -1 1]'
Y =
-2
-1
1
» X*Y
ans =
4
» Y*X
ans =
2 0 -4
1 0 -2
-1 0 2
» pi*X
ans =
-3.1416 0 6.2832
» pi*Y
ans =
-6.2832
-3.1416
3.1416
Existem dois tipos de divisão: a divisão à esquerda (A\b) e a divisão à direita (A/b). Podemos
ver qual a diferença entre estes dois tipos de divisão através de um exemplo.
Considere o seguinte sistema de equações:
1 2 3 x 1 366
4 5 6 . x 2 = 804
7 8 0 x 3 351
A . x = b
A=[1 2 3; 4 5 6; 7 8 0]
A =
1 2 3
4 5 6
7 8 0
» b=[366;804;351]
b =
366
804
351
» x=A\b
x =
25.0000
22.0000
99.0000
» A*x
ans =
366
804
351
» y=A/b
??? Error using ==> /
Matrix dimensions must agree.
» x*A
??? Error using ==> *
Inner matrix dimensions must agree.
Devido as dimensões das matrizes não é possível realizar a divisão à direita teria que se
modificar as dimensões de b, fazendo a sua transformada por exemplo.
A relação entre estas duas divisões é dada por: A\b = (b’/A’)’
» A\b
ans =
» (b'/A')'
ans =
25.0000
22.0000
99.0000
Também conseguimos resolver um sistema de equações lineares utilizando a função inv para
calcular a inversa de uma matriz - x = A-1 * b – antes, porém, devemos verificar se o sistema
tem uma solução única calculando o seu determinante.
» det(A)
ans =
27
» x=inv(A)*b
x =
25.0000
22.0000
99.0000
Quando se utiliza o termo “operações com arrays” pretende-se referir que as operações
aritméticas são feitas de elemento para elemento.
ADIÇÃO E SUBTRACÇÃO
Para a adição e subtracção as operações com array e as operações com matrizes são iguais.
(Utiliza-se os mesmos símbolos)
MULTIPLICAÇÃO E DIVISÃO
» A=[2 4 6]
A =
2 4 6
» B=[2 2 2]
B =
2 2 2
» C=A.*B
C =
4 8 12
No que diz respeito à divisão; se tivermos D = A ./ B ou E = A .\ B cada elemento de D e E é
obtidos através da divisão (à esquerda ou à direita) envolvendo os elementos respectivos de A
e B.
» D=A./B
ENIDH/DMM – Luis M. Mendonça Pág.26
D =
1 2 3
» E=A.\B
E =
1.0000 0.5000 0.3333
POTENCIAÇÃO
A potenciação elemento a elemento é efectuada utilizando os símbolos “ .^ ”.
» P=A.^B
P =
4 16 36
» Pe=A.^3
Pe =
8 64 216
» Ps=3.^A
Ps =
9 81 729
» A=[1 2 3; 4 5 6; 7 8 0]
A =
1 2 3
4 5 6
7 8 0
A =
1 2 3
4 5 6
7 8 9
» A(2,2)=A(1,2)+A(3,2)
A =
1 2 3
4 10 6
7 8 9
Outra manipulação dos elementos de uma matriz que o MATLAB permite é a seguinte:
b =
1
4
7
2
10
8
3
6
9
» C=A(1:2,2:3)
C =
2 3
6
Matrizes Especiais
» zeros(3)
ans =
0 0 0
0 0 0
0 0 0
» ones(3)
ans =
1 1 1
1 1 1
1 1 1
» ones(3)*pi
ans =
3.1416 3.1416 3.1416
3.1416 3.1416 3.1416
3.1416 3.1416 3.1416
[] Matriz vazia
O MATLAB possui inúmeras funções com matrizes no quadro seguinte vamos apresentar
apenas algumas.
det(A) Determinante
3
OPERADORES RELACIONAIS,
OPERADORES LÓGICOS E
ESTRUTURAS DE CONTROLO
PLANO DO CAPÍTULO
» 3<4
ans =
1 % Verdadeiro
» 3>4
ans =
0 % Falso
Operadores Relacionais
== Igual a
~= Diferente de
Estes operadores podem ser utilizados na comparação entre duas matrizes, com as mesmas
dimensões, ou para comparar um escalar com os elementos que compõem a matriz
» A=1:9, B=9-A
A =
1 2 3 4 5 6 7 8 9
B =
8 7 6 5 4 3 2 1 0
» A==B
ans =
0 0 0 0 0 0 0 0 0
Operadores Lógicos
&
And (e)
| Or (ou)
~
Not (negação)
xor(x,y)
Exclusive Or (Ou exclusivo)
» VF=A>4
VF =
0 0 0 0 1 1 1 1 1
A expressão seguinte devolve uns nas posições em que os elementos da matriz A verificam
a condição, i.e., são maiores do que 2 e menores do que 6.
» VF2=(A>2)&(A<6)
VF2 =
0 0 1 1 1 0 0 0 0
Utilizamos esta estrutura quando queremos condicionar a execução de uma dada instrução
ou comando ao valor (verdadeiro ou falso) de uma da expressão relacional ou lógica.
O quadro seguinte apresenta a sintaxe da estrutura IF-THEN-END.
IF expressão IF expressão
Comandos Comandos
ELSEIF END
Comandos
ELSE
Comandos
END
» help if
IF Conditionally execute statements.
The general form of an IF statement is:
IF variable, statements, END
The statements are executed if the real part of the variable
has all non-zero elements. The variable is usually the result of
expr rop expr where rop is ==, <, >, <=, >=, or ~=.
For example:
IF I == J
A(I,J) = 2;
ELSEIF ABS(I-J) == 1
A(I,J) = -1;
ELSE
A(I,J) = 0;
END
» laranjas=10;
» Custo=laranjas*20
Custo =
200
» if laranjas>5
ENIDH/DMM – Luis M. Mendonça Pág.34
Custo=(1-0.2)*Custo % faz-se um desconto de 20%
end
» Custo =
160
FOR FOR
Variável=expressão Variável=expressão
Comando1 Comando
Comando2 END
…
ComandoN
END
Se, no lugar da expressão tivermos um array ou uma matriz então os comandos são
executados um números de vezes iguais ao número de colunas do array ou matriz.
Podemos consultar o MATLAB para obter mais informações sobre a estrutura FOR.
FOR I = 1:N,
FOR J = 1:N,
A(I,J) = 1/(I+J-1);
END
END
» for n=1:10
x(n)=sin(n*pi/10);
n=10;
end
» x
x =
Columns 1 through 7
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090
Columns 8 through 10
0.5878 0.3090 0.0000
» for n=1:5
for m=5:-1:1
A(n,m)=n^2+m^2;
end
disp(n)
» A
A =
2 5 10 17 26
5 8 13 20 29
10 13 18 25 34
17 20 25 32 41
26 29 34 41 50
Exemplo: Faça um m-file que preencha uma matriz. Peça ao utilizador o números de linhas
e de colunas que ele deseja para a matriz.
n=1;
s=1;
for i=1:n,
for j=1:s,
a(i,j)=1/(i+j-1);
end
end
WHILE
» help while
E = 0*A; F = E + EYE(E); N = 1;
WHILE NORM(E+F-E,1) > 0,
E = E + F;
F = A*F/N;
N = N + 1;
END
4
GRÁFICOS
PLANO DO CAPÍTULO
4.5– Subplots
»x=linspace(0,2*pi,30);
»y=sin(x);
»plot(x,y)
»z=cos(x);
»plot(x,y,x,z)
Podemos traçar várias funções no mesmo gráfico utilizando vários argumentos no comando
plot.
»plot(x,y,z)
Se um dos argumentos for uma matriz e o outro for um vector o matlab representa cada
coluna da matriz vs o vector.
»W=[y;z];
»plot(x,W)
»plot(W,x)
»plot(y)
»length(y)
ans =
30
plot(1:length(y),y)
»k=1:30
»kk=i+1.1*i*j
»plot(kk)
%plot(real(k),imag(k))
Nós podemos definir qual as cores e o tipo de linha que pretendemos introduzindo mais
argumentos no comando plot
Cores: Se não for especificado o tipo de cores que que se pretende para o gráfico o matlab
começa no amarelo e faz um ciclo pelas seis cores disponíveis.
LETRA CORES
y amarelo
m magenta
c cyan
r encarnado
g verde
b azul
w branco
k preto
- linha sólida
: ponteada
-. traço - ponto
-- traço interropido
SÍMBOLO MARKERS
. ponto
o círculo
x x-mark
+ sinal +
* Estrela
plot(x,y,x,z)
grid
grid
grid on
grid off
text(2.5,0.7,'sin(x)')
plot(x,z)
hold
plot(x,y)
plot(x,y,'m')
4.5 – SUBPLOTS
O comando subplot(m,n,p) subdivide a figure windows numa matriz m por n e a área activa
corresponde à posição p.
a=2*sin(x).*cos(x);
b=sin(x)./(cos(x)+eps);
subplot(2,2,1)
plot(x,y),axis([0 2*pi -1 1]),title('sin(x)')
subplot(2,2,2)
plot(x,z),axis([0 2*pi -1 1]),title('cos(x)')
subplot(2,2,3)
plot(x,a),axis([0 2*pi -1 1]),title('2sin(x)cos(x)')
subplot(2,2,4)
plot(x,b),axis([0 2*pi -20 20]),title('sin(x)/cos(x)')
grid
subplot(2,2,2)
grid
h1 =
1
h2=figure
h2 =
2
h3 =
3
h4 =
4
figure(4)
grid
close
close (2)
help close
clf
5
EXERCÍCIOS
PLANO DO CAPÍTULO
2 5 7
A = 3 8 4
1 3 9
3 2 5
B = 1 4 6
1 7 8
E = [5 6 1]
9. Determine uma matriz com 2 colunas em que uma delas é obtida de:
E a outra de :
10. Fazer um m-file em que é pedido ao utilizador para introduzir um número, o programa
deve determinar a que intervalo pertence o número e produzir o seguinte output :
Nº INTRODUZIDO OUTPUT
0 .. 5 Mau
5 .. 7 Bom
7 .. 10 Muito Bom
11. Preencha uma matriz 4x4 em que os elementos da diagonal principal deverão ser 1 e os
restantes elementos são calculados através da expressão:
2
3x i
a( i , j ) =
j
12. Faça o exercício 2 utilizando o ciclo WHILE. (O m-file deve ter o nome: wh1.m)
4.5 – SUBPLOTS................................................................................................................................................. 42
5.1 EXERCÍCIOS:.............................................................................................................................................. 45
5.2 EXERCÍCIOS:.............................................................................................................................................. 47
6- ÍNDICE............................................................................................................................................................ 48