Sie sind auf Seite 1von 38

Universidade Federal do Paran

Setor de Cincias Exatas


Departamento de Matemtica

Curso Introdutrio ao Matlab

Autor: Volmir Eugnio Wilhelm

Curitiba, 10 de Julho de 2006.

Sumrio
1.

INTRODUO AO MATLAB ............................................................................................................ 3


1.1.
1.2.
1.3.
1.4.
1.5.
1.6.
1.7.
1.8.
1.9.
1.10.

2.

COMANDOS DE REPETIO E DE CONDIO ......................................................................... 8


2.1.
2.2.
2.3.

3.

ARQUIVO SCRIPT ........................................................................................................................... 10


ARQUIVO FUNO ........................................................................................................................ 11
EXEMPLOS .................................................................................................................................... 12
SALVAR E CARREGAR MATRIZES ARMAZENADAS EM ARQUIVOS -ASCII ......................................... 15
ABRIR UM ARQUIVO PARA LER E/OU GRAVAR ............................................................................... 15
LER DADOS DE UM ARQUIVO ......................................................................................................... 16
GRAVAR DADOS NUM ARQUIVO .................................................................................................... 17
ESTILOS DE LINHA DO GRFICO ..................................................................................................... 19
DIFERENTES CORES DO GRFICO ................................................................................................... 19
MLTIPLOS GRFICOS NUMA NICA FIGURA ................................................................................. 19
INSERO DE LEGENDAS ............................................................................................................... 19
EIXOS ............................................................................................................................................ 19
SUB FIGURAS NUMA NICA FIGURA ............................................................................................... 19
GRFICOS ESPECIAIS ..................................................................................................................... 20

GRFICOS 3-D ................................................................................................................................... 21


6.1.
6.2.
6.3.
6.4.
6.5.
6.6.
6.7.
6.8.
6.9.
6.10.
6.11.

7.

IF, ELSE, ELSEIF ............................................................................................................................. 9

GRFICOS 2-D ................................................................................................................................... 18


5.1.
5.2.
5.3.
5.4.
5.5.
5.6.
5.7.

6.

WHILE .............................................................................................................................................. 9

LER, SALVAR E IMPRIMIR............................................................................................................ 15


4.1.
4.2.
4.3.
4.4.

5.

FOR .................................................................................................................................................. 8

ARQUIVOS DE PROGRAMAS (M-FILES) .................................................................................... 10


3.1.
3.2.
3.3.

4.

BSICO............................................................................................................................................ 3
MATEMTICA SIMBLICA ............................................................................................................... 3
DIGITANDO UMA MATRIZ ................................................................................................................ 4
VARIVEIS, EXPRESSES E ALGUNS COMANDOS BSICOS ............................................................... 4
FORMATOS DE APRESENTAO ....................................................................................................... 5
OPERADORES RELACIONAIS ............................................................................................................ 5
OPERADORES LGICOS .................................................................................................................... 5
FUNES ELEMENTARES DO MATLAB ............................................................................................... 6
OPERAES ENVOLVENDO MATRIZES E VETORES ........................................................................... 6
MATRIZES ESPECIAIS ....................................................................................................................... 8

DESENHO DE LINHAS ..................................................................................................................... 22


GRFICO A PARTIR DE UMA MALHA .............................................................................................. 22
DESENHO DE CONTORNOS ............................................................................................................. 23
PSEUDO GRFICOS ATRAVS DE CORES ......................................................................................... 23
MALHAS E SUPERFCIES ................................................................................................................ 24
SUBPLOTS ...................................................................................................................................... 24
MOVIES.......................................................................................................................................... 24
MUDANDO PROPRIEDADES DAS SUPERFCIES ................................................................................ 24
MUDANDO PROPRIEDADES DOS EIXOS ........................................................................................... 25
MUDANDO AS PROPRIEDADES DA FIGURA ..................................................................................... 25
MUDANDO AS PROPRIEDADES DA FIGURA PARA IMPRESSO ......................................................... 25

FUNES DE OTIMIZAO.......................................................................................................... 25
7.1.
7.2.
7.3.
7.4.
7.5.

ATTGOAL ........................................................................................................................................ 25
CONLS ............................................................................................................................................ 26
CONSTR .......................................................................................................................................... 26
FMIN .............................................................................................................................................. 27
FMINU, FMINS ................................................................................................................................. 27

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm
7.6.
7.7.
7.8.
7.9.
7.10.
7.11.
7.12.
8.

FSOLVE .......................................................................................................................................... 27
FZERO ............................................................................................................................................ 28
LEASTSQ ........................................................................................................................................ 28
LP .................................................................................................................................................. 29
MINMAX .......................................................................................................................................... 29
NNLS .............................................................................................................................................. 30
QP .................................................................................................................................................. 30

FUNES ESTATSTICAS .............................................................................................................. 31

10.

CONSTRUO DE INTERFACE AMIGVEL COM O USURIO ...................................... 31

10.1.
MENUS .......................................................................................................................................... 31
10.1.1. Janela..................................................................................................................................... 31
10.1.2. Item de menu .......................................................................................................................... 32
10.2.
OBJETOS DE GRFICOS E DE CONTROLE......................................................................................... 34
10.2.1. Frames ................................................................................................................................... 34
10.2.2. Static text................................................................................................................................ 34
10.2.3. Editable text ........................................................................................................................... 35
10.2.4. Push button ............................................................................................................................ 35
10.2.5. Check Boxes ........................................................................................................................... 36
11.

ALGUNS SITES NA INTERNET ................................................................................................. 37

12.

REFERNCIAS BIBLIOGRFICAS .......................................................................................... 37

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

1.

Introduo ao Matlab

Matlab: Matlab um programa verstil para computadores, tendo como parte central as
ferramentas para lgebra linear. A sigla Matlab vem de MATrix LABoratory. O cdigo do
programa foi desenvolvido em linguagem C sendo melhorado medida que se tornam disponveis
novas verses. [Bernard Kolman, Introduo a lgebra Linear, 1996]
1.1. Bsico
- Digitando help aparece na tela uma lista de sudiretrios do Matlab e outros diretrios
contendo arquivos que correspondem a comandos e conjuntos de dados.
-

Digitando help nome, onde nome o nome de um comando, fornece informaes sobre
esse comando.

Uma vez carregado o programa Matlab, aparecer o logotipo do programa e o smbolo


>>, indicando que o Matlab est aguardando um comando.

Aps digitar o comando deve-se apertar a tecla ENTER para ser executado pelo Matlab.

medida que so digitados comandos, Matlab salva um certo nmeros de comandos


utilizados numa pilha. Comandos anteriores podem ser recuperados utilizando-se a tecla .

Comandos que no cabem numa linha podem ser continuados em outra linha utilizando-se
... (trs pontos consecutivos).

Para parar a execuo de um comando utiliza-se Ctrl+C.

Comandos finalizados por ; (ponto e vrgula) indica que os resultados no devero aparecer
na tela.

O Matlab difere letras minsculas de minsculas.

O comando disp mostra na tela o valor de variveis e tambm mostra mensagens.

Qualquer comando do DOS pode ser executado digitando antes ! (exclamao).

Quando o usurio inicializa uma sesso do Matlab, o diretrio de trabalho ser


c:\matlab\bin. O usurio pode alterar a pasta de trabalho com os comandos cd.. e cd.

Os comandos pwd e cd mostram em qual diretrio o usurio est no momento.

Executando o comando exit, o usurio encerra a sesso atual do Matlab.

O comando diary lista.txt grava todos os comandos digitados na tela de trabalho


do Matlab e os resultados gerados no arquivo lista.txt. Usar o comando diary off
desativa a funo diary.

1.2. Matemtica simblica


Matlab verso 6.08 apresenta recursos para trabalhar com matemtica simblica
>>f = 'sin(x)'

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

>>syms x
%transforma x em smbolo
>>g = sin(x)
>>h = x^2 + 2x 1
>>fplot(g,[0,5*pi/2])
>>subs(g,'x',pi)
%clculo de g(pi)
>>int(g,x)
%integrao de g em relao a x
>>diff(h,x)
%derivada de h em relao a x
>>double
>>char
1.3. Digitando uma matriz
>>A=[1 2 3]
%vetor linha (separado por espaos ou vrgulas)
>>B=[1;2;3]
%vetor coluna (separado por ponto e vrgula)
>>C=[1 2 3; 4 5 6]
%matriz 2x3
>>disp('A matriz A :'), disp(A)
1.4. Variveis, expresses e alguns comandos bsicos
workspace: espao de trabalho do Matlab. Armazena as variveis e seus valores.
who: lista todas as variveis armazenadas na rea de trabalho do Matlab.
Your variables are:
A
B

whos: lista as variveis e a quantidade de bytes ocupados por cada uma.


Name
A
B
C

Size
1 by 3
3 by 1
2 by 3

Elements
3
3
6

Bytes
24
24
48

Density
Full
Full
Full

Complex
No
No
No

save: salva num arquivo *.mat a rea de trabalho


