Beruflich Dokumente
Kultur Dokumente
1) Introduo
Esta apostila surgiu da necessidade de capacitar rapidamente alunos de graduao a
utilizarem o MATLAB como suporte computacional em estudos nas reas da
engenharia, e, principalmente para os alunos do Curso de Engenharia de
Telecomunicaes, cuja necessidade de conhecer e saber trabalhar com o MATLAB
extremamente importante nas disciplinas que compem a grade curricular do curso.
O MATLAB um "software" de alto desempenho destinado a fazer clculos com
matrizes (MATrix LABoratory), podendo funcionar como uma calculadora ou como
uma linguagem de programao cientfica (FORTRAN, Pascal, C, etc.). Entretanto, os
comandos do MATLAB so mais prximos da forma como escrevemos expresses
algbricas, tornando mais simples o seu uso. Atualmente, o MATLAB definido como
um sistema interativo e uma linguagem de programao para computao tcnica e
cientfica em geral, integrando a capacidade de fazer clculos, visualizao grfica e
programao (Tonini e Couto, 1999).
clculos matemticos;
desenvolvimento de algoritmos;
com o usurio.
2) Clculos Cientficos
2.1- rea de Trabalho
Carregando o MATLAB
As teclas com setas podem ser usadas para se encontrar comandos dados
anteriormente, para execuo novamente ou sua reedio. Por exemplo, suponha que
voc entre com
sen(0)
Ao apertar a tecla Enter , o MATLAB responde com uma mensagem de erro:
??? Undefined function or variable sen.
Isto acontece porque para se determinar o seno de um ngulo necessrio digitar em
ingls o comando sin. Ao invs de rescrever a linha inteira, simplesmente pressione a
tecla "seta para cima". O comando errado retorna, e voc pode, ento, mover o cursor
para trs usando a tecla "seta para esquerda" ou o ponto de insero com o "mouse" ao
lugar apropriado para inserir a letra i:
sin(0)
ans =
0
Note que o MATLAB chamou o resultado de ans (answer=resposta). Alm das teclas
com setas, pode-se usar outras teclas para reeditar a linha de comando. A seguir dada
uma breve descrio destas teclas:
Ctrl
Ctrl
Home
End
Del
Backspace
Smbolo
+
*
/ ou \
^
Tabela 2 Operaes aritmticas
Exemplos
5+6
19 - 4.7
5.02 * 7.1
45/5 ou 5\45
3^4
Operador lgico
&
|
~
Descrio
Uso
E
Conjuno
ou
Disjuno
No
Negao
Tabela 4 Operaes lgicas
Formato
Comentrio
33.5000
4 dgitos decimais (formato default)
33.50000000000000
16 dgitos
3.3500e+001
5 dgitos mais expoente
3.350000000000000e+001 16 dgitos mais expoente
4040c00000000000
Hexadecimal
33.50
2 dgitos decimais
+
positivo, negativo ou zero
67/2
Racional
Tabela 5 Formatos Numricos
Significado
Varivel usada para exibir os resultados
Nmero 3,14159
Menor nmero tal que, quando adicionado a 1, cria
um nmero maior que 1 no computador.
Armazena o nmero de operaes em ponto
flutuante realizadas.
Significa infinito
Significa no um nmero, por exemplo, 0/0.
Unidade imaginria [ 1 ].
nargin
nargout
realmin
realmax
Comentrio e pontuaes
Smbolo
,
;
%
...
Funo
Separar comandos dados em uma mesma linha.
Separar comandos dados em uma mesma linha. Se o ltimo caractere da
declarao um ponto e vrgula, a impresso na tela suprimida, mas a
tarefa realizada.
Todo e qualquer caracter depois do smbolo de porcentagem tomado como
comentrio.
Pode-se continuar uma certa expresso na prxima linha usando um espao
em branco e trs pontos,"...", ao final das linhas incompletas.
Tabela 8 Comentrio e pontuaes
Exemplo:
q1=3, p1=25, ...
q2=5; p2=12; %Exemplo de uso da vrgula, ponto e vrgula e
trs pontos
q1 =
3
p1 =
25
Os espaos em branco entre os operadores (aritmticos, lgicos, relacionais) e as
variveis (ou constantes) so opcionais. O mesmo para vale para a vrgula, o ponto e
vrgula e o smbolo de porcentagem. No entanto, o espao em branco entre a ltima
varivel (ou constante) de uma linha e os trs pontos obrigatrio (veja exemplo
anterior).
Variveis literais
Uma varivel pode conter uma cadeia de caracteres ao invs de um nmero. Estes
caracteres so manipulados como vetores linha (assunto que ser tratado mais adiante).
A cadeia de caracteres deve estar limitada por apstrofos (cadeia de caracteres) para
ser atribuda a uma varivel literal. Por exemplo:
a='MATLAB'
a =
MATLAB
1
1
1
1
1
1
Size
by 1
by 1
by 1
by 1
by 1
by 1
Elements
1
1
1
1
1
1
Bytes
8
8
8
8
8
8
Density
Full
Full
Full
Full
Full
Full
Complex
No
No
No
No
No
No
%remove a varivelp2
%remove todas as variveis do espao de
valor absoluto de x.
arco cujo coseno x
arco cujo seno x.
arco cuja tangente x.
conjugado complexo
coseno de x.
coseno hiperblico de x.
exponencial ex.
arredondamento em direo ao -
8
gcd(x,y)
mximo divisor comum de x e y.
lcm(x,y)
mnimo mltiplo comum de x e y.
log(x)
logaritmo de x na base e.
log10(x)
logaritmo de x na base 10.
rem(x,y)
resto da diviso de x por y.
round(x)
arredondamento para o inteiro mais prximo
sign(x)
funo signum
sin(x)
seno de x.
sinh(x)
seno hiperblico de x.
sqrt(x)
raiz quadrada de x.
tan(x)
tangente de x.
tanh(x)
tangente hiperblica de x.
Tabela 9 Algumas funes matemticas
Comandos de auxlio
No MATLAB, pode-se obter ajuda sobre qualquer comando ou funo. Isto
pode ser feito basicamente de trs formas: interativamente atravs do menu de barras,
atravs do comando help ou do comando lookfor.
Digitando-se simplesmente o comando help,
>> help
o MATLAB mostra uma listagem de todos os pacotes disponveis. Ajuda sobre um
pacote especfico ou sobre um comando ou funo especfica obtida com o comando
help <tpico>, onde tpico pode ser o nome de um pacote, de um comando ou
funo. Por exemplo:
help sign
SIGN Signum function.
For each element of X, SIGN(X) returns 1 if the
element is greater than zero, 0 if it equals zero and
-1 if it is less than zero. For complex X,
SIGN(X) = X ./ ABS(X).
O comando help a maneira mais simples de se obter auxlio no caso do
usurio conhecer o tpico em que ele quer assistncia. Note que no exemplo
mostrado a funo SIGN est escrita em letras maisculas somente para destacar.
Deve-se lembrar que todos os comandos do MATLAB devem ser escritos em letras
minsculas. Portanto, para utilizar esta funo deve-se digitar:
sign (x)
O Comando lookfor prov assistncia pela procura atravs de todas as
primeiras linhas dos tpicos de auxlio do MATLAB e retornando aquelas que
contenham a palavra-chave especificada. O interessante deste comando que a palavra
chave no precisa ser um comando do MATLAB. Sua sintaxe lookfor
<palavra-chave>, onde palavra-chave a cadeia de caracteres que ser procurada
9
nos comandos do MATLAB. Por exemplo, para se obter informaes sobre funes
para se resolver integral:
lookfor integral
ELLIPKE Complete elliptic integral.
EXPINT Exponential integral function.
DBLQUAD Numerically evaluate double integral.
INNERLP Used with DBLQUAD to evaluate inner loop of
integral.
QUAD
Numerically evaluate integral, low order method.
QUAD8 Numerically evaluate integral, higher order method.
COSINT Cosine integral function.
SININT Sine integral function.
ASSEMA Assembles area integral contributions in a PDE
problem.
COSINT Cosine integral function.
FOURIER Fourier integral transform.
IFOURIER Inverse Fourier integral transform.
SININT Sine integral function.
BLKPIDCON The output of the block is the sum of
proportional, integral and
Apesar da palavra integral no ser um comando do MATLAB, ela foi encontrada na
descrio de 14 comandos. Tendo esta informao, o comando help pode ser usado
para exibir informaes a respeito de um comando especfico, como por exemplo:
help quad
10
M= a 2 + b 2
=tan-1(b/a)
a=M.cos
b=M.sen
11
Uma vez definido que a varivel x uma varivel simblica, podemos definir
expresses que envolvem esta varivel. Por exemplo, dadas duas funes f(x) = 2x2+3x5 e g(x) = x2-x+7, podemos fazer uma srie de operaes algbricas envolvendo estas
funes. Por exemplo:
>> f=2*x^2+3*x-5; g=x^2-x+7;
>> f+g
ans =
3*x^2+2*x+2
>> f-g
ans =
x^2+4*x-12
>> f*g
ans =
(2*x^2+3*x-5)*(x^2-x+7)
>> expand(ans)
ans =
2*x^4+x^3+6*x^2+26*x-35
>> f/g
ans =
(2*x^2+3*x-5)/(x^2-x+7)
>> expand(ans)
ans =
2/(x^2-x+7)*x^2+3/(x^2-x+7)*x-5/(x^2-x+7)
O MATLAB pode realizar operaes mais avanadas sobre expresses simblicas. A
funo compose calcula a composio das funes f(x) e g(x) em f(g(x)), a funo
finverse encontra a inversa funcional de uma expresso e a funo subs substitui
uma varivel por um nmero (ou por outra varivel) em uma expresso. Por exemplo:
>> f=1/(1-x^2); g=sin(x);
>> compose(f,g)
ans = 1/(1-sin(x)^2)
>> compose(g,f)
ans = sin(1/(1-x^2))
>> finverse(g)
ans = asin(x)
>> subs(f,x,2)
ans = -1/3
O MATLAB pode resolver equaes. Por exemplo, para resolver a equao
ax2+bx+c =0
algebricamente, podemos usar os comandos:
>> syms a b c x
>> solve(a*x^2+b*x+c)
ans =
[1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[1/2/a*(-b-(b^2-4*a*c)^(1/2))]
12
O MATLAB pode exibir este resultado de uma forma mais fcil de enxergar usando a
funo pretty.
>> pretty(ans)
[
2
1/2]
[
-b + (b - 4 a c)
]
[1/2 --------------------]
[
a
]
[
]
[
2
1/2]
[
-b - (b - 4 a c)
]
[1/2 --------------------]
[
a
]
Abaixo segue um resumo das funes para manipulao de expresses algbricas:
diff(f) - calcula a derivada de f.
compose(f,g) - determina a composta f(g(x)).
expand(expr) - expande uma expresso expr.
finverse(expr) - determina a inversa funcional da expresso expr.
pretty(expr) - exibe a expresso expr numa forma mais bonita.
simple(expr) - procura encontrar uma forma mais simples de escrever uma
expresso expr.
simplify(expr) - simplifica a expresso expr.
solve(expr) - acha a(s) soluo(es) da equao expr = 0.
subs(expr,x,a) - substitui na expresso expr a varivel x por a.
syms x y z a b - define as variveis simblicas x, y, z, a e b.
Existem vrias outras funes para manipulao de expresses algbricas. Voc pode
obter informaes sobre elas digitando help symbolic. Uma funo interessante
que mostra as capacidades do MATLAB em tratar com funes matemticas
funtool que uma calculadora para funes.
13
3) VETORES E MATRIZES
O MATLAB permite a manipulao de linhas, colunas, elementos individuais e
partes de matrizes.
Na tabela 10, tem-se um resumo das diversas formas de se construir um vetor no
MATLAB.
Cria um vetor x comeando com o valor primeiro,
incrementando-se de 1(um) em 1(um) at atingir o
valor ltimo ou o valor mais prximo possvel de
ltimo
X=primeiro:incremento:ltimo Cria um vetor x comeando com o valor primeiro,
incrementando-se do valor incremento at atingir o
valor ltimo ou o valor mais prximo possvel de
ltimo
X=linspace(primeiro, ltimo, n) Cria um vetor x comeando com o valor primeiro e
terminado no valor ltimo, contendo n elementos
linearmente espaados.
X=logspace(primeiro, ltimo, n) Cria um vetor x comeando com o valor 10primeiro e
terminando no valor 10ltimo, contendo n elementos
logaritmicamente espaados
Cria um vetor x contendo os elementos especificados
X=[2 2*pi sqrt(2) 2-3j]
Tabela 10 Construo de Vetores
X=primero : ltimo
Exemplo 1:
>> x = 1 : 5
gera um vetor linha contendo os nmeros de 1 a 5 com incremento unitrio. Produzindo
X =
1
2
3
4
5
>> x=1:10.5
x=
1
2
10
Exemplo 2:
>> z = 6 : -l : l
Z =
6
Exemplo 3:
Pode-se, tambm, gerar vetores usando a funo linspace. Por exemplo,
>> k = linspace (0, l, 6)
K =
0
5.7500
Exemplo 4:
>> x=logspace(0,2,5)
x=
1.0000
3.1623
10.0000
Exemplo 5:
>> x=[8
6
x=
8.0000
8.1000
8.10
8.1250
31.6228
10.5000
100.00
5-6j]
6.0000
5.0000-6.0000i
Nos exemplos acima os vetores possuem uma linha e vrias colunas (vetores linha). Da
mesma forma podem existir vetores coluna (uma coluna e vrias linhas). Para se criar
um vetor coluna elemento por elemento estes devem estar separados por ( ; ). Por
exemplo:
>> v=[1.5;-3.2;9]
v =
1.5000
-3.2000
9.0000
Esses vetores coluna podem tambm ser criados a partir dos comandos utilizados
anteriormente para criar os vetores linha, acompanhados do smbolo ( ' ), que o
operador de transposio. Exemplo:
>> y=(1:0.5:3)'
y =
1.0000
1.5000
2.0000
2.5000
3.0000
>> z=[0 -2.3 4 sqrt(33)]'
z =
0
-2.3000
4.0000
5.7446
15
ENDEREAMENTO DE VETORES
No MatLab, cada um dos elementos de um vetor podem ser acessados atravs de
seu ndice que identifica cada uma das colunas. Por exemplo :
>> x=1:10
x=
1
2
>> x(3)
ans =
3
>> x(5)
ans =
5
10
Esses elementos de um vetor tambm podem ser acessados em blocos. Por exemplo:
>> c=linspace(10,40,7)
c =
10
15
20
25
30
35
40
>> c(3:5)
ans =
20
25
>>c(5:-2:1)
ans =
30
20
30
10
16
>> d(5:-2:1)
ans =
30
20
10
e c um escalar
resultado
[a1+c a2+c ... an+c]
[a1+b1 a2+b2 ... an+bn]
[a1*c a2*c ... an+c]
[a1*b1 a2*b2 ... an*bn]
[a1/b1 a2/b2 ... an/bn]
[a1^c a2^c ... an^c]
[c^a1 c^a2 ... c^an]
[a1^b1 a2^b2 ... an^bn]
MATRIZES:
O MATLAB trabalha essencialmente com um tipo de objeto, uma matriz numrica
retangular ( 1x1; 2x2; 3x3; i ( linha) x j (coluna); etc).
Os elementos de cada linha da matriz so separados por espaos em branco ou vrgulas
e as colunas separadas por ponto e vrgula, colocando-se colchetes em volta do grupo de
elementos que formam a matriz. Por exemplo, entre com a expresso
>> A=[ 1 2 3;4 5 6;7 8 9 ]
Pressionando <enter> o MATLAB mostra o resultado
A =
1
4
7
2
5
8
3
6
9
As linhas das matrizes tambm podem ser definidas atravs dos comandos utilizados
anteriormente para se definir vetores linha. Por exemplo:
17
>> A=[1:3;linspace(4,9,3);0:.5:1]
A =
1.00
2.00
4.00
6.50
0
0.50
3.00
9.00
1.00
Os elementos de uma matriz (ou de um vetor) tambm podem ser definidos por
operaes ou funes matemticas. Por exemplo:
>> B=[15 7;sqrt(36) cos(pi/3);12/7 2.5^2]
B =
15.0000
7.0000
6.0000
0.5000
1.7143
6.2500
OPERAES COM MATRIZES
As operaes com matrizes no MATLAB so as seguintes:
Transposta;
Adio;
Subtrao;
Multiplicao;
Diviso direita;
Diviso esquerda;
Exponenciao;
3.1 Transposta
O caracter apstrofo, " ' " , indica a transposta de uma matriz. Considere os
exemplos a seguir:
>>A=[1 2 3; 4 5 6; 7 8 0]
A =
1
4
7
2
5
8
3
6
0
4
5
6
7
8
0
>> B = A'
B =
1
2
3
-1
0
2
18
-2
-1
1
3.3 Multiplicao
A multiplicao de matrizes indicada por "*". A multiplicao x*y definida somente
se a segunda dimenso de x for igual primeira dimenso de y. A multiplicao
>> x'* y
aceitvel, e resulta em
Ans =
4
evidente que o resultado da multiplicao y'*x ser o mesmo. Existem dois outros
produtos que so transpostos um do outro.
>> x*y'
Ans =
2
l
-l
0
0
0
-4 -2 2
>> y*x'
Ans =
2
1
-1
0
0
0
-4
-2
2
19
O produto de uma matriz por um vetor um caso especial do produto entre matrizes.
Por exemplo A e X,
>> b = A*x
que resulta em
B =
5
8
-7
Naturalmente, um escalar pode multiplicar ou ser multiplicado por qualquer matriz.
>> pi*x
Ans =
-3.1416
0
6.2832
Alm da multiplicao matricial e escalar, podemos ter a multiplicao por elemento de
matrizes de mesma dimenso. Esse tipo de operao feita utilizando-se um ponto ( . )
antes do operador de multiplicao ( * ). Ou seja, se A e B so matrizes definidas por
A=[ a11 a12 ... a1n ; a21 a22 ... a2n ; ... ; am1 am2 ... amn] e B=[ b11 b12 ... b1n ; b21
b22 ... b2n ; ... ; bm1 bm2 ... bmn ], ento A.*B =aij*bij. Por exemplo:
>> A.*B
ans =
1
8
21
8
25
48
21
48
0
3.4 Diviso
Existem dois smbolos para diviso de matrizes no MATLAB "\" e "/". Se A uma
matriz quadrada no singular, ento A\B e B/A correspondem respectivamente
multiplicao esquerda e direita da matriz B pela inversa da matriz A, ou inv(A)*B e
B*inv(A), mas o resultado obtido diretamente. Em geral,
X = A\B a soluo de A*X = B
X = B/A a soluo de X*A = B
Por exemplo, como o vetor b foi definido como A*x, a declarao
>> z = A\b
resulta em
Z=
-1
0
2
A diviso por elemento entre matrizes definida de maneira similar multiplicao por
elemento, ou seja, A./B= aij/bij e A.\B= aij\bij , onde A e B tm mesma dimenso.
20
3.5 Exponenciao
A expresso A^p eleva A p-sima potncia e definida se A matriz quadrada e p
um escalar. Se p um inteiro maior do que um, a exponenciao computada como
mltiplas multiplicaes. Por exemplo,
>> A^3
Ans =
279
684
738
360
873
900
306
684
441
2
5
8
3
6
9
a declarao
>> A(3,3) = A(1,3) + A(3,l)
resulta em
A =
1
4
7
2
5
8
3
6
10
>> A(1:3,2)
Ans =
2
5
8
>> A(1:3,2:3)
uma submatriz 3x2, que consiste das trs linhas e das ltimas duas colunas de A.
Ans =
2
3
5
6
8
10
21
2
5
3
6
uma submatriz 2x3 que consiste da primeira e segunda linhas e todas colunas da
matriz A.
Funes: o MATLAB possui algumas funes que se aplicam a matrizes como, por
exemplo, as funes size (fornece o nmero de linhas e colunas de uma matriz) e
length (fornece o maior valor entre o nmero de linhas e colunas). O MATLAB
tem tambm funes que se aplicam individualmente cada coluna da matriz
produzindo um vetor linha com os elementos correspondentes ao resultado de cada
coluna. Se a funo for aplicada transposta de da matriz, os resultados sero
relativos a cada linha da matriz. Se o argumento da funo for um vetor, o resultado
ser um escalar. algumas dessas funes so:
funo
sum
prod
mean
std
max
min
sort
descrio
soma dos elementos
produto dos elementos
mdia aritmtica
desvio padro
maior elemento
menor elemento
ordena em ordem crescente
Submatrizes.
Sendo B uma matriz 5x5 unitria, podemos defini-la atravs da seguinte funo:
>> B = ones (5)
B =
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
22
Para que o MATLAB gere uma matriz de nmeros aleatrios entre 0 e 1, utilizamos a
funo rand (veja tambm a funo randn, utilizando o comando help ). Exemplo:
>> D=rand(2,3)
D =
0.2190
0.6789
0.0470
0.6793
0.9347
0.3835
23
4) GRFICOS NO MATLAB
A construo de grficos no MATLAB mais uma das facilidades do sistema.
Atravs de comandos simples pode-se obter grficos bidimensionais ou tridimensionais
com qualquer tipo de escala e coordenada.
4.1 Grficos Bidimensionais
Estes so os comandos para plotar grficos bidimensionais:
plot
Plotar linear.
loglog
Plotar em escala loglog.
semilogx
Plotar em semilog.
semilogy
Plotar em semilog.
fill
Desenhar polgono 2D.
polar
Plotar em coordenada polar.
bar
Grfico de barras.
stem
Seqncia discreta.
stairs
Plotar em degrau.
errorbar
Plotar erro.
hist
Plotar histograma.
rose
Plotar histograma em ngulo.
compass
Plotar em forma de bssola.
feather
Plotar em forma de pena.
fplot
Plotar funo.
comet
Plotar com trajetria de cometa.
Tabela 11 comandos para grficos bidimensionais
Se Y um vetor, plot(Y) produz um grfico linear dos elementos de Y versos o ndice
dos elementos de Y. Por exemplo, para plotar os nmeros [0.0, 0.48, 0.84, 1.0, 0.91, 0.6,
0,14], entre com o vetor e execute o comando plot:
>> Y = [0.0, 0.48, 0.84, 1.0, 0.91, 0.6, 0,14];
>> plot(Y)
24
O MATLAB pode tambm plotar mltiplas linhas e apenas um grfico. Existem duas
maneiras, a primeira usado apenas dois argumentos, como em plot(X,Y), onde X e/ou
Y so matrizes. Ento:
25
A segunda, e mais fcil, maneira de plotar grficos com mltiplas linhas usando o
comando plot com mltiplos argumentos. Por exemplo:
26
_
--.
.
TIPO DE LINHA
_______________
--------------------.-.-.-.-.-.-.-.-.-.-.-.
..............................
.
*
+
x
TIPO DE PONTO
.......................
********
++++++++++
xx x x x x x x
y
m
c
r
g
b
w
k
CORES
amarelo
lils
azul claro
vermelho
verde
azul escuro
branco
preto
27
28
29
Ttulo do grfico.
Ttulo do eixo-X.
Ttulo do eixo-Y.
Ttulo do eixo-Z.
Inserir anotao no grfico.
Inserir anotao com o "mouse".
Linhas de grade.
Tabela 13 Anotaes em grficos
30
5) Programao
5.1- Arquivos .m
Para resolver problemas simples, cmodo e eficiente utilizar o MATLAB
como se fosse uma calculadora, entrando-se com os comandos diretamente no prompt.
Ou seja, cada linha de comando introduzida na Janela de Comandos e processada
imediatamente. Entretanto, medida que o nmero de comandos aumenta, ou quando se
deseja mudar o valor de uma ou mais variveis e executar novamente os comandos, o
melhor utilizar o MATLAB como uma linguagem de programao, ou seja, utilizar o
MATLAB para executar seqncias de comandos armazenadas em arquivos de roteiro
(script). Esses arquivos que contm as declaraes do MATLAB so chamados
arquivos ".m" ( ou M-files ), como, por exemplo, exemplo1.m. Esses M-files so os
programas fontes do MATLAB e consistem de seqncias de comandos normais do
MATLAB, possibilitando incluir outros arquivos ".m" escritos no formato texto
(ASCII).
Para escrever um programa ( ou arquivo .m ) no MATLAB, escolha File na
barra de menu. Dentro do menu File escolha New e selecione M-file. Abre-se, ento,
um editor de textos, onde pode-se escrever os comandos do MATLAB. Para editar um
arquivo j existente, selecione a opo Open M-File, a partir do menu File. Os arquivos
podem, tambm, ser editados fora do MATLAB utilizando qualquer editor de texto.
Escreva, por exemplo, o programa abaixo :
%=====================================================
% Exemplo de programao no MATLAB
% Este exemplo plota uma funo seno nas sequintes
% condies:
% sen(x)
% 2*sen(x)
% 2*sen(x+45)
% 2*sen(x-90)
% 2*sen(2*x)
%==============================================
%
x=0:360;
%
% Seno com amplitude A=1 e defasagem phi=0 graus
A=1;
phi=0;
y=A*sin(2*pi*x/360+2*pi*phi/360);
% Seno com amplitude A=2 e defasagem phi=0 graus
A=2;
z=A*sin(2*pi*x/360+2*pi*phi/360);
% Seno com amplitude A=2 e defasagem phi=45 graus
phi=45;
v=A*sin(2*pi*x/360+2*pi*phi/360);
% Seno com amplitude A= 2 e defasagem phi=-90 graus
phi=-90;
31
w=A*sin(2*pi*x/360+2*pi*phi/360);
% Seno com amplitude A= 2 e defasagem phi=0 graus
phi=0;
u=A*sin(2*pi*2*x/360+2*pi*phi/360);
% Plotagem do resultado
plot(x,y,'k-',x,z,'k--',x,v,'k-.',x,w,'k.',x,u, 'ko')
grid
xlabel('Valores de x em graus')
ylabel('y,z,v,w e u')
title('Estudo de defasagem e amplitude de um seno')
legend('sen(x)','2*sen(x)','2*sen(x+45)','2*sen(x-90)',
'2*sen(2*x)')
Uma vez escrito o programa, entre no menu File da janela do editor de textos e
escolha a opo Save as... Nesta opo do menu, salve o programa como prog1.m no
seu diretrio de trabalho. Em seguida, volte janela de comandos do MATLAB e use o
comando cd ou a opo Set Path... do menu File para ir ao diretrio onde o programa
prog1.m foi salvo. Em seguida, digite o nome do arquivo (sem a extenso .m) para
executar o programa:
>>prog1
O grfico obtido mostrado na figura abaixo.
y,z,v,w e u
sen(x)
2*sen(x)
2*sen(x+45)
2*sen(x-90)
2*sen(2*x)
0.5
0
32
33
>> decsomat
Ordem da matriz : 3
A =
-5 3 0
-9 8 6
34
3 -2 -9
L =
0 0 0
-9 0 0
3 -2 0
D =
-5 0 0
0 8 0
0 0 -9
U
0
0
0
=
3 0
0 6
0 0
35
Neste exemplo, a raiz quadrada de a ser atribuda a b somente se o valor de a for maior
ou igual a 0 .
Considere o arquivo banana.m:
custo=5;
bananas=10;
if bananas>5
custo=0.1*custo;
end
custo
>>banana
custo =
0.5000
36
if bananas>5
custo=0.1*custo;
end
custo
>>banana
custo =
5
Neste exemplo, a expresso bananas > 5 falsa, assim o comando :
custo=0.1* custo
no foi executado. Assim o custo continua igual a 5.
5.4.1.2 Estrutura if-else-end
No caso de haver duas alternativas, uma outra estrutura condicional deve ser usada:
if <condio>
<comandos 1>
else
<comandos 0>
end
37
if x(n)<=pi
f(n)=1; %Faz f(t)=1 para 0<t<=pi,i.e.,
%as primeiras 50 amostras de
%f(t) so iguais a 1
else
f(n)= -1; % Faz f(t)=-1 para pi<t<=2*pi,
% i.e., as ltimas 50 amostras de
% f(t) so iguais a 1
end
end
plot(x,f, 'ko'); grid on
title('Funo retangular')
xlabel('t em radianos')
ylabel('f(t)')
A lista <comandos 1> ser executada se <condio 1> for igual a 1 (verdadeiro),
j a lista <comandos 2> ser executada se <condio 2> for 1 e assim para as outras
condies. Se nenhuma das condies for 1 ento <comandos 0> ser executada.
Quando a primeira <condio> for satisfeita e os <comandos> executados, a estrutura
if-elseif-end ser abandonada, ou seja, o controle do processamento ser transferido
para o comando imediatamente aps o end . Por exemplo, estcond3.m
a = input('Entre com o valor de a : ');
if a <= -10
b = exp(a)
elseif a < 0
b = 1/a
elseif a <= 10
b = a^2
elseif a < 100
b = sqrt(a)
else
b = 10
end
38
Deste modo foi executado o primeiro comando para o qual a condio a<=10 foi
satisfeita, ou seja, apesar da condio a<100 ser tambm verdadeiro, o comando
referente a ela no foi executado. Assim, na estrutura if-elseif-end executada
somente uma nica lista de comandos.
5.4.2- Estruturas de repetio
A estrutura de repetio faz com que uma sequncia de comandos seja executada
repetidamente at que uma dada condio de interrupo seja satisfeita. O MATLAB
possui duas estruturas de repetio: as estruturas for-end e a while-end
5.4.2.1. Estrutura for-end
A estrutura for-end permite que um grupo de comandos seja repetido um nmero
especfico de vezes. Sua sintaxe :
for <varivel>=<arranjo>
<comandos>
end
39
for i = 1:2:2*n-1
s = s + i;
end,
n2, s
>> estrep1
Valor de n : 5
n2 = 25
s = 25
Este exemplo mostra que a soma dos n primeiros nmeros mpares igual ao quadrado
de n, pois para n=5 a varivel-de-controle i assume os valores 1 3 5 7 9. Deve ser
observado o uso do ( ; ) para suprimir a exibio de resultados intermedirios no clculo
de s .
Exerccios :
1) Crie o vetor x=[0 36 72 108 144 180 216 252 288 324] atravs do comando for
(exercicio1.m).
Soluo:
x(1)=0;
for n=2:10
x(n)=x(n-1)+36;
end
x
>>exercicio1
x =
0 36 72 108 144 180 216 252 288 324
Isto , a primeira instruo diz : para n igual a 2 at 10, execute todas os comandos at a
instruo de end. No primeiro ciclo do for, n=2, no segundo n=3 e assim por diante, at
n=10. Depois do ciclo para n=10, o loop for termina e os comandos aps a instruo end
so executados, como o caso da apresentao dos resultados em x.
OBS: no Matlab, mais eficiente construir vetores como feito no captulo 3 do que com
a utilizao do comando for.
Para mostrar que as estruturas for-end podem estar encadeadas, considere, por exemplo,
os programas abaixo:
%estrep2.m
n = input('Ordem do quadrado magico : ');
A = magic(n);
Soma_Linhas = zeros(n,1) ;
40
Soma_Colunas = zeros(1,n);
for i = 1:n
for j = 1:n
Soma_Linhas(i) = Soma_Linhas(i) + A(i,j);
Soma_Colunas(j) = Soma_Colunas(j) + A(i,j);
end
end
A, Soma_Linhas , Soma_Colunas
>> estrep2
Ordem do quadrado magico : 4
A = 16
2
3
13
5
11
10
8
9
7
6
12
4
14
15
1
Soma_Linhas = 34 34 34 34
Soma_Colunas = 34 34 34 34
Cumpre observar que o MA TLAB possui comandos para determinar estes somatrios
de um modo mais simples, atravs do comando sum que fornece a soma das colunas de
uma matriz.
comum construes em que conjuntos de laos for so usados principalmente com
matrizes:
%estrep3.m
for i=1:8
for j=1:8
A(i,j)=i+j;
B(i,j)=i-j;
end
end
C=A+B;
A, B, C
>>estrep3
A =
B =
2
3
4
5
6
7
8
9
3
4
5
6
7
8
9
10
4
5
6
7
8
9
10
11
5
6
7
8
9
10
11
12
6
7
8
9
10
11
12
13
7
8
9
10
11
12
13
14
8
9
10
11
12
13
14
15
9
10
11
12
13
14
15
16
0
1
2
3
4
-1
0
1
2
3
-2
-1
0
1
2
-3
-2
-1
0
1
-4
-3
-2
-1
0
-5
-4
-3
-2
-1
-6
-5
-4
-3
-2
-7
-6
-5
-4
-3
41
5
6
7
4
5
6
3
4
5
2
3
4
1
2
3
0
1
2
-1
0
1
-2
-1
0
2
4
6
8
10
12
14
16
2
4
6
8
10
12
14
16
2
4
6
8
10
12
14
16
2
4
6
8
10
12
14
16
2
4
6
8
10
12
14
16
2
4
6
8
10
12
14
16
2
4
6
8
10
12
14
16
2
4
6
8
10
12
14
16
C =
a condio a<b testada. Se ela for verdadeira o corpo do lao, ser executado. Ento a
condio testada novamente, e se verdadeira o corpo ser executado novamente.
Quando o teste se tornar falso o lao terminar, e a execuo continuar no comando
que segue o lao aps o end.
Ao contrrio do loop for, que executa um conjunto de comandos um nmero fixo de
vezes, o loop while executa um conjunto de comandos um nmero indefinido de
vezes. Os comandos entre as instrues while e end so executadas enquanto todos os
elementos na expresso forem verdadeiras.
Exerccio: Construa o vetor y = [64 32 16 4 2 1] , usando o loop while
Soluo:
num=128;
n=0;
while num>1
num=num/2;
42
n=n+1;
y(n)=num;
end
y
43
44
end
if x == n,
j=j+l;
clc
end
if x == p,
clc
break
end
if x == q,
clc
break
end
end
function x = media(u)
% function x = media(u) calcula a mdia do vetor u, colocando o
resultado em x
x = sum(u)/length(u);
% final da subrotina media.m
>>
>>
>>
>>
prog_funcao
echo on
prog_funcao
echo off
46
6) Exerccios de Fixao
% TRABALHANDO COM NMEROS COMPLEXOS
a = [1 2;3 4] + i*[5 6;7 8]
realz = real(z)
imagz = imag(z)
modz = abs(z)
fasez = angle (z)
% MULTIPLICAO DE POLINMIOS
% x3 = (x^2 + 3x + 2).(x^2 - 2x + 1)
x3 = conv([1 3 2],[1 -2 1]) % Como ele faz isto?
% Determinao das razes de um polinmio
roots([1 3 2])
roots([1 -2 1])
roots(x3)
% RECURSOS GRFICOS
y = [0 2 5 4 1 0];
plot(y)
help pi
t = 0:.4:4*pi
y = sin(t)
z = cos(t);
plot(t, y, ., t, z "-.")
title(Funes)
xlabel("t")
ylabel("Seno e Cosseno")
text(3, 0.5, Seno)
% Aps o prximo comando, selecione a posio que deseja colocar
o texto Cosseno com
% o mouse
gtext(Cosseno)
%
%
%
%
n = 3 ;
m = 3;
for i = 1: m
for j= 1 : n
a(i, j) = i + j;
end;
end
disp(Matriz A)
disp(a)
%final do programa testel.m
47
48
Bibliografia
Reginaldo de Jesus Santos, "Introduo ao Matlab," Departamento de Matemtica,
ICEX, UFMG
http://www.mat.ufmg.br/~regi
Frederico Ferreira Campos Filho, "Apostila de Matlab," Departamento de Cincia da
Computao, ICEX, UFMG
Grupo PET, "Curso de MATLAB," Engenharia Eltrica - UFMS
http://www.del.ufms.br/tutoriais/matlab/apresentacao.htm
Apostila "MATLAB - Verso Estudante"
Adriana M. Tonini e Brulio R.G.M. Couto, "Ensinando Geometria Analtica com uso
do MATLAB," Departamento de Cincias Exatas e Tecnologia do Centro Universitrio
de Belo Horizonte / DECET - UniBH.
49