>>save A.txt A ascii;
>>save A.mat A ascii;
load: carrega o que foi salvo num arquivo com extenso *.mat
>>load A.txt A ascii;
>>load A;
variavel = expresso
>>raiz=sqrt(6) %a varivel raiz assume 2.4495
ans: omitindo o nome da varivel (e o sinal de igualdade) Matlab cria automaticamente
uma varivel com nome ans. Esta varivel pode ser acessada imediatamente aps sua
criao.
expresso
>>sqrt(-6)

%Matlab cria a varivel ans com valor (0 + 2,4495i)

clear: limpa o contedo de algumas ou de todas as variveis do workspace


>>clear A
%deleta a matriz A
>>clear all
%deleta todas as variveis do workspace

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

inf or Inf: expressa infinito


>>infinito = 1/0
NaN: is Not a Number
>>e=0/0
>>f=inf/inf
>>g=tan(inf)
eps: EPS o nvel de tolerncia usada por vrias funes do Matlab
>>eps
%mostra o valor default de eps (2.2204e-016)
>>eps = 1E^-5
%altera o valor de eps para 10-15
pi: 3,1415...
>>cos(2*Pi/3)

%valor de
%calcula o co-seno de 120

1.5. Formatos de apresentao


O Matlab possui diferentes formatos de visualizao do valor das variveis. Por exemplo,
se a matriz contm apenas inteiros, todos os termos da matriz so apresentados com valores
inteiros
A=[1 3 4; 7 3 70]
Se algum termo da matriz no pode ser representado como um inteiro, ento toda a matriz
apresentada de modo conhecido como format short. Tal apresentao mostra quatro
dgitos depois do ponto decimal, a exceo do zero.
A = [2 3.1234 1/4; 7.654321 0 pi]
Para ver mais de quatro dgitos, mude o formato de apresentao.
format long
format long e
format short e
format short
1.6. Operadores relacionais
<
% menor que
<=
% menor ou igual a
>
% maior que
>=
% maior ou igual a
==
% igualdade de comparao
~=
% diferente
(=
% igualdade de atribuio)
>>A=[4 2 1; 5 3 1; 0 50 2]
>>X=A>3
%X=[1 0 0;1 0 0;0 1 0] indica onde esto os valores de A maiores
que 3
1.7. Operadores lgicos
&
%e
|
%ou
~
%no

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

1.8. Funes elementares do Matlab


>>clear all
>>A=[-0.1, 0.1, 0; inf 2 10; -pi 5 9.78] %inserir esta matriz
abs(X):
>>abs(A)

%valor absoluto (positivo ou nulo)

cos(X):
sin(X):
>>cos(A)

%co-seno de um ngulo expresso em radianos


%seno de um ngulo expresso em radianos
>>sin(A)

log(X):
>>log(A)

%logaritmo natural
>>log(abs(A))
%logaritmo na base 10

log10(X):
>>log10(A)
exp(X):
>>exp(-1)

%funo exponencial
>>exp(A)

ceil(X):
>>ceil(A)

%arredonda para cima

floor(X):
>>floor(A)

%arredonda para baixo

round(X):
>>round(A)

%arredonda para o inteiro mais prximo

polyval(P(X),b):
%Avalia o polinmio P(X) no ponto b
>>polyval([1 5 4],-1)
roots(P(X)):
>>roots([1 5 4])

%informa as razes do polinmio P(x)

sqrt(x):
>>sqrt(A)

%raiz quadrada de nmeros positivos e negativo)

1.9. Operaes envolvendo matrizes e vetores


clear('all')
>>A=[1 2 3]
%vetor linha (separado por espaos ou vrgulas)
>>A=[1;2;3]
%vetor coluna (separado por ponto e vrgula)
>>A=[1 2], B = [3 4]
>>C=[A B]
%concatenao de vetores forma vetor linha
>>C=[A;B]
%formao da matriz 2x2
>>A=[1;2], B = [3;4]
>>C=[A B]
%formao de matrizes - 1 col. vetor A e 2 col.
vetor B

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

>>C=[A;B]

%concatenao de vetores - forma vetor coluna

>>clear all
>>A=1:2:10
>>A=1:10
>>A=1:-0.1:0
>>A=linspace(1,0,4)
elementos

%A = [1 3 5 7 9]
%B = [1 2 3 4 5 6 7 8 9 10]
%C = [1 0.9 0.8 ... 0.1 0]
%vetor com incio em 1 e fim em 0 contendo 4

>>A=1:3:11
>>A(2)
>>A(2:3)
>>A([2 4])
>>A + 1

%A = [1 4 7 10]
%ans = 4
%ans = [4 7]
%ans = [4 10]
%ans = [2 5 8 11]

>>clear all
>>A=[1:3; 4:6]
>>A(1,2)
>>A(1,:)
>>A(:,2)

%A = [1 2 3; 4 5 6]
%ans=2
%primeira linha: ans=[1 2 3]
%segunda coluna: ans=[2 5]

>>B = [-1 -2 -3]


>>B(:) + A(2,:)
>>B + A(2,:)
>>B(1,:) + A(2,:)

%conta errada
%conta correta
%conta correta

>>length(A(2,2:3))
%comprimento de um vetor ans=2
>>size(A)
%nmeros de linhas e colunas da matriz A, ans =
[2 3]
>>[lin col] = size(A)
>>sum([1 5 4])
%soma os elementos de um vetor
>>sum(A)
%soma as colunas da matriz A (resulta num vetor)
>>max(A(2,:))
%retorna o elemento mximo de um vetor
>>max(A)
%retorna o mximo de cada coluna de A (resulta
num vetor)
>>min(A(:,2))
%retorna o elemento mnimo de um vetor
>>[vet val]=eig(A)
%autovetores(vet) e autovalores(val) de A
>>inv(A)
%clculo da inversa de A
>>[Lin Col]=find(A>4) %mostra as coordenadas dos elementos maiores
que 4
>>A=[1 2 3 4 5 6]
>>B=[7 8 9 10 11 12]
>>A>3
%ans = [0 0 0 1 1 1]
>>A([0 0 1 0 0 1])
%ans = [3 6]
>>X=A(A>3)
%Atribui a X os coeficientes de A que so maiores
que 3
>>X=B(A>2 & A<5) %A>&A<5 = [0 0 1 1 0 0] X=[9 10]
>>A=[pi sqrt(3) 8; -1 0 4/9]
>>B=[3 2, 1/3; 2 3 4]
>>C=A.*B
%multiplicao termo a termo (A e B de igual
dimenso)

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

>>C=B./A
>>C=A.^B
>>C=A.^2
>>C=2.^A

%diviso termo a termo


%potenciao termo a termo

>>clear all
>>A = [1 0 2; 4 7 2; -1 0 1]
%A deve ser uma matriz quadrada
>>p = 3
%nmero qualquer
>>C=A^p
%eleva a matriz A potncia p
>>C=A^0.3
%utiliza autovalores e autovetores
>>clear all
>>A=[1 1; 1 1;
>>B=[1 2]T
>>X=A\B'
(inv(A)*B)
>>X=A'/B
(B'*inv(A))

%resolve AX = B (A quadrada no singular)


%resolve XA = B (B pode ser uma matriz)

1.10. Matrizes especiais


>>A = [1:3; 4:6]
>>A`
%transposta da matriz A
>>eye(3)
%matriz identidade 3x3
>>diag([6 3 1]) %matriz 3x3 cuja diagonal 6 3 1
>>rand(3)
%matriz 3x3 formada por elementos aleatrios
>>zeros(3,2)
%matriz 3x2 formada por zeros
>>zeros(2)
>>ones(2,1)
%matriz 2x1 formada por uns
>>A=[A ones(2)]
>>B(:,3)=ones(n,1)
>>A=[]
%matriz vazia, sem dimenso
>>A = 1:0.5
>>A=[3 2 0; 5 -3 1; -2 0 7]
>>A(:,2)=[]
%elimina a coluna 2 da matriz
>>A([1 3],:)
%elimina as linhas 1 e 3
>>flipud(A)
%troca as linhas de cima para baixo
>>A=flipud(A([1 2],:))
%troca somente as linhas 1 e 2
>>A=[A(2,:); A([1 3],:)]
%troca somente as linhas 1 e 2
>>fliplr(A)
%troca as colunas da esquerda direita
>>A=fliplr(A(:,[1 2])
%troca somente as colunas 1 e 2
>>A=[A(:,[2 1]), A(:,3)]
%troca somente as colunas 1 e 2
>>sparse

2. Comandos de repetio e de condio


2.1. for
for j=1:n
comandos
end

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

Exemplo (1)
>>for i=1:3, x(i) = -i;, end, disp(x) %gera o vetor x = [-1 -2 -3]
>>for i=1:4...
>>
for j=1:5...
>>
A(i,j) = 1/(i+j-1); ...
>>
end ...
>>end, A
2.2. while
while expresso
comandos
end
Exemplo (2)
>>x =10;
>>n = 0;
>>while x>1e-100,
>>
x=x/2;
>>
n = n+1;
>>end, x, n
2.3. if, else, elseif
if expresso 1
conjunto de comandos 1
elseif expresso 2
conjunto de comandos 2
...
else
conjunto de comandos
end
Exemplo (3)
>>%Problema da teoria dos nmeros (Fonte: Matlab, Users
Guide)
>>While 1
>>n = input('Digite um nmero inteiro, (se for negativo o
programa ser abortado.
');
>>
if n <= 0, disp('O programa foi abortado!!'); break;
end
>>
while n > 1
>>
if rem(n,2) == 0
>>
n=n/2
>>
else
>>
n=3*n+1
>>
end
>>
end
>>end

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

3. Arquivos de programas (M-files)


No Matlab, quando dado um comando, este comando processado e imediatamente o
resultado mostrado na tela. Matlab tambm pode executar seqncias de comandos
armazenados em arquivos cuja extenso .m (da a denominao de M-files).
Um M-file consiste de uma seqncia de comandos do Matlab que possivelmente incluem
referncias a outros M-files. Um M-file pode-se chamar a si mesmo (recursividade ou auto
referncia) e podem ser criados em qualquer editor de texto.
Pode-se ter dois tipos de M-files: os scripts e as funes. Ambos so do tipo ASCII, porm os
scripts contm uma longa seqncia de comandos do Matlab, enquanto que as funes so
criadas para aumentar a lista de funes do Matlab (geralmente para resolver problemas
especficos).
3.1. Arquivo Script
Quando um arquivo script chamado, Matlab simplesmente executa os comandos
contidos nele. As variveis geradas permanecem na rea de trabalho (workspace). Por exemplo,
vamos gerar um arquivo script que contem os comandos do exemplo anterior.
Para iniciar, digite na rea de trabalho do Matlab
Exemplo (4)
>>edit exemplo4.m
Aguarde o editor do DOS (ou outro) abrir o arquivo exe01.m e depois digite a seguinte
seqncia de comandos.
clc;
%para limpar a tela
disp('Problema da teoria dos nmeros-Matlab, Users Guide)');
While 1
m = 0; %zerar o contador do nmero de operaes
n = input('Digite um nmero inteiro positivo: ');
disp(O numero digitado foi);
disp(n);
if n <= 0, break; end
while n > 1
m = m + 1;
if rem(n,2) == 0
n=n/2;
else
n=3*n+1;
end
end
disp('A quantidade de operacoes foi');
disp(m);
end
Aps digitada a seqncia, feche o editor do DOS. O arquivo exe01.m foi salvo no
diretrio c:/matlab/nome, onde nome o sub-diretrio do Matlab em que o usurio est
no momento. Na rea de trabalho do Matlab digite o comando
>>exe01

10

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

Esta instruo faz com que o Matlab execute todos os comandos contidos no M-file
exe01.m. Aps o trmino da execuo, digite
>>whos
>>clear all
>>whos
3.2. Arquivo Funo
Um M-file que contem no incio da primeira linha a palavra function, denominado de
arquivo funo. A funo difere do script em relao aos argumentos (parmetros) que so
passados. Por exemplo seja a seguinte funo, que calcula o fatorial de nmeros inteiros
positivos.
Exemplo (5)
>>!edit exemplo5.m
function y = fatorial(x)
%FATORIAL Fatorial de nmeros inteiros positivos
%Para constantes, FATORA retorna o fatorial de x
%Para vetores, FATORA retorna um vetor contendo as fatoriais
%dos elementos de x
%Para matrizes, FATORIAL retorna uma matriz contendo as
%fatoriais dos elementos de x
[m,n] = size(x)
if (m*n) == 1,
if (x < 0) | ((ceil(x) x) ~= 0),
y = NaN;
elseif (x == 0),
y = 0;
else,
y = prod(x:-1:1);
end;
else,
for i = 1:m,
for j = 1:n,
y(i,j) = fatora(x(i,j);
end;
end;
end;
Alguns detalhes na gerao de um M-file funo

A primeira linha declara o nome da funo, o argumento de entrada, e o argumento


de sada. Sem esta linha, o M-file um arquivo script ao invs de um arquivo
funo.

smbolo % indica que o restante da linha um comentrio e ser ignorado.

O primeiro conjunto de linhas, precedidas de %, sero mostradas quando for digitado


help fatora.

11

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

A primeira linha, precedida de %, conhecida como linha H1, e contem palavras


chaves a respeito da funo criada. Esta linha aparece quando for usado o comando
lookfor fatorial, por exemplo.

As variveis m e n so locais e no existem na rea de trabalho do Matlab aps


fatora ter sido executado.

A execuo de um M-file pode ser interrompida pelo usurio digitando Ctrl+C na


rea de trabalho. Se o usurio incluir o comando return no M-file, ento Matlab
pra (aborta) a execuo dos comandos contidos no M-file.

Utilizando o comando pause num M-file, Matlab pra a execuo dos comandos
contidos no M-file e aguarda o usurio pressionar qualquer tecla.

O emprego do comando disp() til para encontrar erros no programa.

3.3. Exemplos
Exemplo (6)
Implementar a inverso de uma matriz quadrada mm.
function y = inversa(x);
%INVERSA calcula a inversa de uma matriz quadrada
%
O metodo de calculo eh o do escalonamento
[m,n]=size(x);
if (m ~= n),
disp('A matriz deve ser quadrada. O programa foi abortado!');
break;
else,
a = [x eye(m)];
pivot = 1:m;
for i=1:m,
[lin, col] = find(abs(a(i:m,i))>1e-15); %primeiro nao nulo
if lin == [],
disp('A matriz nao eh inversivel');
disp('O programa foi abortado!');
return;
elseif (i-1+min(lin) ~= pivot(i)),
%o pivot eh nulo
aux1 = a(i,:);
aux2 = a(min(lin),:);
a(i,:) = aux2;
a(min(lin),:) = aux1;
end
a(i,:)= a(i,:)/a(i,i);
for j = i+1:m
a(j,i:2*m) = a(j,i:2*m) - a(j,i)*a(i,i:2*m);
end
for j = 1:i-1
a(j,i:2*m) = a(j,i:2*m) - a(j,i)*a(i,i:2*m);
end
end
end
y = a(1:m,m+1:2*m);

12

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

Exemplo (7)
Implementar o mtodo simplex.
function [primal, dual, fo] = simplex(c, a, b, tol)
%SIMPLEX
%
%
%
%

resolve problemas de programacao linear


Os problemas sao de maximizacao com restricoes do tipo
menor ou igual.
Nao pode-se usar restricoes de igualdade e o vetor b deve
ser positivo.

if nargin < 4, tol = 1e-15; end;


[lin_c, col_c] = size(c);
[lin_a, col_a] = size(a);
[lin_b, col_b] = size(b);
if (lin_c > 1),
disp('O programa serah abortado!! A funcao objetivo');
disp('deve ser expressa por um vetor LINHA.');
return;
end
if (col_a ~= col_c),
disp('O programa serah abortado!! O numero de elementos do
vetor
disp('funcao objetivo deve ser igual ao numero de colunas da');
disp('matriz custo (A).');
return;
end
if (lin_b ~= lin_a),
disp('O programa serah abortado!! O numero de elementos do');
disp('vetor COLUNA b (rhs) deve ser igual ao numero de
linhas');
disp('da matriz custo (A).');
return;
end
C = [c zeros(1,lin_a) 0];
A = [a eye(lin_a) b];
continua = 1;
iteracao = 0;
base = col_a+1:col_a+lin_a;
while (continua == 1) & (iteracao < 51),
iteracao = iteracao + 1;
entra = max(C)
if (max(C) >= tol),
sai1 = find(A(:,entra)>tol);
if (isempty(sai1) == 0),
menor = b(sai1)./A(sai1,entra);
sai2 = min(b(sai1)./A(sai1,entra));
sai = find(menor==sai2)
else,
continua == 0;
disp('O problema eh ilimitado!!');
break;
end;
base(sai) = entra;
A(sai,:) = A(sai,:)/A(sai,entra);

13

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

else,

end

zerar = find(abs(A(:,entra))>tol);
for i = 1:sai-1,
A(i,:) = A(i,:) - A(sai,:)*A(i,entra);
end
for i = sai+1:lin_a,
A(i,:) = A(i,:) - A(sai,:)*A(i,entra);
end
C(1,:) = C(1,:) - A(sai,:)*C(1,entra);
continua = 0;
disp('A solucao encontrada eh otima!!');
basees = base
primal = A(:,col_a+lin_a+1)
dual
= C(1+col_c:col_c+lin_a)'
fo
= -C(col_c+lin_a+1)

end
Exemplo (8)
Para evitar erros de digitao de seqncias de nmeros de importncia fundamental,
como a matrcula de um aluno, o CPF, o nmero da conta bancria, geralmente se adiciona
ao nmero um dgito verificador. Por exemplo, o nmero de matrcula 811057 usado
como 8110573, onde 3 o dgito verificador calculado da seguinte maneira:
a) cada algarismo do nmero multiplicado por um peso comeando de 2 e crescendo de
1 unidade da direita para a esquerda:(87, 16, 15, 04, 53, 72, 32;
b) somam-se as parcelas obtidas: 56 + 6 + 5 + 0 + 15 + 14 = 96;
c) obtm-se o resto da diviso desta soma por 11: 96 11 = 811 + 8 (o resto 8);
d) subtrai-se de 11 o resto obtido: 11 8 = 3;
e) se o valor encontrado for 10 ou 11, o dgito verificador ser 0; nos outros casos o dgito
verificador o prprio valor encontrado
Pede-se para escrever uma funo, cujo parmetro de entrada o nmero de registro da
matrcula (incluindo o dgito), que verifica se o dgito informado est correto ou no.
Exemplo (9)
Em um certo municpio, vrios proprietrios de imveis esto em atraso com o
pagamento do imposto predial. Implementar um programa de computador (em forma de
funo) que calcula e informa na tela do computador o valor da multa a ser paga pelo
proprietrio considerando que:
- o nmero de meses em atraso e o valor do imposto sero informados pelo usurio do
programa;
- as multas devem ser calculadas a partir do valor do imposto e de acordo com a seguinte
tabela:

Valor do imposto
at R$ 10,00
de R$ 10,01 a Cr$ 35,00
de R$ 35,01 a R$ 110,00
de R$ 110,01 a R$ 250,00
Acima de R$ 250,00

% por ms em atraso
1%
2%
4%
7%
10%

Dever ser impresso na tela (i) o valor do imposto sem a multa, (ii) a quantidade de meses
em atraso; (iii) o valor da multa; (iv) o total a ser pago pelo proprietrio.

14

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

Exemplo (10)
Implementar uma funo que classifica um NMERO inteiro positivo em PAR ou
IMPAR. Se o NMERO mpar, tambm dever ser informado na tela se PRIMO ou
no.
Exemplo (11)
Implementar a seqncia de Fibonacci

4. Ler, Salvar e Imprimir


Seja a seguinte matriz digitada no arquivo matriz.txt. Esta matriz deve ser
digitada num arquivo utilizando o editor do DOS, o Excel, ou o WordPad, e deve ser
gravado na rea de trabalho do usurio.
9
46
45
36
16
68
70
73
48
56

13 24
46 24
72 5
90 8
28 65
26 20
87 85
24 18
81 18
91 100

44
35
32
37
40
60
12
4
46
87

>>matriz = random('Discrete Uniform',100,10,4))

4.1. Salvar e carregar matrizes armazenadas em arquivos -ascii


save A.txt A -ASCII
%salva no arquivo A.txt a varivel A
load A.txt
%carrega dados contidos em arquivos
>> A = random('unif',0,1,[3,4]) %gerar dados aleatrios
>> save a.txt a - ascii
%salva num arquivo
>> load a.txt
%carrega a.txt e cria a matriz a
>> AB=load('a.txt') %carrega a.txt e cria a matriz AB
4.2. Abrir um arquivo para ler e/ou gravar
Para que Matlab possa ler dados em arquivos (e armazen-los no workspace) e/ou
gravar em arquivos os resultados oriundos da execuo de script files ou m-functions,
necessrio antes executar o seguinte comando:
fid = fopen(arq,permite) % FID: File Identifier
Este comando abre o arquivo arq permitindo a leitura ou a gravao. O argumento arq
um string (p.ex. 'matriz.txt') que contem o nome do arquivo a ser aberto. O argumento
permite indica a operao (de leitura ou de gravao) que ser executada no arquivo aberto.
Alguns dos possveis valores do argumento permite so:

15

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

'r'
% para ler
'w'
% para escrever (cria se necessrio)
'a'
% para anexar (cria se necessrio)
'r+'
% para ler e escrever (no cria)
'a+'
% para ler e adicionar (cria se necessrio)
Se ocorrerem erros ao executar o comando, fopen no abre o arquivo especificado no
argumento arq, e retorna FID = -1. Se o comando for executado com sucesso, ento FID
assumir um nmero inteiro maior ou igual a 3.
>>arq = fopen('matriz.txt','r')
>>arq = fopen('result.txt','w')

%abre o arquivo matriz.txt


%tenta abrir result.txt

4.3. Ler dados de um arquivo


Para ler, e carregar para o workspace, dados armazenados num arquivo do tipo ascii,
utiliza-se o comandofscanf, e se o arquivo for binrio, emprega-se o comando fread.
Suponhamos que o comando fopen j tenha sido usado, ou seja, o usurio digitou >>fid =
fopen('NomeArquivo','r'). O comando de leitura para carregar os dados contidos no
arquivo NomeArquivo (tipo ascii) :
[matriz quantos] = fscanf(fid, formato, tamanho)
matriz: a varivel na qual sero armazenados os dados lidos
quantos: a quantidade de dados lidos
formato: um string que contem o caracter %, tamanho do campo a ser lido e algum
caracter do tipo d, i, o, u, x, e, f, g, s, c, dependendo dos dados a serem lidos.
Por exemplo '%s', '%d' e '%f'.
tamanho: opcional e limita a quantidade de elementos que podem ser lidos do arquivo.
Se no for especificado, o arquivo inteiro ser ser lido. O argumento
tamanho pode assumir os valores
N:
l pelo menos N elementos num vetor coluna
Inf:
l tudo, at o final do arquivo
[M,N]: e uma matriz MN, preenchendo pelo menos uma matriz M colunas
por N linhas. N pode ser inf mas M no.
Se o uso do fid for desnecessrio, deve-se utilizar o comando fclose(fid). Se este
comando no for utilizado o arquivo fid continuar disponvel, ocupando desnecessariamente
memria no workspace.
Exemplo: Vamos inicialmente criar a matriz exp.txt e salv-la num arquivo ascii.
>> a = 0:0.1:1, b = exp(a), exp=[a b]

exp= 0.00
0.10
0.20
0.30
0.40
0.50
0.60
0.70
0.80
0.90
1.00

1.00000000000000
1.10517091807565
1.22140275816017
1.34985880757600
1.49182469764127
1.64872127070013
1.82211880039051
2.01375270747048
2.22554092849247
2.45960311115695
2.71828182845905

16

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

>>save exp.txt exp ascii %cria o arquivo exp.txt


>>fid = fopen('exp.txt')
%abre o arquivo exp.txt
>>a = fscanf(fid,'%g %g',[2 inf]) %A matriz gravada possui duas
colunas. A quantidade de linhas dado como inf.
>>a = a'
%transposta
>>a0 = fscanf(fid,'%g',[2 inf]) %leitura correta
>>a1 = fscanf(fid,'%4g',[2 11]) %leitura absurda
>>a2 = fscanf(fid,'%4g')
%transforma num vetor coluna
>>a3 = fscanf(fid,'%f',[2,inf]) %l corretamente
>>a3 = fscanf(fid,'%f4',[2,inf]) %no l corretamente
>>fclose(fid)
%fecha o arquivo aberto
>>fid = fopen('matriz.txt') %matriz de nmeros inteiros
>>R0 = fscanf(fid,'%f')
%l nmeros reais como inteiros
>>R1 = fscanf(fid,'%4f')
%l erradamente
>>S = fscanf(fid,'%s')

%l (e retorna) um string

[matriz, quantos] = fread(fid,tamanho,precisao): l dados binrios


4.4. Gravar dados num arquivo
O dois principais comando utilizados para gravar resultados em arquivos so os comandos
fprintf e fwrite. O comando fwrite grava dados em formato binrio. A sintaxe do
comando fprintf :
fprintf(fid,format,A,...)
Se fid for ignorado, ento o resultado aparecer na tela.
Exemplo
>>a = exp(random('unif',0,1,[2,2]))
>>a(1,:) = a(1,:)*1000
>>a(2,:) = a(2,:)/1000
>>format long
>>fprintf('%f', a)
%gera um vetor sem espaos
>>fprintf('%f ', a)
%gera um vetor separando os elementos
>>fprintf('%4.0f ', a) %imprime a parte antes da vrgula
>>fprintf('%3.2f ', a) %imprime os nmeros com 2 dgitos
>>fprintf('A = %8.4f ', a) %reserva 8 posies para escrever o nmero,
imprimindo 4 dgitos aps a vrgula
>>for i=1:2, fprintf('a(%d,%d) = %9.4f, a(%d,%d) = %9.4f
\n',i,1,a(i,1),i,2,a(i,2)), end
>>for i=1:2, fprintf('a(%f,%d) = %9.4f, a(%g,%d) = %9.4f
\n',i,1,a(i,1),i,2,a(i,2)), end
>>fid = fopen('a.txt', 'w')
>>for i=1:2, fprintf(fid,'a(%d,%d) = %9.4f, a(%d,%d) = %9.4f
\n',i,1,a(i,1),i,2,a(i,2)), end
>>type a.txt
%no funciona
>>fclose('all')
%fechar os arquivos abertos
>>type a.txt
%mostra o contedo do arquivo a.txt

17

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

>>fid = fopen('a.txt', 'w')


>>for i=1:2, fprintf(fid,'\nLinha %d',i);
fprintf(fid,'%15.5f',a(i,1:2)), end
ou
>>for i=1:2, fprintf(fid,'Linha %d',i);
fprintf(fid,'%15.5f',a(i,1:2)); fprintf(fid,'\n'), end
ou
>>for i=1:2, fprintf(fid,'Linha %d',i);
fprintf(fid,'%15.5f',a(i,1:2)); fprintf(fid,'\n\n'), end
>>fclose('all')
%fechar os arquivos abertos
>>type a.txt
%mostra o contedo do arquivo a.txt
Resumo referente ao comando '%a.bf'
O argumento a a quantidade de casas reservadas para escrever o nmero;
O argumento b a quantidade de dgitos impressos aps a vrgula;
Se o nmero que dever ser escrito contiver mais dgitos vlidos antes da vrgula
do que a quantidade a, todos eles sero impressos, inclusive os b dgitos.
Se o usurio conhecer bem as quantias a serem impressas, poder alinh-las atravs
de um controle correto sobre o valor de a.

5. Grficos 2-D
Comando plot
plot(x,y,s) onde s um string de 1, 2 ou 3 dos seguintes caracteres
y
yellow
.
point
m
magenta
o
circle
c
cyan
x
x-mark
r
red
+
plus
g
green
solid
b
blue
*
star
w
white
:
dotted
k
black
-.
dashdot
-dashed
>>x = linspace(0,2*pi,100) %plotar a funo seno
>>y = sin(x);
>>plot(x,y)
>>fplot('sin(x)',[0, 2*pi])
>>fplot('sin(x)/x',[-50*pi,50*pi])
>>zoom on
>>zoom off
>>zoom out
>>fplot('-10*x^3+20*x^2+10*x',[-1 3 -5 30])
>>fplot('sin(x)/x',[-50*pi,50*pi])
>>grid on
>>zoom on
%qual o 1 vlr de x positivo ou negativo q/ anula a funo?
>>grid off

18

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

5.1. Estilos de linha do grfico


>>x = linspace(0,2*pi,100);
>>y = tan(x);
>>plot(x,y)
>>plot(x,y,':')
>>plot(x,y,'--')
>>plot(x,y,'.-')
>>plot(x,y,'o')
5.2. Diferentes cores do grfico
>>plot(x,y,'r') %vermelho
>>plot(x,y,'rx')
>>fplot('sin(x)*x^3',[0,4*pi],'-.b')
5.3. Mltiplos grficos numa nica figura
>>x = linspace(0,2*pi,100);
>>y = tan(x);
>>z = cos(x);
>>plot(x,y,x,z);
>>plot(x,y,'r--',x,z,'b:o');
>>fplot('[sin(x),cos(x)]' [0,4*pi],'-.b')
>>fplot('[tan(x),sin(x),cos(x)]',2*pi*[-1 1 -1 1])
>>fplot('[tan(x),sin(x)]',2*pi*[-1,1,-1,1],'o',':') % :
>>fplot('[tan(x),x]',2*pi*[-1,1,-1,1],'bo','r--') % r
>>fplot('tan(x)',2*pi*[-1,1,-1,1],'r--')
>>hold on
>>fplot('sin(x)',2*pi*[-1,1,-1,1],'b:')
>>grid on, zoom on, hold off
5.4. Insero de legendas
>>xlabel('x');
>>ylabel('y');
>>title('Seno e Co-seno');
>>legend('seno','co-seno');
>>text(1.3, 4.2, 'AQUI');
>>gtext('MOUSE');
5.5. Eixos
axis([Xmin Xmax Ymin Ymax])
>>plot(x,y,'r-o',x,z,'b:.');
>>grid on
>>zoom on
>>axis([0 2*pi -10 10])
>>axis([0 2*pi -1 1])
5.6. Sub figuras numa nica figura
>>subplot(2,1,1)
>>fplot('x.^2',[0 4],y*);
>>subplot(2,1,2)
>>fplot('-x.^2',[0 4],g--);
>>grid on

19

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

Limpar figura
>>clf;
Grficos especiais
5.7. Grficos especiais
>>x = linspace(0,10*pi,1000);
>>plot(x,z)
>>semilogx(x,z) %log na base 10 Erro!! contem dados negativos
>>semilogy(x,z)
>>polar(pi/6,3, 'ro')
>>polar([0:0.5:10*pi/2],[0:0.5:10*pi/2],'-')
>>polar([0:0.5:10*pi/2],[0:0.5:10*pi/2],'-')
bar
Exemplo (9)
Criar o arquivo exemplo9.m
x = [0:0.1:2*pi];
y = cos(x);
plot(x,y);
xlabel('x');
ylabel('y');
title('Curva Co-seno');
hold on;
pause;
z = sin(x);
plot(x,z);
grid on
hold off
Exemplo (10)
Vamos criar trs arquivos. Um arquivo contem os dados, denominado de dados.dat,
o segundo contem uma funo denominado de f.m e o terceiro o programa principal
(plot1.m)
>>edit
[1 1; 2 0; 3 1] %digite no arquivo dados.dat duas colunas e trs linhas
function y = f(x)
y = exp(-x).*sin(x); %o arquivo f.m ter apenas duas linhas
load dados.dat %gera a matriz dados
xx = dados(:,1);
yy = dados(:,2);
plot(xx,yy,'c-.');
%plota tt versus yy
disp('Pressione enter.');
pause;
clf;
%limpa o contedo da figura criada
t = [0:0.5:5];
y = f(t)

20

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

plot(t,y,'*-');
hold on;
plot(xx,yy,'c-');
hold off;
xlabel('Tempo');
ylabel('Valor a mostrar');
title('Tempo versus Valor');
legend('f(t)','dados.dat',0);
A legenda pode ser carregada (usando o mouse) para qualquer nova posio.
Exemplo (11)
%Fonte: Le Huy, H.: Introduction Matlab et Simulink, Universit Laval, Qubec,
Canada, 1988, pg. 14
t = 0:0.01e-3:0.06;
y = 10*exp(-60*t).*cos(120*pi*t);
z = 10*exp(-60*t).*sin(120*pi*t);
plot(t,y,'r',t,z,'g'); grid;
a = 10*exp(-60*t); hold;
plot(t,a,'b--'); plot(t,-a,'b--');
title('Funo Senoidal');
xlabel('Temps , s'); ylabel('Tensao , V');
pause;
hold off
plot(y,z); grid;
axis('equal');
xlabel('y'); ylabel('z');
Exemplo (12)
%Fonte: Le Huy, H.: Introduction Matlab et Simulink, Universit Laval, Qubec,
Canada, 1988, pg. 15
w = logsace(0,3,1000);
s = j*w;
H = 225./(s.*s+3*s+225);
AdB=20*log10(abs(H));
fase=angle(H)*(180/pi);
subplot(2,1,1); semilogx(w,AdB); grid;
xlabel('w , rad/s'); ylable('Amplitude , dB');
subplot(2,1,2); semilogx(w,fase); grid;
xlabel('w , rad/s'); ylable('Fase , degre');

6. Grficos 3-D
Matlab apresenta vrias funes para plotar dados tridimensionais. Algumas plotam funes
em trs dimenses, enquanto que outros plotam superfcies. Alguns dos comandos so:
plot3
- plota linhas e pontos em 3D
contour, contour3
- cria contornos
mesh, meshc, meshz
- definio de superfcies a partir de malhas
surf, surfc, surfl
fill3
- cria polgonos tridimensionais preenchendo-os

21

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

6.1. Desenho de linhas


plot3(x,y,z)
>>t = 0:pi/50:10*pi;
>>plot3(sin(t),cos(t),t);

%x, y, z so matrizes de mesma dimenso


%produz uma hlice

>>t=0:0.05:25;
>>x = exp(-0.05*t).*cos(t);
>>x = exp(-0.05*t).*sin(t);
>>z=t;
>>plot3(x,y,z), grid
6.2. Grfico a partir de uma malha
Matlab define uma superfcie a partir de uma malha. Primeiro deve-se ter dois vetores (x
e y) de igual dimenso e que definem o domnio da funo z = f(x,y); em seguida usando o
comando meshgrid gera-se duas matrizes X e Y cujos elementos correspondentes so todas as
combinaes possveis (formando pares) dos elementos de x e de y. Formando os pares e
ligando-os adequadamente, gerando uma malha no plano xy. A seguir aplica-se a funo f em X
e Y (nas intersees da malha) e determina-se z, que o valor da funo nos pares formados
pelas matrizes X e Y. A varivel z determina a altura do ponto a ser grafado. A funo mesh
plota os pontos z e une-os z conforme a malha gerada no plano xy, formando uma malha no
espao e que representa a funo desejada.
>>x=-10:0.5:10;
>>y=x;
>>[X,Y]=meshgrid(x,y);
>>z=sqrt(X.^2 + Y.^2);
>>mesh(z);
>>rotate3d on
>>x=-8:0.5:8;
>>y=x;
>>[X,Y]=meshgrid(x,y);
>>z=sqrt(X.^2+Y.^2)+eps;
>>mesh(z);

%cria a matriz que forma a malha no eixo xy


%gera um parabolide
% pode rotacionar o grfico

%forma a matriz que gera a malha no eixo xy


%gera o famoso sombrero

Criar o arquivo script surfit.m e digitar a seguinte seqncia de comandos


t=0:0.25:5;
Criar o arquivo script exemplo13.m e digitar a seguinte seqncia de comandos
b=1200*pi;
dt=50e-6;
for j=1:15
for i=1:150
k(j)=j;
a=(16-j)*50;
t(i)=(i-1)*dt;
y(j,i)=exp(-a*t(i).*sin(b*t(i));
end
end
[K,T]=meshgrid(k,t);
mesh(T,K,y)
t=0:0.25:5;
a=0:0.5:10;
[T,A]=meshgrid(t,a);
Y=exp(T).*sin(T*A);

22

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

surf(T,A,Y)
xlabel('T')
ylabel('A')
zlabel('Y')
title('Y sobre T e A')
colormap(gray)
colorbar vert
rotate3d on
Executar o arquivo exemplo13.m.
>>shading interp
6.3. Desenho de contornos
Matlab pode traar contornos tanto no espao bidimensional como no tridimensional. Os
comandos contorno e contorno3 geram plots compostos de linhas considerando valores
constantes obtidos de uma matriz
>>x=-10:0.5:10;
>>y=x;
>>[X,Y]=meshgrid(x,y);
>>z=sqrt(X.^2 + Y.^2);
>>contour(z,2);
>>contour3(z,5);
>>x=-8:0.5:8;
>>y=x;
>>[X,Y]=meshgrid(x,y);
>>z=sqrt(X.^2+Y.^2)+eps;
>>contour(z,5);
>>contour3(z,10);

%malha no eixo xy
%contorno 2-D do parabolide
%contorno 3-D do parabolide

%matriz da malha no eixo xy


%contorno 2-D do sombrero
%contorno 3-D do sombrero

6.4. Pseudo grficos atravs de cores


>>z=peaks;
>>pcolor(z)
>>colormap(hot)
>>colormap(hot);
>>pcolor(peaks)
>>shading flat
>>hold on
>>contour(peaks, 20, 'k')
>>hold off

%elimina o grid (a malha)


%mantem o grfico ativo p/ plotar outro
%k: linhas pretas para o contorno

>>A=zeros(32);
>>A(14:16,14:16)=ones(3);
>>Y=fft2(A);
>>surf(abs(Y));
>>shading interp;
>>title('Transformada discreta de Fourier de uma matriz');

23

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

6.5. Malhas e Superfcies


As funes mesh e surf mostram superfcies em trs dimenses. Se z uma matriz cujos
elementos z(i,j) definem a altura da superfcie acima de um grid (i,j), ento mesh(z) gera uma
malha no espao. Similarmente surf(z) gera facetas coloridas, formando a superfcie que
representa a funo z.
>>subplot(2,1,1);
>>mesh(peaks);
>>subplot(2,1,2);
>>surf(peaks);

Miscelnea
>>mesh(peaks(20)+7);
>>hold;
>>pcolor(peaks(20));
>>hiden off;
6.6. Subplots
>>t=0:pi/10:2*pi;
>>[X,Y,Z]=cylinder(4*cos(t));
>>subplot(2,2,1)
>>mesh(X)
>>subplot(2,2,2)
>>mesh(Y)
>>subplot(2,2,3)
>>mesh(Z)
>>subplot(2,2,4)
>>mesh(X,Y,X)
6.7. Movies
>>M = moviein(16);
>>for j = 1:16
>>
plot(fft(eye(j+16)))
>>
M(:,j) = getframe;
>>end
6.8. Mudando propriedades das superfcies
Abrir o arquivo surit.m e trocar surf(T,A,Y) por
h = surf(T,A,Y)
Execute surfit.m.
Digite na rea do trabalho do Matlab
>>get(h)
>>get(h,'meshstyle')
>>set(h,'meshstyle')
>>set(h,'meshstyle','row')
>>set(h)

24

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

Abrir o arquivo surit.m e trocar h = surf(T,A,Y) por


h = mesh(T,A,Y)
set(h,'meshstyle','row')
Execute o programa surfit.m.
6.9. Mudando propriedades dos eixos
>>clear all
>>clf
%limpa a figura atual
>>h1 =subplot(2,1,1)
>>plot1
>>h2 = subplot(2,1,2)
>>surfit
>>get(h1)
%mostra as propriedades do eixo xy da figura h1
>>get(h2)
% mostra as propriedades do eixo xy da figura h2
>>axes(h2)
%torna atual a figura h2
>>get(gca)
%mostra as propriedades do eixo atual (h2)
>>get(gca,'box')
>>set(gca,'box')
>>set(gca,'box','on')
6.10. Mudando as propriedades da figura
>>get(gcf)
>>get(gcf,'colormap')
>>set(gcf,'colormap',[0 0 0]
6.11. Mudando as propriedades da figura para impresso
>>get(gcf,'PaperUnits')
>>get(gcf,'PaperPosition')
O par (0.25 0.25) (em polegadas) medido de baixo para cima da esquerda para a direita.
A rea de impresso ter 8 polegadas de largura e 6 polegadas de altura. Para trocar estas
medidas use o seguinte comando
>>set(gcf,'PaperPosition',[0.25, 0.25, 6, 6])
>>print deps myplots.eps
%salva o grfico como PostScript

7. Funes de otimizao
O toolbox optimiza contem algumas funes de otimizao. Pode-se tanto determinar mximos
e mnimos de funes como resolver problemas de programao linear e quadrtica.
7.1. attgoal
Objetivo
Resolve problemas multi-objetivos, ou seja,

min imize
x ,

sujeito a

F ( x ) w objetivo

dados F(x), w e objetivo, onde x, w, e objetivo so vetores, uma varivel escalar, e F(x)
uma funo que retorna um vetor de valores.

25

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

Comando
x = attgoal('fun',x0,goal,w,options,vlb,vub,'grad')
fun: fun.m arquivo que contem as funes a serem minimizadas
x0: soluo inicial
goal: vetor dos objetivos a serem alcanados
w: vetor de pesos
options: algumas opes (mudanas de parmetros)
vlb: limite inferior de x
vub: limite superior de x
grad: usa o gradiente das funes gravados no arquivo grad.m
7.2. conls
Objetivo
Resolve o problema dos mnimos quadrados sujeito a um conjunto de restries, ou seja,

min imize
x

1
Ax b
2

2
2

sujeito a

C (x ) d

onde A e C so matrizes e b , d e x so vetores.


Comando
[x, lambda, how] = conls(A,b,C,d,vlb,vub,x0,neqcstr,display)
A,b: matriz e vetor dos coeficientes do sistema linear Ax = b
C,d: matriz e vetor dos coeficientes das restries Cx d
vlb: limite inferior das variveis
vub: limite superior das variveis
x0: soluo inicial
neqcstr: as primeiras neqcstr restries so de igualdade
display: mostra (display=1) ou no mostra (display=-1) avisos na tela
lambda: multiplicadores de Lagrange
how: indica erros ocorridos na ltima iterao
7.3. constr
Objetivo
Determina o mnimo de uma funo (de vrias variveis) sujeito a um conjunto de
restries, ou seja,

min imize f ( x ) sujeito a


x

G(x ) 0

onde x um vetor, G(x) uma funo que retorna um vetor e f(x) uma funo que retorna
um escalar. Ambas, f(x) e G(x) podem ser no linear. As restries podem ser de igualdade.
Comando
[x,op ,lambda,hess]=constr('fun',x0,options1,vlb,vub,'grad')
fun: fun.m arquivo que contem a funo a ser minimizada e as restries
x0: soluo inicial
options1: algumas opes (mudanas de parmetros)
vlb: limite inferior das variveis
vub: limite superior das variveis

26

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

grad: usa o gradiente das funes gravados no arquivo grad.m


op: retorna os parmetros usados na minimizao
lambda: retorna os multiplicadores de Lagrange
hess: retorna uma aproximao do hessiano na ltima iterao
Exemplo (14)
Achar x que minimiza f(x) = -x1x2x3, iniciando pelo ponto x = [10 10 10], sujeito as
restries -x1 2x2 2x3 0 e x1 + 2x2 + 2x3 72.
7.4. fmin
Objetivo
Determina o mnimo de uma funo (de uma varivel) restrito a um intervalo fixo, ou seja,

min imize f (a ) sujeito a

a1 < a < a 2

onde a, a1 e a2 so escalares e f(a) uma funo que retorna um escalar.


Comando
a = fmin('fun',a1,a2,options)
fun: fun.m arquivo que contem a funo a ser minimizada
a1,a2: os limites inferior e superior tal que a1<a<a2
options: algumas opes (mudanas de parmetros)
Exemplo (15)
a = fmin('sin',0,2*pi)
7.5. fminu, fmins

Objetivo
Determina o mnimo de uma funo (de vrias variveis) sem restries, ou seja,
min imize f (x )
a

onde x um vetor e f(x) uma funo que retorna um escalar.


Comando
x = fminu('fun',x0,options,'grad')
fun: fun.m o arquivo que contem a funo a ser minimizada
x0: vetor que o ponto inicial do processo de minimizao
options: algumas opes (mudanas de parmetros)
grad: usa o gradiente das funes gravados no arquivo grad.m
Exemplo (16)

Determine valores que minimizam f (x, y ) = 100 x y 2

+ (1 x ) iniciando no ponto
2

(x,y) = [-1.2 1]. (Use um M-file)


7.6. fsolve

Objetivo
Resolve um sistema de equaes no lineares, ou seja,

27

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

F(x) = 0
onde x um vetor e F(x) uma funo que retorna um vetor de valores.
Comando
x = fsolve ('fun',x0,options,'grad')
fun: fun.m o arquivo que contem a funo a ser minimizada
x0: vetor que o ponto inicial do processo de minimizao
options: algumas opes (mudanas de parmetros)
grad: usa o gradiente das funes gravados no arquivo grad.m
Exemplo (17)
1) Determine um zero do sistema de duas equaes e duas variveis
2x y = e x
x + 2y = ey
partindo do ponto x0 = [-5 5]. (Use um M-file)
2) Determinar uma matriz tal que

1 2
X* X* X =
(Use um M-file e crie a funo F = x*x*x-[1 2; 3 4])
3 4
7.7. fzero

Objetivo
Determina o zero de uma funo de uma varivel, ou seja,
f(x) = 0
onde x uma varivel escalar e f(x) uma funo que retorna um escalar.
Comando
x = fzero('fun',x0,tol,trace)
fun: fun.m o arquivo que contem a funo a ser minimizada
x0: vetor que um ponto inicial ou intervalo
tol: preciso da socluo (o default eps)
trace: mostra informaes a cada iterao
Exemplo (18)
1) Determine o zero de seno mais prximo de 3
x = fzero('sin',3)
2) Determinar o zero de co-seno no intervalo [1 2]
x = fzero('cos',[1 2]) (pode ser calculado pois o sinal de cos(1) diferente do
sinal de cos(2))
7.8. leastsq

Objetivo
Resolve problemas de mnimos quadrados (no linear)

min imize f ( x ) = f 1 ( x ) + f 2 ( x ) + f 3 ( x ) + ... + f m (x ) + L


2

28

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

onde L uma constante.


Comando
x = leastsq('fun',x0,options,'grad')
fun: fun.m o arquivo que contem a funo a ser minimizada
x0: vetor que o ponto inicial do processo de minimizao
options: algumas opes (mudanas de parmetros)
grad: usa o gradiente das funes gravados no arquivo grad.m
Exemplo (19)

(2 + 2k e
10

Achar x que minimiza

kx

e ky

, iniciando no ponto x = [0.3 0.4]

k =1

7.9. lp

Objetivo
Resolve problemas de programao linear do tipo
min imize cx T
x

sujeito a

Ax b

onde A e C so matrizes e b , d e x so vetores.


Comando
[x, lambda, how] = lp(c,A,b,vlb,vub,x0,neqcstr,display)
c: vetor linha que contem dos coeficientes da funo objetivo
A,b: matriz custo e o vetor rhs das restries Ax b
vlb: limite inferior de x
vub: limite superior de x
x0: soluo inicial
neqcstr: as primeiras neqcstr restries so de igualdade
display: mostra (display=1) ou no mostra (display=-1) avisos na tela
lambda: multiplicadores de Lagrange
how: indica erros ocorridos na ltima iterao
Exemplo (20)
Determinar x que minimiza f ( x ) = 5 x 4 y 6 z , sujeito s restries
y y + z 20

3 x + 2 y + 4 z 42
3 x + 2 y 30
x, y , z 0

7.10. minmax

Objetivo
Resolve problemas de minmax, ou seja,

min imize max imize{Fi }


x

{Fi }

sujeito a

G (x ) 0

onde x um vetor e F(x) e G(x) so funes que retornam vetores de valores. Fi(x) o valor
do i-sima elemento do vetor retornado por F(x). G(x) pode conter restries de igualdade.

29

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

, w e objetivo, onde x, w, e objetivo so vetores, uma varivel escalar, e F(x) uma


funo que retorna um vetor de valores.
Comando
x = minmax ('fun',x0,options,vlb,vub,'grad')
fun: fun.m arquivo que contem as funes
x0: soluo inicial
options: algumas opes (mudanas de parmetros)
vlb: limite inferior de x
vub: limite superior de x
grad: usa o gradiente das funes gravados no arquivo grad.m
Exemplo (21)
Determine o valor x que minimiza o valor mximo de [ f (x ), g (x ), h(x ), v(x ), w(x )] , onde
f (x ) = 2 x 2 + y 2 48 x 40 y + 304

g (x ) = x 2 3 y 2

h(x ) = x + 3 y 18

v( x ) = x y

w(x ) = x + y 8
partindo do ponto x = [0.1 0.1]. (deve-se incluir no M-file de que g = [])
7.11. nnls

Objetivo
Resolve o problema dos mnimos quadrados no negativo, ou seja,

min imize
x

1
Ax b
2

2
2

sujeito a

x0

onde A uma matrizes e b e x so vetores.


Comando
[x, w] = nnls(A,b,tol)
A,b: matriz e vetor dos coeficientes do sistema linear Ax = b
tol: grau de preciso da soluo final
w: retorno o vetor dos multiplicadores de Lagrange (dual)
7.12. qp

Objetivo
Resolve problemas de programao quadrtica

1
min imize x T Hx + c T x
x
2

sujeito a

Ax b

onde H e A so matrizes e c , b e x so vetores.


Comando
[x, lambda, how] = qp(H,c,A,b,vlb,vub,x0,neqcstr,display)
H, c: A matriz Hessiana e o vetor c so os coeficentes da funo objetiva
quadrtica. H deve ser simtrica

30

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

A,b: coeficientes das restries (que so lineares)


vlb: limite inferior de x
vub: limite superior de x
x0: soluo inicial
neqcstr: as primeiras neqcstr restries so de igualdade
display: mostra (display=1) ou no mostra (display=-1) avisos na tela
lambda: multiplicadores de Lagrange
how: indica erros ocorridos na ltima iterao

Exemplo (22)
Determinar x que minimiza f (x ) =

1 2
x + y 2 xy 2 x 6 y , sujeito s restries
2
x+ y 2

x + 2y 2
2x + y 3
x, y 0
(H = [1 1, -1 2] c = [-2; 6], x = [x;y])

8. Funes estatsticas
O toolbox de estatstica contem vrias funes estatsticas. As seguir sero ilustradas
algumas destas funes
corrcoef:..........Coeficientes de correlao
cov:......................Matriz covarincia
geomean: ............Mdia Geomtrica
harmmean:..........Coeficientes de correlao
mean: ...................Mdia aritmtica
median:...............Mediana
std:......................Desvio padro
var:......................Varincia
hist: ...................Histograma
regress: ............Regresso linear
normrnd: ............Gerao de nmeros aleatrios usando a distribuio normal
poissrnd:..........Gerao de nmeros aleatrios usando a distribuio de Poisson
unifrnd: ............Gerao de nmeros aleatrios usando a distribuio uniforme contnua
unidrnd: ............Gerao de nmeros aleatrios usando a distribuio uniforme discreta

10. Construo de interface amigvel com o usurio


O objetivo nesta seo estudar a criao de menus e os diversos botes (buttons)
disponveis no Matlab. Este estudo ser feito a partir de um exemplo.
10.1. Menus

Para gerar um menu deve-se inicialmente criar uma janela na qual sero anexadas
as os itens de menu desejados.
10.1.1. Janela

Exemplo
Criar um arquivo denominado de main.m
31

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

clear all;
%limpar as variveis
clear('all');
%limpar as variveis
clear global;
%limpar as variveis globais
if exist('gcf'), close; end;
%fecha qualquer janela
%
global NUMFIG;
%NUMFIG uma varivel global
%
figurePos=get(0,'DefaultFigurePosition');
figurePos(3:4)=[560 420];
NUMFIG=figure( ...
'Name','MULTIBENCH Calculo de Medias', ...
'NumberTitle','off', ...
'Color', [.9 1 1],...
'Visible','on', ...
'Resize','on', ...
'MenuBar','none', ...
'Colormap',[1 1 1], ...
'Position',figurePos, ...
'Pointer','watch');
10.1.2. Item de menu

Exemplo (continuao do arquivo main.m)


arq = uimenu(NUMFIG,...
'label','Arquivos ');
uimenu(arq,'Label','Editar Arquivo', ...
'Callback','edit');
uimenu(arq,'Label','Fechar as Janelas', ...
'Callback','close all',...
'Separator','on');
uimenu(arq,'Label','Sair do MATLAB', ...
'Callback','quit');
med = uimenu(NUMFIG,...
'label','Medias');
ntt = uimenu(med,...
'label','Noturno');
uimenu(ntt,...
'label','Fisica',...
'CallBack','medias(''noturno'',''fisica'')');
uimenu(ntt,...
'label','Estatistica',...
'CallBack','medias(''noturno'',''estat'')');
diu = uimenu(med,...
'label','Diurno');
uimenu(diu,...
'label','Fisica',...
'CallBack','medias(''diurno'',''fisica'')');
uimenu(diu,...

32

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

'label','Estatistica',...
'CallBack','medias(''diurno'',''estat'')');
aju = uimenu(NUMFIG,...
'label','Ajuda');
uimenu(aju,...
'label','Como calcular Medias',...
'CallBack','ajuda(''como'')');
uimenu(s,...
'label','Sobre o MEDIAS',...
'CallBack','ajuda(''sobre'')',...
'Separator','on');
watchoff;

Para executar main.m devemos ter os arquivos


medias.m com dois parmetros: turno ('diurno', 'noturno') e curso ('fisica', 'estat')
ajuda.m
com um parmetro: 'como', 'sobre'.
Sejam os seguintes arquivos contendo as notas das quatro turmas.
FisicaD.txt = tabela 4x3
EstatD.txt = tabela 5x3
FisicaN.txt = tabela 5x3
EstatN.txt = tabela 6x3

O arquivo medias.m poderia ser


function = media = medias(turno, curso);
%funo que calcula as mdias e as mostra na tela
if strcmp(turno,'diurno')
if strcmp(curso,'fisica')
fid = fopen('fisicad.txt, 'r');
notas = fscanf(fid, 'f%',[4,Inf]);
else,
fid = fopen('estatd.txt, 'r');
notas = fscanf(fid, 'f%',[5,Inf]);
if strcmp(turno,'diurno')
if strcmp(curso,'fisica')
fid = fopen('fisicad.txt, 'r');
notas = fscanf(fid, 'f%',[4,Inf]);
else,
fid = fopen('estatd.txt, 'r');
notas = fscanf(fid, 'f%',[5,Inf]);
end,
else,
if strcmp(curso,'fisica')
fid = fopen('fisican.txt, 'r');
notas = fscanf(fid, 'f%',[5,Inf]);
else,
fid = fopen('estatn.txt, 'r');
notas = fscanf(fid, 'f%',[6,Inf]);

33

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

end
media = mean(notas);
for i = 1:size(media,2)
fprintf(['Aluno' int2str(i)], '\n', media(i));
end
10.2. Objetos de grficos e de controle

Os tipos de controle so
1. Push button
por exemplo, os botes de ok, cancel
2. Check box
escolher vrias opes
3. Radio button
escolher apenas uma opo
4. Slider
semelhante as barras de rolagem do word
5. Pop-up menu permite a escolha de um item de uma lista
6. Static text
mostra um texto numa nica linha
7. Editable text
o usurio pode digitar um string para o programa
8. Frame
so caixas de enfeite que englobam os botes
10.2.1. Frames

Position = [Pos_H, Pos_V, comprimento,altura]

Criar o arquivo bot00.m


NUMFIG=figure(...
'Name','CONTROLES - Push Button',...
'MenuBar','none', ...
'NumberTitle','off',...
'Color', [1 .7 .2]);
engloba = uicontrol(NUMFIG,...
'Style','frame',...
'BackgroundColor',[.5 1 1],...
'Position',[55 300 440 100]);
10.2.2. Static text

Criar o arquivo bot01.m


NUMFIG=figure(...
'Name','CONTROLES Static Text',...
'MenuBar','none', ...
'NumberTitle','off',...
'Color', [1 .7 .2]);
uicontrol(NUMFIG,...
'Style','frame',...
'BackgroundColor',[.5 1 1],...
'Position',[55 300 440 100]);
uicontrol(NUMFIG,...
'Style','text',...

34

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

'String','Digite a nota dos alunos',...


'BackgroundColor',[1 1 1],...
'Position',[57 381 435 17]);
10.2.3. Editable text

NUMFIG=figure(...
'Name','CONTROLES Editable Text',...
'MenuBar','none', ...
'NumberTitle','off',...
'Color', [1 .7 .2]);
uicontrol(NUMFIG,...
'Style','frame',...
'BackgroundColor',[.5 1 1],...
'Position',[55 300 440 100]);
uicontrol(NUMFIG,...
'Style','text',...
'String','Digite a nota dos alunos',...
'BackgroundColor',[1 1 1],...
'Position',[57 378 435 20]);
uicontrol(NUMFIG,...
'Style','text',...
'String','Margarete: ------------>',...
'HorizontalAlignment','Left',...
'Position',[57 350 130 20]);
nota(1) = uicontrol(NUMFIG,...
'Style','edit',...
'String','00',...
'BackgroundColor',[1 1 .5],...
'Position',[200 350 75 16]);
uicontrol(NUMFIG,...
'Style','text',...
'String','Pedro: ------------>',...
'HorizontalAlignment','Left',...
'Position',[57 330 130 20]);
nota(2) = uicontrol(NUMFIG,...
'Style','edit',...
'String','00',...
'BackgroundColor',[1 1 .5],...
'Position',[200 330 75 16]);
10.2.4. Push button

NUMFIG=figure(...
'Name','CONTROLES Editable Text',...
'MenuBar','none', ...
'NumberTitle','off',...
'Color', [1 .7 .2]);
uicontrol(NUMFIG,...

35

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

'Style','frame',...
'BackgroundColor',[.5 1 1],...
'Position',[55 300 440 100]);
uicontrol(NUMFIG,...
'Style','text',...
'String','Digite a nota dos alunos',...
'BackgroundColor',[1 1 1],...
'Position',[57 378 435 20]);
uicontrol(NUMFIG,...
'Style','text',...
'String','Margarete: ------------>',...
'HorizontalAlignment','Left',...
'Position',[57 350 130 20]);
nota(1) = uicontrol(NUMFIG,...
'Style','edit',...
'String','00',...
'BackgroundColor',[1 1 .5],...
'Position',[200 350 75 16]);
uicontrol(NUMFIG,...
'Style','text',...
'String','Pedro: ------------>',...
'HorizontalAlignment','Left',...
'Position',[57 330 130 20]);
nota(2) = uicontrol(NUMFIG,...
'Style','edit',...
'String','00',...
'BackgroundColor',[1 1 .5],...
'Position',[200 330 75 16]);
uicontrol(NUMFIG,...
'Style', 'push',...
'Position', [150 250 100 25],...
'String', 'Iniciar Grafico',...
'CallBack', 'figure(''Position'', [100 100
550 200]); plot([1 2 3 4 5],[7 5 6 10 9],
''r'')');
uicontrol(NUMFIG,...
'Style', 'push',...
'Position', [300 250 100 25],...
'String', 'Cancelar Grafico',...
'CallBack', 'close all');
10.2.5. Check Boxes

Arquivo bot02.m
NUMFIG=figure( ...
'Name','CONTROLES - Check Box', ...
'NumberTitle','off', ...
'Color', [1 .7 .2]);
uicontrol(NUMFIG,...

36

Curso Introdutrio ao Matlab


Prof. Volmir Eugnio Wilhelm

'Style', 'push',...
'Position', [100 10 100 25],...
'String', 'Iniciar Grafico',...
'CallBack', 'figure(''Position'', [100 250
550 250]); plot([1 2 3 4],[1 4 9 16],
''r'')');
uicontrol(NUMFIG,...
'Style', 'push',...
'Position', [250 10 100 25],...
'String', 'Cancelar Grafico',...
'CallBack', 'close all');

Atributos
Get
Set
Botes radio frames
Callback
Menus
Arquivos de Help
11. Alguns sites na Internet
http://www.mathworks.com/products/matlab
http://www.stewart.cs.sdsu.edu/cs205/
http://www.engin.umich.edu/group/ctm/extras/function.html
http://www-stat.stanford.edu/~wavelab/
http://eulero.ing.unibo.it/
http://www.umassd.edu/SpecialPrograms/Atlast/welcome.html
http://www.cmsa.wmin.ac.uk/COURSE/matlab_intro.html
http://www.mathtools.net/

12. Referncias Bibliogrficas


1) Le-Huy, Hoang: Introduction Matlab et Simulink. Dpartement de gnie lectrique et de gnie
informatique, Universit Laval, Qubec, Canada, 1998
2) Matlab: High-performance Numeric Computation and Visualization Software, Users Guide.
The Math Works Inc., ver. 4.0, 1992.
3) Leon, Steve J.: lgebra Linear com Aplicaes. 4 edio, LTC, RJ, 1999
4) Marques, Jair M.: Introduo ao Matlab. Departamento de Estatstica/UFPR, 1996

37

Das könnte Ihnen auch gefallen