Академический Документы
Профессиональный Документы
Культура Документы
ao ao MATLAB
&
MATLAB Compiler
Laboratorio
RESTRITA
DISTRIBUIC
AO
c 2001, 2005 GERALDO L. TORRES
ii
c 2005 G. L. TORRES
Conte
udo
Captulo 1
Introdu
c
ao ao Matlab
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Algebra
Linear e Matrizes
1
2
3
3
5
9
11
11
13
15
15
16
17
17
19
2.1.
2.2.
2.3.
2.4.
2.5.
2.6.
Matrizes . . . . . . . . . . . . . . . . .
Manipulac
ao de Matrizes . . . . . . .
Gerando Matrizes Especiais . . . . . .
Operac
oes com Matrizes e Vetores . .
Normas e N
umeros Condicionadores .
Equac
oes Lineares . . . . . . . . . . .
2.6.1. Sistema Quadrado . . . . . . .
2.6.2. Sistema Sobredeterminado . . .
2.6.3. Sistema Subdeterminado . . . .
2.7. Inversa, Falsa-Inversa e Determinante
2.8. Fatorizac
ao LU . . . . . . . . . . . . .
2.9. Fatorizac
ao Cholesky . . . . . . . . . .
iii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
19
21
23
26
29
31
31
32
32
33
34
35
CONTEUDO
iv
2.10. Fatorizac
ao QR . . . . . . . . . . . . . . . .
2.11. Decomposic
ao em Valores Singulares . . . .
2.12. Autovalores e Autovetores . . . . . . . . . .
2.13. Metodos Iterativos para Equacoes Lineares
2.14. Matrizes Esparsas . . . . . . . . . . . . . .
Captulo 3
5.1.
5.2.
5.3.
5.4.
5.5.
5.6.
5.7.
6.1.
6.2.
6.3.
6.4.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
36
36
37
39
39
45
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Dados
. . . .
. . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
45
47
49
52
53
58
62
67
68
71
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
M
etodos Num
ericos
71
74
75
76
78
79
79
81
81
82
83
83
89
89
91
Analise de Dados . . . . . . . . . . .
Polinomios . . . . . . . . . . . . . .
Interpolac
ao de Dados . . . . . . . .
Equac
oes Nao-Lineares e Otimizacao
Transformada Rapida de Fourier . .
Integrac
ao . . . . . . . . . . . . . . .
Equac
oes Diferenciais Ordinarias . .
Captulo 6
.
.
.
.
.
Programa
c
ao em Matlab
.
.
.
.
.
Gr
aficos 2-D, 3-D e Imagens
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 91
. 93
. 95
. 98
. 99
. 100
. 101
Arquivos-MEX
105
Introduc
ao . . . . . . . . . . . .
Usando Arquivos-MEX . . . . .
Localizac
ao dos Arquivos-MEX
Requisitos do Compilador . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
c 2005 G. L. TORRES
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
105
105
106
106
CONTEUDO
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Matlab Compiler
111
7.1.
7.2.
7.3.
7.4.
7.5.
Introduc
ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Arquivos Encapsuladores (Wrapper) . . . . . . . . . . . . . . . . . . .
Aplicac
oes Stand-Alone . . . . . . . . . . . . . . . . . . . . . . . . . .
Bibliotecas Compartilhadas . . . . . . . . . . . . . . . . . . . . . . . .
Produtos Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5.1. Matlab Builder for COM . . . . . . . . . . . . . . . . . . . . .
7.5.2. Matlab Builder for Excel . . . . . . . . . . . . . . . . . . . . .
7.6. Compilando uma Aplicac
ao Stand-Alone . . . . . . . . . . . . . . . . .
7.7. Compilando uma Biblioteca Compartilhada . . . . . . . . . . . . . . .
7.8. Testando Componentes na Maquina de Desenvolvimento . . . . . . . .
7.9. Preparando Componentes para Outras Maquinas . . . . . . . . . . . .
7.10. Limitac
oes e Restric
oes . . . . . . . . . . . . . . . . . . . . . . . . . .
7.10.1. Compilando Matlab e Toolboxes . . . . . . . . . . . . . . . . .
7.10.2. Codigo Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.10.3. Aplicac
oes Stand-Alone . . . . . . . . . . . . . . . . . . . . . .
7.11. Compiladores Suportados . . . . . . . . . . . . . . . . . . . . . . . . .
7.12. O Processo de Compilac
ao . . . . . . . . . . . . . . . . . . . . . . . . .
7.13. Arquivos de Entrada e de Sada . . . . . . . . . . . . . . . . . . . . . .
7.13.1. Executavel Stand-Alone . . . . . . . . . . . . . . . . . . . . . .
7.13.2. Biblioteca Compartilhavel C . . . . . . . . . . . . . . . . . . .
7.13.3. Biblioteca Compartilhavel C++ . . . . . . . . . . . . . . . . .
7.14. Processo de Distribuic
ao . . . . . . . . . . . . . . . . . . . . . . . . . .
7.14.1. Portando o Codigo Gerado para uma Plataforma Diferente . .
7.14.2. Trabalhando com o MCR . . . . . . . . . . . . . . . . . . . . .
7.14.3. Distribuindo uma Aplicacao Stand-Alone num Driver de Rede
7.15. Trabalhando com mcc . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.15.1. Usando Arquivos de Encapsulamento (Wrapper) . . . . . . . .
7.15.2. Chamando Func
oes Matlab do C ou C++ . . . . . . . . . . . .
7.15.3. Chamando uma Funcao da Linha de Comando . . . . . . . . .
7.15.4. Usando Arquivos-MAT em Aplicacoes Independentes . . . . . .
7.15.5. Executando as Aplicacoes . . . . . . . . . . . . . . . . . . . . .
7.15.6. Passando Argumentos Para e De uma Aplicacao . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Captulo A C
alculo de Fluxo de Pot
encia
A.1.
A.2.
A.3.
A.4.
A.5.
Introduc
ao . . . . . . . . . . . . . . . . . . . . . . .
Formulac
ao Basica . . . . . . . . . . . . . . . . . .
Soluc
ao pelos Metodos de Gauss e de Gauss-Seidel
O Metodo de Newton-Raphson . . . . . . . . . . .
Programa de Fluxo de Potencia em Matlab . . . .
c 2005 G. L. TORRES
107
107
108
108
109
109
111
111
112
112
113
113
113
113
115
115
115
117
117
117
117
117
118
119
119
120
120
121
121
121
122
123
123
124
124
124
125
125
127
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
127
128
129
130
132
Captulo
Introduc
ao ao Matlab
1.1
Um Breve Hist
orico
MATLAB (abreviac
ao para MATrix LABoratory) e um sistema interativo e linguagem de
programac
ao largamente utilizado para calculos (e visualizacao) cientficos e de engenharia.
Desenvolvido no final dos anos 70, nas universidades americanas de New Mexico e Stanford, e
popularizado nos anos 80, pela Mathworks Inc., sua utilizacao tornou-se bastante popular no
meio academico e na ind
ustria devido `a sua enorme capacidade de manipulacao de matrizes e
vetores. Seu tipo de dado basico e uma matriz que nao requer dimensionamento e especificac
ao
de tipo pelo usuario.
A versao inicial do MATLAB, a qual foi desenvolvida pelo analista numerico Cleve Moler,
foi escrita em Fortran, como uma mera ferramenta de ensino. A versao atual e escrita na
linguagem C e esta disponvel para uma variedade de ambientes computacionais: Sun, Apollo,
VAXstation, HP workstations, VAX, MicroVAX, Gould, i386, Apple Macintosh, e varias
maquinas de processamento paralelo.
Diferentemente das demais linguagens de programacao existentes `a epoca, como Fortran
e C, no MATLAB nao era necessario escrever subrotinas para efetuar calculos matriciais, os
quais poderiam ser feitos diretamente. Mais ainda, as solucoes de varios problemas sao expressas em MATLAB quase da mesma maneira que elas sao escritas matematicamente. Alem de
apresentar varias caractersticas das linguagens de programacao (estruturacao, manipulac
ao
de dados de entrada e sada, etc.), versoes posteriores do MATLAB passaram a incorporar
poderosas rotinas graficas, tornando sua utilizacao, alem de pratica, bastante atraente.
Porem, apesar de ter sido bem aceito nas universidades e nos centros de pesquisa, o MATLAB tinha pouca aplicabilidade pratica, alem de analises off-line e validacoes de modelagens.
Esta deficiencia foi corrigida a partir da versao 4.2, incorporando um gerenciador de sistemas de
1
AO MATLAB
CAP
ITULO 1. INTRODUC
AO
tempo real. Na pratica, isto permite utilizar o MATLAB em aplicacoes industriais e processos,
onde o programa controla de forma on-line as variaveis envolvidas.
Alem dos avancos acima citados, ao longo do tempo foram incorporadas ao MATLAB
ferramentas para tratar de
areas especficas do conhecimento, os chamados toolboxes. Esses
toolboxes sao organizados de forma modular, permitindo assim que o usuario compre e acople
ao seu sistema apenas aqueles de seu interesse particular. Alguns exemplos de toolboxes sao:
uma extens
Simulink : E
ao a MATLAB que adiciona um ambiente grafico para
modelar, simular, e analizar sistemas dinamicos lineares e nao-lineares.
uma colecao de ferramentas para estimacao e identificac
System Identification: E
ao
de sistemas. Identificac
ao de sistemas diz respeito a achar um modelo matematico para
um sistema fsico (como um motor eletrico) baseado apenas em dados de entrada e de
sada registrados.
uma colecao de funcoes do MATLAB para projetar e simular
Neural Network: E
redes neurais. Redes neurais sao arquiteturas de computacao, inspiradas por sistemas
nervosos biologicos, que sao u
teis em aplicacoes onde analise formal e extremamente
difcil ou impossvel, tal como reconhecimento de padroes e identificacao e controle de
sistemas nao-lineares.
Robust Control: Contem um conjunto de ferramentas para a analise e sntese de
sistemas de controle que sao robustos com relacao a incertezas que podem surgir no
mundo real.
Signal Processing: Contem ferramentas para processamento de sinais. Aplicac
oes
incluem
audio, vdeo, telecomunicacoes, medicina (imagem de ressonancia magnetica),
geofsica e econometria.
um conjunto de ferramentas para processamento de imagens e
Image Processing: E
desenvolvimento de algoritmos.
Statistics: Contem ferramentas para analises estatsticas, modelagem, e simulacao de
Monte Carlo, com interfaces graficas para explorar conceitos fundamentais em estatstica
e probabilidade.
Alem dos toolboxes, MATLAB tem seus recursos basicos extendidos atraves da implementacao de func
oes MATLAB, conhecidas como M-files, ou atraves de rotinas escritas na
linguagem C/C++ ou Fortran, chamadas de MEX-files.
1.2
Para executar o MATLAB, basta clicar no cone especfico existente na area de trabalho do
monitor, via menu, ou utilizar o comando de sistema matlab. A execucao de MATLAB abre
uma ou mais janelas no monitor. Destas, a janela de comando (Command Window) e o local
primario onde o usuario interage com o MATLAB. Esta janela aparecera como exemplificado
na Figura 1.1.
O smbolo >> visto na janela de comando e o prompt do MATLAB, ou seja, onde as
instrucoes a serem executadas pelo MATLAB sao digitadas. Apos digitar um comando, pressionar a tecla Enter ou Return para que o comando seja executado. Para entrar m
ultiplas
linhas de comandos sem que sejam executados, concluir cada linha usando Shift+Enter ou
Shift+Return. Pressionando Enter ou Return faz com que todas as linhas sejam executadas.
c 2005 G. L. TORRES
1.3
Para sair do MATLAB, ao final de uma sessao de trabalho, basta digitar quit ou exit no
prompt do MATLAB:
>> quit
ou entao, com o cursor sobre a janela de comando, teclar Ctrl+C. Para limpar a janela de
comando e reposicionar o prompt na primeira linha da janela basta digitar clc.
A seguir, sao apresentados os comandos mais u
teis e usuais, embora seja importante salien importar que existem in
umeros outros comandos que nao sao abordados neste documento. E
tante, portanto, uma consulta ao manual do usuario e ao guia de referencia, ou ao help on-line
disponvel no programa, sempre que necessario. A consulta ao help on-line e descrita a seguir.
1.4
O Help On-Line
Uma das grandes facilidades apresentadas pelo MATLAB e a disponibilidade de uma ajuda
interativa (o help on-line) bastante completa e esclarecedora, e que pode ser consultada a
qualquer momento. Dependendo da forma como e digitado, o comando help revela informac
oes
diversas. Este comando pode ser utilizado de quatro modos. O help simples fornece a lista dos
principais t
opicos de ajuda. Cada topico corresponde a um diretorio montado no MATLAB
(incluindo os toolboxes instalados). Exemplo:
c 2005 G. L. TORRES
AO MATLAB
CAP
ITULO 1. INTRODUC
AO
>> help
HELP topics:
matlab/general
matlab/ops
matlab/lang
matlab/elmat
matlab/elfun
matlab/specfun
matlab/matfun
matlab/datafun
continua ...
O comando help help explica como utilizar o proprio comando help, enquanto o comando
help <topico> fornece uma descricao detalhada do comando ou funcao <topico>, incluindo
a sua finalidade, sintaxe, algoritmo, exemplos e lista de itens relacionados. Exemplo:
>> help sqrt
SQRT
Square root.
SQRT(X) is the square root of the elements of X. Complex
results are produced if X is not positive.
See also SQRTM.
O comando help <diretorio> fornece uma lista dos comandos ou funcoes contidas neste
<diretorio>. Exemplo:
>> help elfun
Elementary math functions.
Trigonometric.
sin
sinh
asin
asinh
cos
cosh
-
Sine.
Hyperbolic sine.
Inverse sine.
Inverse hyperbolic sine.
Cosine.
Hyperbolic cosine.
continua ...
Se o usuario nao esta seguro do nome correto ou da existencia ou nao de um determinado
topico, o comando lookfor e um recurso mais produtivo de se obter ajuda. O comando
lookfor prover essa ajuda listando todos os topicos cuja primeira linha do help respectivo
contem a palavra chave indicada pelo usuario. O mais importante: a palavra chave nao precisa
ser um comando MATLAB. Por exemplo,
c 2005 G. L. TORRES
1.5. VARIAVEIS
Complex conjugate.
Sort numbers into complex conjugate pairs.
Complex imaginary part.
Complex real part.
Complex diagonal form to real block diagonal form.
continua ...
Observe que a palavra complex nao e um comando MATLAB, mas foi encontrada na descric
ao
do help de varios comandos MATLAB. Dada essa informacao, o comando help pode agora
ser utilizado para mostrar ajuda sobre um comando especfico. Exemplo:
>> help conj
CONJ
Complex conjugate.
CONJ(X) is the complex conjugate of X.
For a complex X, CONJ(X) = REAL(X) - i*IMAG(X).
See also REAL, IMAG, I, J.
Observe dos comandos lookfor e help acima que e uma convencao do MATLAB que
nomes de func
oes sejam apresentados em letras mai
usculas dentro do texto descritivo do help,
com a finalidade de facilitar a identificacao dos mesmos. Entretanto, o nome de todas as
funcoes que fazem parte do MATLAB ou de qualquer de seus toolboxes devera ser digitado
em letras min
usculas.
1.5
Vari
aveis
=
=
=
=
1
0
0
1 ;
1 + i*2 ;
[0 1 2] ;
[1 0 0; 0 1 0; 0 0 1]
0
1
0
0
0
1
c 2005 G. L. TORRES
AO MATLAB
CAP
ITULO 1. INTRODUC
AO
A utilizac
ao de um ponto e vrgula logo apos uma atribuicao (ou qualquer outro comando) faz
com que o resultado obtido nao seja exibido na tela, embora seja armazenado na memoria, tal
como ocorre com os dados a, b e c do exemplo acima. Observe que o ponto e vrgula nao e
colocado na atribuic
ao da matriz D e consequentemente o resultado e exibido a seguir.
Uma atribuic
ao implcita atribui `a uma variavel o valor de outra variavel ou o valor de uma
expressao algebrica ou l
ogica envolvendo outras variaveis. Exemplo:
>> A = [1 2; 5 3]; B = [2 1; -3 4]; C = [3 2; 4 1]; k = 2;
>> D = A
D =
1
2
5
3
>> E = C + D
E =
4
4
9
4
>> F = k * (A + B)
F =
6
6
4
14
Como qualquer outra linguagem de programacao, MATLAB impoe algumas regras sobre
os nomes das variaveis. Mais especificamente, estas regras sao:
Variaveis sao case sensitive, ou seja, pode-se ter, numa mesma sessao de trabalho, as
variaveis volt, Volt e VOLT armazenando valores diferentes ao mesmo tempo.
Nomes de variaveis podem conter ate 19 caracteres significativos. Os caracteres alem do
19o sao ignorados.
Nomes de variaveis devem iniciar com uma letra, podendo ser seguida por qualquer
combinac
ao de letras, n
umeros, ou traco de sublinhar.
Em adicao a essas regras, MATLAB possui diversas variaveis especiais, pre-ajustadas:
Variavel
ans
pi
eps
inf
NaN
iej
realmin
realmax
Valor
Nome default de variavel utilizada para resultados
A constante = 3.1415 . . .
Menor n
umero que se adicionado a 1 cria um n
umero
de ponto flutuante maior do que 1 no computador.
Infinito, por exemplo, 1/0
Not-a-Number,
por exemplo, 0/0
i = j = 1
O menor n
umero real positivo que pode ser utilizado
O maior n
umero real positivo que pode ser utilizado
Todas as variaveis utilizadas em uma sessao de trabalho sao armazenadas na memoria ate
que a sessao seja encerrada, ou sejam deletadas incondicionalmente atraves do comando clear.
Por exemplo,
c 2005 G. L. TORRES
1.5. VARIAVEIS
>> clear A
>> clear A B C
Deleta as variaveis A, B, e C.
>> clear
Size
Bytes
2x2
2x2
2x2
1x1
1x1
1x3
1x1
32
32
32
8
16
24
8
Class
double
double
double
double
double
double
double
array
array
array
array
array (complex)
array
array
4
4
AO MATLAB
CAP
ITULO 1. INTRODUC
AO
1.6. FORMAS DE INTERAC
AO
1.6
Formas de Interac
ao
O primeiro exemplo calcula (1 + 5)/2 e o segundo 253 . Observe que o segundo resultado
e exibido na notac
ao exponencial: ele representa 1.1102 1016 . Como dito anteriormente, a
variavel ans e criada (ou sobreescrita, se ela ja existe) quando o resultado de uma expressao
nao e atribudo a uma variavel.
Diferentemente de outras linguagens de programacao, as variaveis nao sao declaradas antes
do seu uso; elas sao automaticamente criadas pelo MATLAB assim que a elas e atribudo
algum valor:
>> x = sin(22)
x =
-0.0089
Aqui, atribumos a x o seno de 22 radianos. A impressao da sada pode ser suprimida
acrecentando-se o ponto e vrgula no final da expressao:
>> y = 2*x + exp(-3)/(1+cos(.1)) ;
Vrgulas ou ponto-e-vrgulas sao utilizados para separar declaracoes que aparecem numa mesma
linha:
>> x = 2, y = cos(.3), z = 3*x*y
x =
2
y =
0.9553
z =
5.7320
>> x = 5; y = cos(.5); z = x*y^2
z =
3.8508
A linha pode ser terminada com tres pontos, o que torna a proxima linha uma linha de
continuac
ao:
>> x = 1 + 1/2 + 1/3 + 1/4 + 1/5 + ...
1/6 + 1/7 + 1/8 + 1/9 + 1/10
x =
2.9290
c 2005 G. L. TORRES
AO MATLAB
CAP
ITULO 1. INTRODUC
AO
10
1.7. FUNC
OES
MATEMATICAS
COMUNS
11
fornece o prompt na mensagem e espera que voce digite uma string. Os caracteres digitados
sao retornados, apos teclar <ENTER>, como uma string MATLAB.
Varios comandos sao disponveis para interacao com o sistema operacional, incluindo os
comandos cd (para mudar de diretorio), copyfile (copiar arquivo), mkdir (criar diretorio), pwd
(exibir nome do diretorio corrente), dir ou ls (listar diretorio), e delete (deletar arquivo).
Um comando pode ser emitido ao sistema operacional, a partir do prompt do MATLAB,
precedendo-se este comando com a marca de exclamacao, !. Por exemplo, a instrucao
>> !edit teste
edita o arquivo teste com o aplicativo edit do MS Windows.
1.7
Fun
c
oes Matem
aticas Comuns
1.8
Aritm
etica
AO MATLAB
CAP
ITULO 1. INTRODUC
AO
12
Comando
cos(x)
sin(x)
tan(x)
csc(x)
sec(x)
cot(x)
acos(x)
asin(x)
atan(x)
atan2(x)
asec(x)
acsc(x)
acot(x)
cosh(x)
sinh(x)
tanh(x)
sech(x)
csch(x)
coth(x)
acosh(x)
asinh(x)
atanh(x)
asech(x)
acsch(x)
acoth(x)
log(x)
log2(x)
log10(x)
exp(x)
pow2(x)
ceil(x)
fix(x)
floor(x)
round(x)
abs(x)
angle(x)
conj(x)
imag(x)
real(x)
mod(x,y)
rem(x,y)
sign(x)
Func
ao Matematica
Cosseno de x
Seno de x
Tangente de x
Cossecante de x
Secante de x
Cotangente de x
Arco-cosseno de x
Arco-seno de x
Arco-tangente de x
Arco-tangente de x no quarto quadrante
Arco-secante de x
Arco-cossecante de x
Arco-tangente de x
Cosseno hiperbolico de x
Seno hiperbolico de x
Tangente hiperbolico de x
Secante hiperbolica de x
Cossecante hiperbolica de x
Cotangente hiperbolica de x
Arco-cosseno hiperbolico de x
Arco-seno hiperbolico de x
Arco-tangente hiperbolico de x
Arco-secante hiperbolico de x
Arco-cossecante hiperbolico de x
Arco-cotangente hiperbolico de x
Logaritmo natural de x
Logaritmo na base 2 de x
Logaritmo comun (base 10)
Exponencial ex
Potencia na Base 2 dos elementos de x
Arredonda para o valor inteiro proximo maior
Arredonda para o valor inteiro proximo de zero
Arredonda para o valor inteiro proximo menor
Arredonda para o valor mais proximo
Valor absoluto (ou modulo se n
umero complexo) de x
Angulo do n
umero complexo x
Complexo conjugado de x
Parte imaginaria do n
umero complexo x
Parte real do n
umero complexo x
Restante da divisao x/y com o sinal de y
Restante da divisao x/y com o sinal de x
Sinal de x: 1
c 2005 G. L. TORRES
1.9. OPERAC
OES
COM VETORES
1.9
13
Operac
oes com Vetores
Criar vetores e matrizes em MATLAB e extremamente simples. Abra o vetor com o colchete
esquerdo, [, entre com os valores desejados separados por espacos ou vrgulas, e feche o vetor
com o colchete direito, ]. Exemplo:
>> x = [1 2 3 4 5 6 7 8 9 10]
x =
1
2
3
4
5
10
Utilizando-se a notac
ao dos dois pontos, o vetor x acima pode ser criado de forma mais simples,
como:
>> x = 1:10
x =
1
2
10
10
10
As operac
oes de adic
ao, subtracao, multiplicacao e divisao de um vetor por um escalar
aplica a operac
ao a todos os elementos do vetor. Exemplos:
>> a - 2
ans =
-1
>> 2 * a - 1
ans =
1
3
AO MATLAB
CAP
ITULO 1. INTRODUC
AO
14
>> d = a + b
d =
7
9
11
13
15
>> e = a .* b
e =
6
14
24
36
50
>> f = a ./ b
f =
0.1667
0.2857
0.3750
0.4444
0.5000
Observe a presenca do ponto nos operadores de multiplicacao (.*) e divisao (./) afim de que
essas operac
oes sejam efetuadas na base elemento a elemento. Potencia de vetores e definida
de varias maneiras. Por exemplo,
>> a .^ 2
ans =
1
16
25
>> 2 .^ a
ans =
2
16
32
>> b .^ a
ans =
6
49
512
6561
100000
3.0000 + 3.0000i
Column 5
5.0000 + 5.0000i
>> d.
ans =
1.0000
2.0000
3.0000
4.0000
+
+
+
+
1.0000i
2.0000i
3.0000i
4.0000i
c 2005 G. L. TORRES
4.0000 + 4.0000i
1.10. FORMATOS DE SA
IDA
15
5.0000 + 5.0000i
>> d
ans =
1.0000
2.0000
3.0000
4.0000
5.0000
1.10
1.0000i
2.0000i
3.0000i
4.0000i
5.0000i
Formatos de Sada
Embora todos os c
alculos realizados pelo MATLAB sao executados em precisao dupla, o
formato do resultado exibido no monitor pode ser controlado pelos seguintes comandos:
Comando
format short
format long
format short e
format long e
format short g
format long g
format short eng
format long eng
format rat
format hex
format bank
format +
Formato de Sada
Ponto fixo com 4 dgitos decimais (default)
Ponto fixo com 14 dgitos decimais
Notac
ao cientfica com 4 dgitos decimais
Notac
ao cientfica com 15 dgitos decimais
Notac
ao cientfica com 4 dgitos decimais
Notac
ao cientfica com 15 dgitos decimais
Formato engenharia (exp. m
ultiplo de 3)
Formato engenharia (exp. m
ultiplo de 3)
Aprox. pela razao de menores inteiros
Formato hexadecimal
Dolares e centavos fixos
+, , branco
Exemplo
27.1828
27.18281828459045
2.7183e+01
2.718281828459045e+01
27.183
27.1828182845905
27.1828e+000
27.1828182845905e+000
2528/93
403b2ecd2dd96d44
27.18
Uma vez selecionado, o formato escolhido permanece ativo ate que a escolha de um novo
formato seja feita. O comando
>> format compact
suprime muitas linhas em branco permitindo que mais informacoes sejam exibidas na mesma
pagina ou tela do monitor. O comando
>> format loose
retorna ao formato nao-compacto. Estes comandos sao independentes dos demais comandos
de formato.
1.11
Plotagem Simples
AO MATLAB
CAP
ITULO 1. INTRODUC
AO
16
>>
>>
>>
>>
>>
>>
>>
>>
x = linspace(0,2*pi,30) ;
y = sin(x) ;
plot(x,y)
grid
xlabel(x)
ylabel(sin(x))
title(y = sin(x) )
print -deps plot.eps
%
%
%
%
%
%
%
%
y = sin(x)
1
0.8
0.6
0.4
sin(x)
0.2
0.2
0.4
0.6
0.8
1.12
Os Arquivos-M
Para problemas simples, entrar com os comandos no prompt do MATLAB e rapido e eficiente.
Entretanto, quando o n
umero de comandos necessarios para resolver um problema aumenta,
ou e necessario mudar o valor de uma ou mais variaveis e repetir a execucao de um n
umero
significativo de comandos, digitar os comandos diretamente no prompt do MATLAB torna-se
tedioso.
Para resolver esse problema, MATLAB permite que o usuario coloque essa sequencia de
comandos num arquivo de texto simples e entao faca MATLAB abrir esse arquivo e executar
todos os comandos l
a inseridos como se eles tivessem sido digitados diretamente no prompt do
MATLAB. Estes arquivos sao chamados de script files ou arquivos-M. O termo arquivo-M
c 2005 G. L. TORRES
1.13. P-CODE
17
origina-se do fato de que esses arquivos possuem a extensao .m, por exemplo, teste.m. Para
executar os comandos no arquivo teste.m basta digitar teste no prompt do MATLAB:
>> teste
Os comandos dentro de um arquivo-M tem acesso a todas as variaveis na area de trabalho do
MATLAB, assim como todas as variaveis criadas no arquivo-M tornam-se parte da area de
trabalho.
O arquivo-M de uma func
ao pode conter codigo de mais de uma funcao. A primeira, que
e executada com o nome do arquivo-M, e chamada de funca
o prim
aria. As outras sao ditas
subfunco
es, e sao visveis apenas para a funcao primaria ou para as subfuncoes no mesmo
arquivo. As subfunc
oes comecam consecutivamente, e cada subfuncao inicia com a sua propria
linha de definic
ao de func
ao.
MATLAB possui varios comandos de administracao de arquivos que permitem listar nomes
de arquivos, ver e deletar arquivos-M, exibir e mudar o diretorio corrente, etc. Um resumo
destes comandos e dado abaixo:
Comando
what
dir
type arquivo
delete arquivo
cd diretorio
pwd
which teste
1.13
Descric
ao
Exibe uma lista de todos os arquivos-M no diretorio corrente
Exibe uma lista dos arquivos existentes no diretorio corrente
Exibe o conte
udo de arquivo.m na janela de trabalho
Deleta arquivo.m
Muda do diretorio corrente para diretorio
Exibe o diretorio corrente
Localiza o diretorio do arquivo teste.m
P-code
Um arquivo em P-code (parsed code) e uma versao pre-processada de uma function ou script.
Estes arquivos tem a terminac
ao .p e o conte
udo nao e revelado, ou seja, nao podemos ver
o codigo de um arquivo .p. A finalidade destes arquivos e ganhar tempo na sua utilizac
ao
em MATLAB ou ainda nao revelar o conte
udo do arquivo-M, preservando a propriedade
intelectual. Para gerar o arquivo .p da funcao mean, digite
>> pcode mean
O arquivo mean.m e processado (parsed) e o pseudo-codigo resultante e gravado no arquivo
mean.p. O c
odigo do arquivo mean.p nao pode ser editado nem visto pelo usuario; apenas
aquelas linhas de coment
arios que podem ser exibidas pelo comando help e que sao visveis.
1.14
Operadores Relacionais e L
ogicos
Em adicao as operac
oes matematicas tradicionais, MATLAB suporta operacoes logicas e relacionais. O proposito destes operadores e funcoes e prover respostas para questoes do tipo
Verdadeiro/Falso. Como entrada para toda expressao logica e relacional, MATLAB considera
qualquer n
umero nao-nulo como Verdadeiro e zero como Falso. A sada de toda expressao
logica e relacional fornece 1 para Verdadeiro e 0 para Falso.
Os operadores relacionais sao:
c 2005 G. L. TORRES
AO MATLAB
CAP
ITULO 1. INTRODUC
AO
18
Operador
<
<=
>
>=
==
~=
Descricao
<
>
=
6=
Os operadores relacionais do MATLAB podem ser utilizados para comparar dois vetores do
mesmo tamanho, ou para comparar um vetor a um escalar. Alguns exemplos sao:
>> a = 1:9, b = 9 - a
a =
1
2
3
b =
8
7
6
>> vf = a > 4
vf =
0
0
>> vf = a == b
vf =
0
0
O primeiro exemplo determina os elementos do vetor a que sao maiores do que 4. O segundo
exemplo determina os elementos de a que sao iguais aos elementos de b.
Os operadores l
ogicos fornecem uma maneira para combinar ou negar expressoes relacionais.
Os operadores l
ogicos sao:
Operador
&
!
~
Descricao
E
OU
NAO
c 2005 G. L. TORRES
Captulo
Algebra
Linear e Matrizes
2.1
Matrizes
a11
a21
A= .
..
a12
a22
..
.
am1 am2
a1n
a2n
..
.
amn
CAP
ITULO 2. ALGEBRA
LINEAR E MATRIZES
20
O fim de uma linha pode ser especificado por um ponto e vrgula em vez de um <ENTER>, e
assim um comando mais compacto, mas com o mesmo efeito, para a matriz acima, e
>> A = [2 3 5; 7 11 13; 17 19 23]
Dentro de uma linha, os elementos podem ser separados por espacos ou por vrgulas. No
primeiro caso, se os n
umeros sao especificados com um sinal + ou deve-se tomar o cuidado
para nao deixar um espaco entre o sinal e o n
umero, senao o MATLAB interpretara o sinal
como um operador de adic
ao ou subtracao. Exemplo:
>> x = [-1 2 -3 4]
x =
-1
2
-3
>> x = [-1 2 - 3 4]
x =
-1
-1
4
MATLAB aceita n
umeros complexos em todas as suas funcoes e operacoes. Duas maneiras
covenientes para entrar com matrizes complexas sao:
>> A = [1 2; 3 4] + i*[5 6; 7 8]
A =
1.0000 + 5.0000i
2.0000 + 6.0000i
3.0000 + 7.0000i
4.0000 + 8.0000i
>> A = [1+5i 2+6i; 3+7i 4+8i]
A =
1.0000 + 5.0000i
2.0000 + 6.0000i
3.0000 + 7.0000i
4.0000 + 8.0000i
O i ou o j deve ser utilizado como a unidade imaginaria 1. Se, entretanto, i e j sao utilizados como variaveis e sobreescrevem o valor imaginario, entao uma nova unidade imaginaria
deve ser gerada como, digamos, ii = sqrt(-1).
Duas func
oes muito importantes para geracao de matrizes no MATLAB sao rand(m,n) e
randn(m,n), as quais geram matrizes m-por-n de n
umeros randomicos. A funcao rand produz
uma matriz de n
umeros de distribuicao uniforme sobre o intervalo [0, 1]. Para esta distribuic
ao
a proporc
ao de n
umeros num intervalo [a b] com 0 < a < b < 1 e b a. A funcao randn produz
uma matriz de n
umeros de distribuicao normal padrao (0, 1). Exemplos:
>> rand
ans =
0.9501
>> rand(3)
ans =
0.2311
0.6068
0.4860
0.8913
0.7621
0.4565
0.0185
0.8214
0.4447
c 2005 G. L. TORRES
DE MATRIZES
2.2. MANIPULAC
AO
21
2.2
0.8468
0.3270
0.5541
Manipulac
ao de Matrizes
Uma vez que matrizes sao fundamentais para MATLAB, varios recursos sao disponveis para
manipulac
ao de matrizes. Tendo as matrizes sido formadas, MATLAB dispoe de poderosas
formas para inserir, extrair, e rearranjar subconjuntos delas atraves da facil manipulacao dos
ndices de interesse.
A notac
ao dos dois pontos, :, e utilizada para definir vetores que podem agir como subscritos. Para os inteiros i e j, i:j representa o vetor linha de inteiros de i a j (em incrementos
unitarios). Um incremento s diferente da unidade e especificado como i:s:j. Esta notac
ao
ainda e valida para i, j e s nao-inteiros. Exemplos:
>> 1:5
ans =
1
>> 4:-1:-2
ans =
4
3
>> 0:.75:3
ans =
0
0.7500
1.5000
-1
-2
2.2500
3.0000
Elementos especficos de uma matriz sao acessados como A(i,j), onde i 1 e j 1 (subscritos nulos ou negativos nao sao permitidos no MATLAB). Exemplo:
>> A = [1 2 3; 4 5 6; 7 8 9];
>> A(3,3) = 0
A =
1
2
4
5
7
8
3
6
0
>> A(2,6) = 1
A =
1
2
4
5
7
8
3
6
0
0
0
0
0
0
0
0
1
0
c 2005 G. L. TORRES
22
CAP
ITULO 2. ALGEBRA
LINEAR E MATRIZES
Observe deste exemplo que a matriz A, inicialmente 3-por-3, e aumentada para 3-por-6, com
a adicao do elemento A(2,6), ocorrendo o preenchimento automatico de zeros nos demais
elementos novos.
A submatriz que compreende a intersecao das linhas p a q e as colunas r a s e obtida como
A(p:q,r:s). Exemplo:
>> B = A(1:2,2:3)
B =
2
3
5
6
Como um caso especial, o : sozinho como o especificador de linha ou coluna engloba todos os
elementos naquela linha ou coluna. Assim, A(:,j) e a j-esima coluna de A e A(i,:) a i-esima
linha. Exemplo:
>> B(1,:)
ans =
2
3
>> B(:,2)
ans =
3
6
A palavra-chave end utilizada neste contexto representa o u
ltimo ndice na dimensao especificada. Assim, B(end,:) extrai a u
ltima linha da matriz:
>> B(end,:)
ans =
5
6
Uma submatriz arbitraria pode ser selecionada especificando-se os ndices correspondentes das
linhas e colunas. A instruc
ao A([i j k],[p q]) produz a submatriz que e formada pela
intersecao das linhas i, j e k com as colunas p e q. Exemplo:
>> B = A([1 3],[2 3])
B =
2
3
8
0
Um caso especial do uso do : e A(:), o qual representa um vetor formado por todos os
elementos de A empilhando-se as colunas de A na sequencia da primeira para a u
ltima. Exemplo:
>> C = B(:)
C =
2
8
3
0
Quando colocado no lado esquerdo do comando de atribuicao, A(:) preenche a matriz A,
preservando sua forma. Utilizando esta notacao, uma maneira de definir uma matriz 3-por-3
de n
umeros primos e
c 2005 G. L. TORRES
23
>> A = zeros(3);
>> A(:) = primes(23);
>> A = A
A =
2
3
5
7
11
13
17
19
23
A funcao primes retorna um vetor de n
umeros primos menores ou iguais ao seu argumento.
A transposic
ao A = A e necessaria para reordenar os primos no sentido das linhas em vez das
colunas.
A notac
ao [] representa um vazio; uma matriz 0-por-0. Atribuir [] a uma linha ou coluna
e uma maneira de deletar aquela linha ou coluna de uma matriz. Exemplo:
>> A(:,2) = []
A =
2
5
7
13
17
23
O efeito deste exemplo e o mesmo conseguido por
>> A = A(:,[1 3])
A matriz vazia [] e tambem bastante u
til como um meio de reservar lugar em listas de
argumentos.
2.3
Matriz diagonal e uma matrix quadrada n-por-n na qual aij = 0 para i 6= j, da forma:
d11 0
0
0 d22
0
D= .
..
..
..
..
.
.
.
0
0 dnn
Se x e um vetor, ent
ao diag(x) e a matriz diagonal com os elementos de x na diagonal. Se A
e uma matriz quadrada, ent
ao diag(A) e um vetor contendo os elementos da diagonal de A.
Exemplos:
>> x = [4 5 2], A = [2 3 5; 2 4 5; 3 1 9]
x =
4
5
2
A =
2
3
5
2
4
5
3
1
9
>> diag(x)
ans =
c 2005 G. L. TORRES
CAP
ITULO 2. ALGEBRA
LINEAR E MATRIZES
24
4
0
0
0
5
0
0
0
2
>> diag(A)
ans =
2
4
9
Matriz identidade e uma matriz diagonal na qual todos os elementos diagonais sao iguais
a unidade:
1 0 0
0 1 0
I = . . .
..
.
.
.
. .
. .
0 0 1
0
1
>> eye(3,2)
ans =
1
0
0
1
0
0
Uma situac
ao bastante comun e ter que obter uma matriz identidade cujas dimensoes coincidam com as dimensoes de uma certa matriz A. Isto pode ser feito atraves do comando
eye(size(A)). Exemplo:
>> eye(size(A))
ans =
1
0
0
1
0
0
0
0
1
Ha tambem o comando ones(m,n) que gera uma matriz m-por-n de 1s. Exemplo:
>> ones(3,2)
ans =
1
1
c 2005 G. L. TORRES
1
1
25
1
1
Matriz nula e uma matriz que possui todos os seus elementos nulos:
0 0 0
0 0 0
0 = . .
..
.. ..
.
0 0
Para qualquer matriz A, temos A + 0 = A. Uma matriz nula m-por-n pode ser gerada pela
funcao zeros(m,n). Exemplos:
>> zeros(2,3)
ans =
0
0
0
0
0
0
>> zeros(2)
ans =
0
0
0
0
Matriz escalar e uma matriz diagonal cujos elementos diagonais sao todos iguais:
k 0 0
0 k 0
K = . . .
.. = kI
.
.
.
. .
. .
0 0
0
0
2
Matrizes tipo bloco-diagonal podem ser definidas utilizando a funcao blkdiag, como no
exemplo
>> A = blkdiag(rand(2),ones(2))
A =
0.9501
0.6068
0
0.2311
0.4860
0
0
0
1.0000
0
0
1.0000
0
0
1.0000
1.0000
CAP
ITULO 2. ALGEBRA
LINEAR E MATRIZES
26
Adj(A)
.
|A|
0
1.0000
0
0.0000
-0.0000
1.0000
O produto B*A tem 1s na diagonal, como esperado. Devido aos erros de truncamento nas
operacoes de ponto-flutuante, os elementos nao-diagonais, mostrados como 0.0000, nao sao,
na verdade, exatamente zeros. MATLAB armazena n
umeros e faz calculos com uma precisao
relativa de cerca de 16 dgitos decimais. Por default, ele exibe os n
umeros em um formato de
5 dgitos.
Alem de diversas matrizes especiais que o MATLAB ja dispoe, a funcao gallery criada
por N. J. Higham prover acesso a uma extensa colecao de matrizes testes. O comando help
gallery exibe a relac
ao de matrizes em gallery.
2.4
Operac
oes com Matrizes e Vetores
Adicao e subtrac
ao sao operac
oes definidas apenas para matrizes de mesma dimensao. O
produto A*B e o resultado da multiplicacao, a qual e definida apenas quando o n
umero de
colunas de A e o n
umero de linhas de B sao iguais. Os operadores \ e / definem soluc
oes
de sistemas lineares: A\B e a solucao X de A*X=B, enquanto A/B e uma solucao X de X*B=A.
Exemplos:
>> A = [1 2; 3 4], B = ones(2)
A =
1
2
3
4
B =
1
1
1
1
>> A+B
ans =
2
3
c 2005 G. L. TORRES
2.4. OPERAC
OES
COM MATRIZES E VETORES
>> A*B
ans =
3
7
3
7
>> A\B
ans =
-1
1
-1
1
27
Multiplicac
ao e divis
ao no sentido vetorial, ou elemento por elemento, sao especificados
precedendo-se o operador com um ponto. Se A e B sao matrizes de mesma dimensao, ent
ao
a operac
ao C = A.*B estabelece C(i,j) = A(i,j)*B(i,j) e C = A./B estabelece C(i,j) =
A(i,j)/B(i,j). A atribuic
ao C = A.\B e equivalente a C = B./A. Exemplos:
>> A.*B
ans =
1
3
2
4
>> B./A
ans =
1.0000
0.3333
0.5000
0.2500
Exponenciac
ao com ^ e definida como potenciacao da matriz, mas a forma do ponto fornece
a exponenciac
ao elemento a elemento. Assim se A e uma matriz quadrada, entao A^2 e o
produto matricial A*A, enquanto A.^2 e A com cada elemento elevado ao quadrado:
>> A^2, A.^2
ans =
7
10
15
22
ans =
1
9
4
16
81
>> 2.^x
c 2005 G. L. TORRES
CAP
ITULO 2. ALGEBRA
LINEAR E MATRIZES
28
ans =
2
>> 2.^Z
2
8
4
16
Exponenciac
ao e definida para todas as potencias, nao somente para inteiros positivos. Para p
nao-inteiro, A^p e calculado utilizando os autovalores e autovetores de A; os resultados podem
ser imprecisos ou incorretos quando A e nao-diagonalizavel ou quando A tem um auto-sistema
mal-condicionado.
O conjugado transposto da matriz A e obtido com A. Se A e real, esta operacao fornece
simplesmente o transposto. O transposto sem conjugacao e obtido com A.. As alternativas
funcionais ctranspose(A) e transpose(A) sao algumas vezes mais covenientes. Para o caso
especial de vetores colunas x e y, a operacao x*y fornece o produto interno ou escalar, o qual
tambem pode ser obtido utilizando-se a funcao dot como dot(x,y). Exemplos:
>> x = [-1 0 1]; y = [3 4 5];
>> x*y
ans =
2
>> dot(x,y)
ans =
2
Se um escalar e adicionado a uma matriz entao MATLAB expandira o escalar para uma
matriz com todos os elementos iguais a aquele escalar e efetuara a soma das duas matrizes.
Exemplo:
>> A = [4 3; 2 1] - 4
A =
8
7
6
5
>> A = [1 -1] - 6
A =
-5
-7
Se uma matriz e multiplicada ou dividida por um escalar, entao a operacao e executada no
sentido elemento-a-elemento. Exemplo:
>> A = [3 4 5; 4 5 6]/12
A =
0.2500
0.3333
0.4167
0.3333
0.4167
0.5000
Partes triangulares de uma matriz sao extraidas atraves dos comandos tril e triu. A
parte triangular inferior de A (os elementos sobre a diagonal e abaixo da diagonal principal)
e especificada por tril(A), e a parte superior de A (os elementos sobre a diagonal e acima
c 2005 G. L. TORRES
2.5. NORMAS E NUMEROS
CONDICIONADORES
29
da diagonal principal) e especificada por triu(A). De forma mais geral, tril(A,k) fornece os
elementos sobre e abaixo a k-esima diagonal de A, enquanto triu(A,k) fornece os elementos
sobre e acima a k-esima diagonal de A. Exemplos:
>> A = [2 3 5; 7 11 13; 17 19 23]
A =
2
3
5
7
11
13
17
19
23
>> tril(A)
ans =
2
0
7
11
17
19
0
0
23
>> tril(A,1)
ans =
0
3
0
0
0
0
5
13
0
>> tril(A,-1)
ans =
0
3
0
0
0
0
5
13
0
2.5
Normas e N
umeros Condicionadores
Uma norma pode ser utilizada para quantificar erros e medir distancias num espaco vetorial.
Uma norma k k definida no Rn e um mapeamento que atribui um escalar kxk para todo
x Rn , e satisfaz as seguintes propriedades:
kxk 0 para todo x Rn .
kxk = 0 se e apenas se x = 0.
kxk = ||kxk para todo R e todo x Rn .
kx + yk kxk + kyk para todo x, y Rn (desigualdade do triangulo).
|xT y| kxkkyk para todo x, y Rn (desigualdade de CauchySchwarz), com a igualdade
sendo verificada se e apenas se x e um m
ultiplo de y.
A norma Euclideana e definida por
kxk2 =
xT x =
n
X
i=1
|xi |
!1/2
c 2005 G. L. TORRES
CAP
ITULO 2. ALGEBRA
LINEAR E MATRIZES
30
A norma unit
aria k k1 e definida por
kxk1 =
n
X
|xi |.
i=1
Duas outras normas de matrizes tem suas expressoes de calculo bastante simplificadas:
kAk1 = max
1jn
kAk = max
1im
m
X
i=1
n
X
j=1
|aij |,
|aij |.
Ou seja, a norma-1 e a maxima soma absoluta verificada por colunas da matriz, enquanto a
norma- e a maxima soma absoluta verificada por linhas.
No caso de matrizes, o uso da funcao norm e como segue:
>> norm(A,p)
admitindo os parametros p = 1,2,inf e p = fro para a norma de Frobenius. Exemplo:
>> A = [1 2 3; 4 5 6; 7 8 9]
A =
1
2
3
4
5
6
7
8
9
>> [norm(A,1) norm(A,2) norm(A,inf) norm(A,fro)]
ans =
18.0000
16.8481
24.0000
16.8819
c 2005 G. L. TORRES
2.6. EQUAC
OES
LINEARES
31
2.6
Equac
oes Lineares
2.6.1
Sistema Quadrado
Se A e uma matriz n-por-n nao-singular, entao A\b e a solucao x para Ax = b, calculada por
fatorizac
ao LU com pivoteamento parcial. Durante o processo de solucao, MATLAB calcula
rcond(A) e mostra uma mensagem de advertencia se o resultado e menor do que eps. Exemplo:
>> x = hilb(15)\ones(15,1);
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 9.178404e-019.
Estas mensagens de advertencias podem ser desativadas utilizando o comando warning off.
MATLAB reconhece duas formas especiais de sistemas quadrados, e tira proveito delas
para reduzir o esforco computacional:
c 2005 G. L. TORRES
CAP
ITULO 2. ALGEBRA
LINEAR E MATRIZES
32
2.6.2
Sistema Sobredeterminado
2.6.3
Sistema Subdeterminado
33
1
>> x = A\b ;
>> y = pinv(A)*b ;
>> [x y]
ans =
2.0000
1.0000
0
1.0000
1.0000
1.0000
>> [norm(x) norm(y)]
ans =
2.2361
1.7321
2.7
CAP
ITULO 2. ALGEBRA
LINEAR E MATRIZES
34
A =
1
16
81
256
625
1
8
27
64
125
1
4
9
16
25
1
2
3
4
5
1
1
1
1
1
>> det(A)
ans =
288
Nao e recomendado testar a proximidade da matriz para a singularidade utilizando det. Em
vez de det deve-se utilizar cond, rcond ou condest.
A falsa-inversa generaliza a nocao de inversa para matrizes A retangulares e rank deficientes, e e escrita como A+ . Ela e calculada com pinv(A). A falsa-inversa A+ de A pode
ser caracterizada como a u
nica matriz X = A+ que satisfaz as quatro condicoes AXA = A,
2.8
Fatorizac
ao LU
Uma fatorizac
ao LU de uma matriz quadrada A e uma fatorizacao A = LU onde L e uma
matriz triangular inferior unitaria (ou seja, triangular inferior com 1s sobre a diagonal) e U e
uma matriz triangular superior. Nem toda matriz pode ser fatorada nesta forma, mas quando
permutac
oes de linhas sao consideradas, a fatorizacao sempre existe. A funcao lu calcula uma
fatorizac
ao LU com pivoteamento parcial P A = LU , onde P e uma matriz de permutacao. A
operacao
>> [L,U,P] = lu(A)
retorna os fatores triangulares e a matriz de permutacao. A mesma funcao com apenas dois
argumentos de sada,
>> [L,U] = lu(A)
retorna L= P T L, e assim L e a matriz triangular inferior L com suas linhas permutadas.
Exemplo:
>> format short g
>> A = [0 1 2; 1 0 1; 2 1 0]
A =
0
1
2
1
0
1
2
1
0
>> [L,U] = lu(A)
L =
0
1
0
0.5 -0.5
1
1
0
0
U =
c 2005 G. L. TORRES
CHOLESKY
2.9. FATORIZAC
AO
2
0
0
1
1
0
35
0
2
2
Embora a fatorizac
ao A = LU seja matematicamente definida para matrizes retangulares, a
funcao lu aceita apenas matrizes quadradas como entrada.
Utilizando x = A\b para resolver um sistema linear Ax=b com uma matriz A quadrada e
equivalente a fatorar A = LU e ent
ao resolver o sistema com os fatores:
>> [L,U] = lu(A);
>> x = U\(L\b);
MATLAB tira proveito do fato que L e uma matriz triangular inferior permutada quando
forma o sistema L\b. Uma vantagem desta abordagem de dois passos e que, se outros sistemas
lineares envolvendo a mesma matriz A estao para serem resolvidos entao os fatores LU podem
ser reutilizados, com uma economia significativa nos calculos.
2.9
Fatorizac
ao Cholesky
Qualquer matriz positiva definida tem uma fatorizacao Cholesky A = G G, onde G e uma
matriz triangular superior real com elementos diagonais positivos. O fator de Cholesky e
calculado por G = chol(A). Exemplo:
>> A = pascal(4)
A =
1
1
1
1
2
3
1
3
6
1
4
10
>> G = chol(A)
G =
1
1
0
1
0
0
0
0
1
2
1
0
1
4
10
20
1
3
3
1
Observe que chol trabalha apenas com os elementos no triangulo superior de A (incluindo a
diagonal). Um erro e produzido se A nao e positiva definida.
A func
ao chol pode ser utilizada para testar se uma matriz e positiva definida (na verdade
esse teste e t
ao bom quanto outro qualquer) utilizando a instrucao
>> [G,p] = chol(A)
onde o inteiro p sera zero se a fatorizacao ocorrer com sucesso, e sera positivo caso contrario.
A func
ao cholupdate modifica a fatorizacao Cholesky quando a matriz original e sujeita a
uma perturbac
ao de rank-1 (seja uma atualizacao +xx ou xx ).
c 2005 G. L. TORRES
CAP
ITULO 2. ALGEBRA
LINEAR E MATRIZES
36
2.10
Fatorizac
ao QR
Uma fatorizac
ao QR de uma matriz A m-por-n e uma fatorizacao A = QR, onde Q e uma matriz unitaria m-por-m e R e uma matriz triangular superior m-por-n. Esta fatorizacao e muito
u
til na soluc
ao de problemas de mnimos quadrados e para construir uma base orthonormal
para as colunas de A. O comando
>> [Q,R] = qr(A)
calcula a fatorizac
ao, enquanto quando m > n o comando
>> [Q,R] = qr(A,0)
fornece uma versao tamanho economico na qual Q tem apenas n colunas e R e n-por-n.
Exemplo:
>> format short e
>> A = [1 0 1; 1 -1 1; 2 0 0]
A =
1
0
1
1
-1
1
2
0
0
>> [Q,R] = qr(A)
Q =
-4.0825e-001 1.8257e-001
-4.0825e-001 -9.1287e-001
-8.1650e-001 3.6515e-001
R =
-2.4495e+000 4.0825e-001
0 9.1287e-001
0
0
-8.9443e-001
-6.1745e-017
4.4721e-001
-8.1650e-001
-7.3030e-001
-8.9443e-001
Uma fatorizac
ao QR com pivoteamento de coluna tem a forma AP = QR, onde P e uma
matriz de permutac
ao. A estrategia de permutacao que e utilizada produz um fator R cujos
elementos diagonais sao nao-crescentes: |r11 |r22 | |rnn |. Pivoteamento de colunas e
particularmente apropriado quando A e suspeita de ser rank-deficiente. Um terceiro argumento
forca a func
ao qr utilizar pivoteamento de coluna e retornar a matriz permutacao:
>> [Q,R,P] = qr(A)
As func
oes qrdelete, qrinsert e qrupdate modificam a fatorizacao QR quando uma
coluna da matriz original e deletada ou inserida, bem como quando uma perturbacao de rank
1 e adicionada.
2.11
Decomposic
ao em Valores Singulares
A decomposic
ao em valores singulares (SVD) de uma matriz A m-por-n e da forma
A = U V ,
c 2005 G. L. TORRES
37
onde U e uma matriz unitaria m-por-m, V e uma matriz unitaria n-por-n e e uma matriz
m-por-n diagonal real com ii = i . Os valores singulares i satisfazem a relacao 1 2
min(m,n) 0. SVD e uma ferramenta extremamente u
til. Por exemplo, o rank de A
e o n
umero de valores singulares nao-nulos, e o menor valor singular e a distancia segundo a
norma-2 para a matriz rank-deficiente mais proxima. A SVD completa de A e calculada por
>> [U,S,V] = svd(A)
Se apenas um argumento de sada e especificado, entao um vetor de valores singulares e retornado. Quando m > n o comando
>> [U,S,V] = svd(A,0)
produz uma SVD de tamanho economico na qual U e uma matriz m-por-n com colunas
ortonormais e S e n-por-n. Exemplo:
>> A = reshape(1:9,3,3) ;
>> format short e
>> svd(A)
ans =
1.6848e+01
1.0684e+00
1.0275e-16
Aqui a matriz e singular. O menor valor singular calculado e da ordem do erro de arredondamento em vez de zero, devido a erros de arredondamentos.
As func
oes rank, null e orth calculam, respectivamente, o rank, uma base ortonormal para
o espaco nulo e uma base ortonormal para o espalhamento da matriz argumento. Exemplo:
>> rank(A)
ans =
2
>> null(A)
ans =
4.0825e-01
-8.1650e-01
4.0825e-01
>> orth(A)
ans =
4.7967e-01
5.7237e-01
6.6506e-01
2.12
7.7669e-01
7.5686e-02
-6.2532e-01
Autovalores e Autovetores
CAP
ITULO 2. ALGEBRA
LINEAR E MATRIZES
38
2.13. METODOS
ITERATIVOS PARA EQUAC
OES
LINEARES
2.6180
0
39
0
0.3820
>> norm(V*V-eye(2))
ans =
2.2204e-016
2.13
M
etodos Iterativos para Equac
oes Lineares
Varias func
oes implementam metodos iterativos para resolver sistemas lineares quadrados
Ax = b:
Func
ao
bicg
bicgstab
cgs
gmres
minres
lsqr
pcg
qmr
symmlq
Tipo Matriz
Geral
Geral
Geral
Geral
Hermitiana
Geral
Hermitiana p.d.
Geral
Hermitiana
Metodo
Metodo
Metodo
Metodo
Metodo
Metodo
Metodo
Metodo
Metodo
Metodo
do Gradiente BiConjugado
do Gradiente BiConjugado Estabilizado
do Gradiente Conjugado Quadrado
dos Mnimos Resduos Generalizado
dos Mnimos Resduos
do Gradiente sobre a Equacao Normal
do Gradiente com Precondicionamento
do Resduo Quasi-Mnimo
do LQ simetrico
Todos os metodos empregam o produto matrix-vetor Ax e possivelmente A x, e nao requerem acesso explcito aos elementos de A. As funcoes tem chamadas identicas, com excec
ao
de gmres. O uso mais simples e
>> x = solver(A,b)
onde solver e uma das func
oes da tabela acima. Alternativamente,
>> solver(A,b,tol)
especifica uma tolerancia de convergencia tol, cujo default e 1e-6. Convergencia e declarada
quando uma iterac
ao x satisfaz o teste norm(b-A*x) <= tol*norm(b).
A func
ao gmres tem um argumento extra restart na terceira posicao que especifica em
qual iterac
ao reiniciar o metodo.
2.14
Matrizes Esparsas
Uma matriz e dita esparsa se ela tem uma grande percentagem de elementos nulos. Para lidar
com matrizes grandes, esparsas, e desejavel tirar vantagens da esparsidade armazenando-se
e operando apenas com os elementos nao-nulos. MATLAB possui um tipo de dado sparse
que armazena somente os elementos nao-nulos de uma matriz juntamente com seus ndices
de linhas e de colunas. Nesta secao, utilizamos o termo matriz esparsa para uma matriz
armazenada no tipo de dado sparse, e o termo matriz cheia para uma matriz armazenada
no tipo de dado double (default).
Matrizes esparsas podem ser criadas de diversas maneiras, varias das quais envolvem a
funcao sparse. Dado um vetor s com t elementos, e os vetores de ndices i e j tambem com
t elementos, o comando
c 2005 G. L. TORRES
CAP
ITULO 2. ALGEBRA
LINEAR E MATRIZES
40
>> A = sparse(i,j,s)
define uma matriz esparsa A de dimensao max(i)-por-max(j) com A(i(k),j(k)) = s(k), para
k=1:t e todos os outros elementos nulos. Exemplo:
>> A = sparse([1 2 2 4 4],[3 1 4 2 4],1:5)
A =
(2,1)
2
(4,2)
4
(1,3)
1
(2,4)
3
(4,4)
5
MATLAB exibe uma matriz esparsa listando os elementos nao-nulos precedidos pelos seus
ndices, ordenados por colunas. Uma matriz esparsa pode ser convertida para uma matriz
cheia utilizando-se a func
ao full:
>> B = full(A)
B =
0
0
2
0
0
0
0
4
1
0
0
0
0
3
0
5
De forma inversa, uma matriz cheia B e convertida para o formato de armazenamento esparso
por
>> A = sparse(B)
O n
umero de elementos nao-nulos em uma matriz esparsa (ou cheia) e fornecido por nnz:
>> nnz(A)
ans =
5
A funcao sparse aceita tres argumentos extras. O comando
>> A = sparse(i,j,s,m,n)
constroi uma matriz esparsa m-por-n; os dois u
ltimos argumentos sao necessarios quando a
u
ltima linha ou coluna de A e toda nula. O comando
>> A = sparse(i,j,s,m,n,nzmax)
aloca memoria para nzmax elementos nao-nulos, o que e u
til se elementos nao-nulos extras, nao
presentes em s, forem introduzidos posteriormente, por exemplo quando A e gerada coluna por
coluna.
Uma matriz esparsa de zeros e produzida por sparse(m,n) (ambos argumentos devem ser
especificados), o que e uma abreviacao para sparse([],[],[],m,n,0). O comando spalloc
aloca espaco para uma matriz esparsa. Ou seja, o comando S = spalloc(m,n,nzmax) cria uma
matriz nula m-por-n esparsa, com espaco para eventualmente armazenar ate nzmax elementos
nao-nulos. A func
ao l
ogica issparse(A) retorna 1 se a classe de armazenamento da matriz A
e esparsa e retorna 0 caso contrario.
c 2005 G. L. TORRES
41
A matriz identidade esparsa e produzida por speye(n) ou speye(m,n), enquanto o comando spones(A) produz uma matriz com o mesmo padrao de esparsidade de A e com 1s na
posicao dos elementos nao-nulos. Os argumentos que sparse necessita para reconstruir uma
matriz existente A via A = sparse(i,j,s,m,n) podem ser obtidos por
>> [i,j,s] = find(A);
>> [m,n] = size(A);
A func
ao spdiags e um analogo de diag para matrizes esparsas. O comando
>> A = spdiags(B,d,m,n)
cria uma matriz A m-por-n cujos elementos diagonais indexados por d sao tirados das colunas
de B. Por exemplo,
>> B = [1 2 0; 1 2 3; 0 2 3; 0 2 3], d = [-2 0 1]
B =
1
2
0
1
2
3
0
2
3
0
2
3
d =
-2
0
1
>> A = spdiags(B,d,4,4)
A =
(1,1)
2
(3,1)
1
(1,2)
3
(2,2)
2
(4,2)
1
(2,3)
3
(3,3)
2
(3,4)
3
(4,4)
2
>> full(A)
ans =
2
0
1
0
3
2
0
1
0
3
2
0
0
0
3
2
CAP
ITULO 2. ALGEBRA
LINEAR E MATRIZES
42
nao esta presente no caso de matrizes cheias: lu(A,thresh) estabelece uma tolerancia de
pivoteamento thresh, cujo valor deve estar entre 0 e 1. A estrategia de pivoteamento requer
que o elemento pivo tenha magnitude nao inferior a thresh vezes a magnitude do maior
elemento abaixo da diagonal na coluna pivo. O default e 1, correspondendo a pivoteamento
parcial, enquanto um thresh = 0 impede o pivoteamento.
Uma vez que lu e chol nao pivoteiam para esparsidade, e recomendado considerar uma
reordenac
ao da matriz antes de fatora-la. Exemplos:
>> A = gallery(wathen,8,8);
>> subplot(1,2,1), spy(A)
>> subplot(1,2,2), spy(chol(A))
Os graficos spy de A e sua fatorizacao Cholesky sao mostrados na Figura 2.1. Os comandos
abaixo reordenam a matriz utilizando a ordenaca
o simetrica de grau mnimo:
>> m = symmmd(A);
>> subplot(1,2,1), spy(A(m,m))
>> subplot(1,2,2), spy(chol(A(m,m)))
Alem da ordenac
ao simetrica de grau mnimo (symmmd), o MATLAB dispoe de mais seis
algoritmos de ordenac
ao, a saber: colamd (permutacao de grau mnimo aproximado de coluna), symamd (permutac
ao de grau mnimo simetrico aproximado), symrcm (permutacao de
Cuthill-McKee reversa simetrica), colperm (permutacao de colunas), randperm (permutac
ao
randomica) e dmperm (permutac
ao de Dulmage-Mendelsohn).
0
50
50
100
100
150
150
200
200
50
100
150
200
50
100
150
200
c 2005 G. L. TORRES
43
50
100
150
200
50
100
150
200
50
100
150
200
50
100
150
200
Figura 2.2: Matriz de Wathen (superior) e sua fatorizacao Cholesky (inferior) com pivoteamento simetrico de grau mnimo
c 2005 G. L. TORRES
44
CAP
ITULO 2. ALGEBRA
LINEAR E MATRIZES
c 2005 G. L. TORRES
Captulo
Gr
aficos 2-D, 3-D e Imagens
3.1
Gr
aficos 2-D
MATLAB possui capacidades graficas bastante versateis e poderosas. Graficos dos mais diversos tipos podem ser gerados com relativa facilidade e as suas formas e aparencias podem
ser facilmente configuradas. O comando mais comun para plotar graficos 2-D e o comando
plot(x,y). Por exemplo, os comandos
>> x = linspace(0,2*pi,30);
>> y = sin(x);
>> plot(x,y)
produzem o grafico da Figura 3.1, onde os pontos x(i), y(i) sao ligados em sequencia. Podemos substituir plot(x,y) por plot(x,y,string), onde string combina ate tres elementos
que controlam a cor, o marcador e o estilo da linha, conforme a tabela abaixo.
O uso dos smbolos indicados na coluna Marcador plota o smbolo escolhido em cada
ponto x(i),y(i) porem nao conecta os pontos com uma linha. Por exemplo,
>> plot(x,y,r*--)
especifica que um asterisco vermelho deve ser colocado em cada ponto x(i),y(i) e que os
pontos devem ser unidos por uma linha vermelha tracejada, enquanto o comando
>> plot(x,y,y+)
especifica um x amarelo em cada ponto sem que uma linha ligue os pontos. O grafico da
esquerda da Figura 3.2 foi obtido com o comando
45
CAP
ITULO 3. GRAFICOS
2-D, 3-D E IMAGENS
46
0.8
0.6
0.4
0.2
0.2
0.4
0.6
0.8
y
m
c
r
g
b
w
k
Cor
Amarela
Magenta
Cyan
Vermelha
Verde
Azul
Branca
Preta
.
o
x
+
*
s
d
^
v
>
<
p
h
Marcador
Ponto
Crculo
Marca-x
Mais
Asterisco
Quadrado
Losango
Triangulo p/ Cima
Triangulo p/ Baixo
Triangulo p/ Direita
Triangulo p/ Esquerda
Estrela 5 Pontas
Estrela 6 Pontas
:
-.
- -
Estilo da Linha
Linha Solida
Linha Pontilhada
Traco-Ponto
Linha Tracejada
>> plot(x,y,kd:)
o qual especifica uma linha preta pontilhada com um marcador tipo losango.
Mais de um conjunto de dados pode ser utilizado no comando plot. Por exemplo, o grafico
da direita da Figura 3.2 foi obtido por
>>
>>
>>
>>
x = linspace(0,2*pi,30);
y = sin(x);
z = cos(x);
plot(x,y,b:,x,z,r--)
3.2. PERSONALIZANDO GRAFICOS
47
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2
0.2
0.2
0.4
0.4
0.6
0.6
0.8
0.8
3.2
Personalizando Gr
aficos
Os graficos da Figura 3.3 mostram personalizacoes dos grafico da Figura 3.2, aos quais foram
adicionados um grid (linhas horizontais e verticais), um ttulo, e rotulos nos eixos horizontal e
vertical, como segue:
>>
>>
>>
>>
grid
title(Curvas sin(x) e cos(x))
xlabel(Variavel X)
ylabel(Variaveis Y e Z)
Curvas sin(x) e cos(x)
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2
sin(x)
Variavel Y
Variavel Y
cos(x)
0.2
0.2
0.4
0.4
0.6
0.6
0.8
0.8
Variavel X
Variavel X
CAP
ITULO 3. GRAFICOS
2-D, 3-D E IMAGENS
48
text(x,y,string)
onde x e y aqui representam as coordenadas da string nas unidades dos eixos do grafico.
Exemplo:
>> text(1.5,0.3,cos(x)), text(2.5,0.7,sin(x))
O resultado e exibido no grafico da direita da Figura 3.3.
Podemos exercer outros controles sobre o grafico inserindo argumentos adicionais no comando plot. As propriedades LineWidth (default 0.5pt) e MarkerSize (default 6pt) podem
ser especificadas em pontos, onde um ponto mede 1/72 . Por exemplo, os comandos
>> plot(x,y,LineWidth,2)
>> plot(x,y,p,MarkerSize,10)
produzem um grafico com uma linha de espessura 2pt e marcador de tamanho 10pt. Para marcadores que possuem um interior bem definido, as propriedades do marcador MarkerEdgeColor
e MarkerFaceColor podem ser ajustadas para uma das cores indicadas anteriormente. Por
exemplo,
>> plot(x,y,o,MarkerEdgeColor,m)
ajusta a borda do marcador tipo crculo para a cor magenta. O comando
>> box off
inibe a exibic
ao da caixa que envolve o grafico, como e mostrado na Figura 3.4, deixando
apenas os eixos x e y.
Curvas sin(x) e cos(x)
1
0.8
sin(x)
0.6
0.4
cos(x)
Variavel Y
0.2
0.2
0.4
0.6
0.8
Variavel X
3.2. PERSONALIZANDO GRAFICOS
49
faz com que as plotagens subsequentes sejam superpostas sobre a atual, enquanto
>> hold off
especifica que cada nova plotagem inicie uma nova figura. O estatus default e hold off.
O comando clf limpa a janela de figura atual (a janela ativa se houver mais de uma),
possvel ter mais de uma janela de figura na
enquanto o comando close fecha esta janela. E
tela. A forma mais simples de criar uma nova janela de figura e digitar figure. A n-esima
janela de figura (onde n e exibido na barra de ttulo da janela) pode ser ativada digitando-se
figure(n). O comando close all fecha todas as janelas de figuras.
3.2.1
Eixos e Anotac
oes
Varios aspectos dos eixos de um grafico podem ser controlados com o comando axis. Os eixos
da figura sao removidos com o comando
>> axis off
A proporc
ao entre os eixos pode ser feita igual a unidade, de forma que, por exemplo, um
crculo nao pareca uma elipse, digitando-se
>> axis equal
A caixa de eixos pode ser feita quadrada com o comando
>> axis square
Exemplos:
>> plot(fft(eye(17))), axis equal, axis square
>> plot(fft(eye(17))), axis equal, axis off
0.8
0.6
0.4
0.2
0.2
0.4
0.6
0.8
1
1
0.8
0.6
0.4
0.2
0.2
0.4
0.6
0.8
CAP
ITULO 3. GRAFICOS
2-D, 3-D E IMAGENS
50
para a = 12 e b = 5.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
a = 12; b = 5;
t = 0:0.05:10*pi;
x = (a+b)*cos(t) - b*cos((a/b+1)*t);
y = (a+b)*sin(t) - b*sin((a/b+1)*t);
plot(x,y)
axis equal
axis([-25 25 -25 25])
grid on
title(Epicycloid: a=12, b=5)
xlabel(x(t)), ylabel(y(t))
O comando legend adiciona uma caixa que explica o estilo das linhas; ver Figura 3.7.
Digitando-se legend(string1,string2,...,stringn) cria-se uma caixa de legenda
que poe stringi proximo a informacao de cor/marcador/estilo de linha para o grafico correspondente. Por default, a caixa de legenda aparece no canto direito superior da area do eixo.
A localizac
ao da caixa de legenda pode ser especificada adicionando-se um argumento extra
como segue:
-1
0
1
2
3
4
a direita do grafico
automaticamente escolhe a melhor localizacao
canto direito superior (default)
canto esquerdo superior
canto esquerdo inferior
canto direito inferior
3.2. PERSONALIZANDO GRAFICOS
51
20
15
10
y(t)
10
15
20
25
25
20
15
10
0
x(t)
10
15
20
25
Figura 3.6:
Polinomios de Legendre
1
0.8
0.6
0.4
Pn
0.2
0.2
0.4
0.6
n=1
n=2
n=3
n=4
0.8
1
1
0.8
0.6
0.4
0.2
0
x
0.2
0.4
0.6
0.8
CAP
ITULO 3. GRAFICOS
2-D, 3-D E IMAGENS
52
sombreamento. Assim, fill(x,y,[0 1 0]) utiliza o verde puro e fill(x,y,[1 0 1]) utiliza
magenta. Especificando-se valores iguais de vermelho, verde e azul fornece uma escala de cinza
que pode variar entre preto ([0 0 0]) e branco ([1 1 1]).
3.2.2
Caracteres Especiais
MATLAB tem a capacidade de modificar o texto para ter diferentes estilos, ao dar suporte
para um subconjunto dos caracteres TEX. TEX e uma notacao padrao para conjuntos especiais
de caracteres. Eles podem ser reconhecidos pela barra invertida \ que precede o nome do
caracter. Por exemplo, a letra grega e especificada por \alpha em TEX. A tabela abaixo
lista todos os caracteres TEX disponveis em MATLAB.
Caracter TEX
\alpha
\beta
\gamma
\delta
\epsilon
\zeta
\eta
\theta
\vartheta
\iota
\kappa
\lambda
\mu
\nu
\xi
\pi
\rho
\sigma
\varsigma
\tau
\equiv
\Im
\otimes
\cap
\supset
\int
\rfloor
\lfloor
\perp
\wedge
\rceil
\vee
\langle
Resultado
Caracter TEX
\upsilon
\phi
\chi
\psi
\omega
\Gamma
\Delta
\Theta
\Lambda
\Xi
\Pi
\Sigma
\Upsilon
\Phi
\Psi
\Omega
\forall
\exists
\ni
\cong
\approx
\Re
\oplus
\cup
\subseteq
\in
\lceil
\cdot
\neg
\times
\surd
\varpi
\rangle
Resultado
c 2005 G. L. TORRES
Caracter TEX
\sim
\leq
\infty
\clubsuit
\diamondsuit
\heartsuit
\spadesuit
\leftrightarrow
\leftarrow
\uparrow
\rightarrow
\downarrow
\circ
\pm
\geq
\propto
\partial
\bullet
\div
\neq
\aleph
\wp
\oslash
\supseteq
\subset
\o
\nabla
\dots
\prime
\O
\mid
\copyright
Resultado
6=
...
|
c
3.3. MULTIPLOS
GRAFICOS
NUMA FIGURA
53
Resultado
Fonte em negrito
Fonte em italico
Fonte inclinada
Fonte normal
Torna parte do texto superscript
Torna parte do texto subscript
Especifica a fonte a ser utilizada
Especifica o tamanho da fonte.
Os quatro primeiros modificadores sao mutuamente exclusivos, de forma que voce nao pode
utiliza-los juntos. Entretanto, voce pode utilizar \fontname em combinacao com um dos outros
modificadores. O seguinte c
odigo ilustra o uso do interpretador TEX:
>>
>>
>>
>>
>>
x = 0:0.1:2*pi ;
plot(x,sin(x)) ;
xlabel(\theta = 0 a 2\pi,FontSize,16) ;
ylabel(sin(\theta),Fontsize,16) ;
title(\it{Valor do seno de 0 a 2\pi},FontSize,16) ;
Valor do seno de 0 a 2
1
0.8
0.6
0.4
sin()
0.2
0.2
0.4
0.6
0.8
= 0 a 2
3.3
M
ultiplos Gr
aficos Numa Figura
CAP
ITULO 3. GRAFICOS
2-D, 3-D E IMAGENS
54
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
x = 0:0.1:2*pi ;
a = 2 * sin(x) .* cos(x);
b = sin(x) ./ (cos(x)+eps);
subplot(2,2,1)
plot(x,sin(x)), axis tight, title(sin(x))
subplot(2,2,2)
plot(x,cos(x)), axis tight, title(cos(x))
subplot(2,2,3)
plot(x,a), axis tight, title(2sin(x)cos(x))
subplot(2,2,4)
plot(x,b), axis([0 2*pi -20 20]), title(sin(x)/cos(x))
sin(x)
cos(x)
0.5
0.5
0.5
0.5
2sin(x)cos(x)
20
0.5
10
0.5
10
sin(x)/cos(x)
20
Figura 3.9: M
ultiplos graficos na mesma figura.
Uma manipulac
ao u
til e nao documentada (e apresentada em [3]) do subplot pode ser
usada para colocar um n
umero diferente de subgraficos numa linha. Por exemplo, em vez
de termos 4 subgraficos numa matriz 2-por-2, podemos ter 2 subgraficos na primeira linha e
apenas um subgrafico na segunda linha, que abrange todas as colunas da linha. O seguinte
codigo ilustra essa situac
ao:
>> x = -2*pi:0.1:2*pi ;
>> subplot(2,2,1)
>> plot(x,sin(x)), axis tight, title(sin(x))
c 2005 G. L. TORRES
3.3. MULTIPLOS
GRAFICOS
NUMA FIGURA
>>
>>
>>
>>
55
subplot(2,2,2)
plot(x,cos(x)), axis tight, title(cos(x))
subplot(2,1,2)
plot(x,sin(x).^2./x.^2), axis tight, title(sin(x)^2/x^2)
sin(x)
cos(x)
0.5
0.5
0.5
0.5
sin(x)2/x2
0.8
0.6
0.4
0.2
subplot(2,2,3)
plot(x,sin(x)), axis([-2*pi 2*pi -1 1]), title(sin(x))
subplot(2,2,4)
plot(x,cos(x)), axis([-2*pi 2*pi -1 1]), title(cos(x))
subplot(2,1,1)
plot(x,sin(x).^2./x.^2), axis tight, title(sin(x)^2/x^2)
Para incluir o subgrafico maior na primeira coluna, basta manipular o subplot da forma:
>>
>>
>>
>>
>>
>>
subplot(2,2,2)
plot(x,sin(x)), axis([-2*pi 2*pi -1 1]), title(sin(x))
subplot(2,2,4)
plot(x,cos(x)), axis([-2*pi 2*pi -1 1]), title(cos(x))
subplot(1,2,1)
plot(x,sin(x).^2./x.^2), axis tight, title(sin(x)^2/x^2)
c 2005 G. L. TORRES
CAP
ITULO 3. GRAFICOS
2-D, 3-D E IMAGENS
56
sin(x)
1
0.9
0.5
0.8
0.7
0.5
0.6
0.5
cos(x)
1
0.4
0.3
0.5
0.2
0.1
0.5
semilogx
semilogy
polar
stem
Uma sequencia de dados discretos pode ser plotada utilizando o comando stem.
stem(y) gera um grafico dos pontos de dados em y conectados ao eixo horizontal
por uma linha. O grafico da esquerda da Figura 3.13 exibe o resultado de:
c 2005 G. L. TORRES
3.3. MULTIPLOS
GRAFICOS
NUMA FIGURA
57
90
0.5
120
60
0.375
150
30
0.25
0.125
180
330
210
240
300
270
Figura 3.12:
>> y = randn(50,1);
>> stem(y,:)
compass
fplot
c 2005 G. L. TORRES
CAP
ITULO 3. GRAFICOS
2-D, 3-D E IMAGENS
58
p1,p2,... sao parametros que sao passados para fun, a qual deve ter argumentos de entrada x,p1,p2,....
Os argumentos tol, N e LineSpec pode ser especificados em qualquer ordem, e
uma matriz vazia ([]) pode ser passada para obter o valor default para qualquer
destes argumentos.
Exemplo do comando stem
fplot de f(x)=sin(x)/x
2.5
1.2
1.5
0.8
1
0.6
0.5
0.4
0.5
0.2
1
0
1.5
0.2
2.5
10
15
20
25
30
35
40
45
50
0.4
20
15
10
10
15
20
Figura 3.13:
3.4
Gr
aficos 3-D
A funcao plot3 e a versao 3-D da funcao plot. Os comandos abaixo produzem o grafico 3-D
que e mostrado na Figura 3.14:
>>
>>
>>
>>
>>
>>
>>
>>
t = -5:0.005:5;
x = (1+t.^2).*sin(20*t);
y = (1+t.^2).*cos(20*t);
z = t;
plot3(x,y,z)
grid on
xlabel(x(t)), ylabel(y(t)), zlabel(z(t))
title(Exemplo plot3,FontSize,14)
Observe que utilizamos o comando zlabel analogo de xlabel e ylabel. Observe tambem que
para graficos 3-D o default e box off; digitando-se box on adiciona uma caixa que circunda
o grafico.
O comando ezcontour e um dispositivo simples para plotar curvas de nveis. A chamada
para ezcontour no exemplo seguinte produz os contornos para a funcao
z = sin(3y x2 + 1) + cos(2y 2 2x)
sobre as faixas de valores 2 x 2 e 1 y 1; o resultado pode ser visto na parte
superior da Figura 3.15.
c 2005 G. L. TORRES
3.4. GRAFICOS
3-D
59
z(t)
5
30
20
30
10
20
0
10
0
10
10
20
y(t)
20
30
30
x(t)
subplot(2,1,2)
x = -2:0.01:2; y = -1:0.01:1;
[X,Y] = meshgrid(x,y);
Z = sin(3*Y-X.^2+1)+cos(2*Y.^2-2*X);
contour(x,y,Z,20)
Primeiro, fazemos x = -2:0.01:2 e y = -1:0.01:1 para obtermos pontos igualmente espacados no intervalo indicado. A seguir, fazemos [X,Y] = meshgrid(x,y), o que produz as
matrizes X e Y tais que cada linha de X e uma copia do vetor x e cada coluna de Y e uma
copia do vetor y; a func
ao meshgrid e extremamente u
til na preparacao de dados para muitas
ferramentas MATLAB de plotagem 3-D. A matriz Z e gerada de operacoes matriciais sobre
X e Y, com o resultado de que Z(i,j) armazena o valor da funcao que corresponde a x(j) e
y(i). Esta e exatamente a forma requerida por contour. Digitando-se
>> contour(x,y,Z,20)
instrui MATLAB para considerar Z como as alturas acima do plano xy com o espaco definido
por x e y. O argumento final especifica que 20 nveis de contorno devem ser utilizados; se
este argumento e omitido ent
ao MATLAB escolhe automaticamente o n
umero de nveis de
contorno.
c 2005 G. L. TORRES
CAP
ITULO 3. GRAFICOS
2-D, 3-D E IMAGENS
60
0.5
0.5
1
2
1.5
0.5
0
x
0.5
1.5
1.5
0.5
0.5
1.5
0.5
0.5
1
2
[X,Y] = meshgrid(linspace(-3,3,100),linspace(-1.5,1.5,100));
Z = 4*X.^2 - 2.1*X.^4 + X.^6/3 + X.*Y - 4*Y.^2 + 4*Y.^4;
cvals = [linspace(-2,5,14) linspace(5,10,3)];
[C,h] = contour(X,Y,Z,cvals);
clabel(C,h,cvals([3 5 7 9 13]))
xlabel(x), ylabel(y)
title(Six hump camel back function,FontSize,16)
A func
ao utilizada neste exemplo tem varios pontos de mnimo, maximo e pontos de sela.
A escolha default MATLAB dos nveis de contorno nao produz uma figura interessante neste
exemplo. Por essa razao especificamos os nveis (escolhidos por tentativa e erro) no vetor cvals.
O comando clabel toma como entrada a sada de contour (C contem os dados do contorno e
h a identificac
ao do objeto grafico) e adiciona rotulos aos nveis de contorno especificados no
seu terceiro argumento. Uma forma alternativa de clabel e
clabel(C,h,manual)
a qual permite que voce especifique com o mouse os contornos a serem rotulados: click para
rotular um contorno e tecle <ENTER> para finalizar. O argumento h de clabel pode ser omitido,
c 2005 G. L. TORRES
3.4. GRAFICOS
3-D
61
0.5
0.5
1
2
1.5
0.5
0
x
0.5
1.5
2.3077
1.230
5
538 8
0.11.2
30
0
x
0.1538
15
38
46
07
07
15
2.307
4.47615
4.
2.3
1
1.5
3
2.3
08
0.
1.2308
7
4.4615
0.5
07
2.3
0.5
4.4615
2.3077
1
0.15
385 .23
1.2308
0.15385
4.4615
2.3077
4.4615
1
Figura 3.16:
e neste caso os rotulos sao colocados proximo de cada contorno com um sinal de mais marcando
o contorno.
A func
ao mesh aceita dados numa forma similar a contour e produz superfcies em forma de
tela. Se a func
ao meshc e utilizada no lugar de mesh, entao curvas de contorno sao adicionadas
abaixo da superfcie. O exemplo abaixo, cujo resultado e exibido na Figura 3.17, envolve a
superfcie definida por
z = sin(y 2 + x) cos(y x2 ),
>>
>>
>>
>>
>>
>>
>>
0 x, y .
x = 0:0.1:pi; y = 0:0.1:pi;
[X,Y] = meshgrid(x,y);
Z = sin(Y.^2+X)-cos(Y-X.^2);
subplot(1,2,1)
mesh(Z)
subplot(1,2,2)
meshc(Z)
A func
ao surf difere de mesh pelo fato de que ela produz uma superfcie de preenchimento
solido, e surfc adiciona as curvas de contorno abaixo dela. Um resumo dos comandos para
plotar graficos 3-D e apresentado na tabela abaixo:
c 2005 G. L. TORRES
CAP
ITULO 3. GRAFICOS
2-D, 3-D E IMAGENS
62
1.5
1.5
0.5
0.5
0.5
0.5
1.5
1.5
40
40
30
40
30
20
30
40
30
20
20
10
0
20
10
10
10
0
3.5
Gr
aficos Especializados para Exibic
ao de Dados
DE DADOS
3.5. GRAFICOS
ESPECIALIZADOS PARA EXIBIC
AO
63
O codigo abaixo utiliza as funcoes bar e barh para produzir o grafico da Figura 3.18:
>> Y = [7
6
4
2
9
6
8
5
3
7
5
1
9
4
2];
>> subplot(2,2,1)
>> bar(Y)
>> title(bar(...,grouped))
>> subplot(2,2,2)
>> bar(0:5:20,Y)
>> title(bar(...,grouped))
>> subplot(2,2,3)
>> bar(Y,stacked)
>> title(bar(...,stacked))
>> subplot(2,2,4)
>> barh(Y)
>> title(barh)
Observe que na forma de dois argumentos bar(x,Y) o vetor x prover a locacao das barras no
eixo x.
Para graficos de barras 3-D o arranjo default e detached, com as barras para os elementos
em cada coluna distribudas ao longo do eixo-y. Os argumentos grouped e stacked
fornecem vizoes 3-D dos graficos 2-D de barras com os mesmos argumentos. Com a mesma
matriz de dados Y, o grafico da Figura 3.19 e produzido por
>> subplot(2,2,1)
>> bar3(Y)
>> title(bar3(...,detached))
>> subplot(2,2,2)
>> bar3(Y,grouped)
>> title(bar3(...,grouped))
>> subplot(2,2,3)
>> bar3(Y,stacked)
>> title(bar3(...,stacked))
>> subplot(2,2,4)
>> bar3h(Y)
>> title(bar3h)
Observe que com o arranjo default detached algumas barras estao escondidas atras de outras. Uma soluc
ao satisfat
oria para este problema pode algumas vezes ser obtida rotacionandose o grafico utilizando-se o comando view ou o mouse.
c 2005 G. L. TORRES
CAP
ITULO 3. GRAFICOS
2-D, 3-D E IMAGENS
64
bar(...,grouped)
bar(...,grouped)
10
10
bar(...,stacked)
10
15
20
barh
20
5
15
4
10
3
2
5
1
0
10
randn(state,1)
y = exp(randn(1000,1)/3);
subplot(2,2,1)
hist(y)
title(vetor de dados 1000-por-1, 10 barras)
>> subplot(2,2,2)
>> hist(y,25)
>> title(25 barras)
>> subplot(2,2,3)
>> hist(y,min(y):0.1:max(y))
>> title(barra espessura 0.1)
c 2005 G. L. TORRES
DE DADOS
3.5. GRAFICOS
ESPECIALIZADOS PARA EXIBIC
AO
bar3(...,grouped)
65
bar3(...,grouped)
10
10
5
5
0
0
1
1
2
2
3
3
4
4
5
bar3(...,stacked)
bar3h
20
5
10
4
3
2
1
2
3
10
>>
>>
>>
>>
Y = exp(randn(1000,3)/3);
subplot(2,2,4)
hist(Y)
title(matriz de dados 1000-por-3)
Graficos tipo bolo podem ser produzidos com as funcoes pie e pie3. Eles tomam um vetor
como argumento, x, e para cada elemento x(i) eles desenham uma fatia do bolo com
area
proporcional a x(i). Um segundo argumento explode pode ser dado, o qual e um vetor 0-1
com um 1 em posic
oes que correspondam a fatias que devem ser deslocadas do grafico. Por
default, as fatias sao rotuladas com o percentual da area total que elas ocupam. Os comandos
abaixo produzem o grafico da Figura 3.21:
>> x = [1.5 3.4 4.2];
>> subplot(2,2,1)
>> pie(x)
>> subplot(2,2,2)
>> pie(x,[0 0 1])
c 2005 G. L. TORRES
CAP
ITULO 3. GRAFICOS
2-D, 3-D E IMAGENS
66
25 barras
300
140
250
120
100
200
80
150
60
100
40
50
0
20
0
120
300
100
250
80
200
60
150
40
100
20
50
0
140
67
16%
16%
46%
46%
37%
37%
Fatia 1
46%
16%
Fatia 3
Fatia 2
37%
Figura 3.21: Graficos tipo bolo construdos com os comandos pie e pie3.
>> axis tight
3.6
Para imprimir um grafico, o usuario pode utilizar tanto a opcao Print da barra de menu,
quanto comandos do MATLAB. Para isto, basta utilizar o comando print, cuja forma geral
e:
>> print -tipo_dispositivo -opcoes
O comando print simplesmente envia o grafico corrente para a impressora corrente. O grafico
tambem pode ser impresso num arquivo. Por exemplo, os graficos que sao apresentados neste
documento foram criados atraves do comando
>> print -deps arquivo
O parametro -deps indica que o format do arquivo criado e o Encapsulated Postscript. Varios
formatos de arquivo sao disponveis, como pode ser verificado com o comando:
>> help print
O comando saveas grava a figura num arquivo numa forma tal que a figura possa ser carregada
novamente numa sec
ao de trabalho do MATLAB. Exemplo:
c 2005 G. L. TORRES
CAP
ITULO 3. GRAFICOS
2-D, 3-D E IMAGENS
68
30
25
20
15
10
5
0
10
12
14
16
18
20
22
10
12
14
16
18
20
22
30
25
20
15
10
5
0
5
3.7
Manipulac
ao de Gr
aficos
A manipulac
ao de objetos graficos de uma figura pode ser feita de uma maneira simples e direta
atraves das opc
oes Figure Properties, Axes Properties e Current Object Properties
do menu Edit da janela da figura. Essas opcoes abrem um Editor de Propriedades atraves do
qual o usuario efetua as alterac
oes desejadas.
Alternativamente, podemos manipular as propriedades dos objetos graficos a partir da linha
de comando do MATLAB, utilizando as funcoes get e set. Todos os objetos graficos sao armazenados hierarquicamente. Essa hierarquia pode ser inspecionada atraves das propriedades
Parent e Children. Podemos obter o identificador (handle) de um objeto grafico clicando
no objeto e a seguir usando um dos comandos:
gcf
(get current figure) fornece o identificador da figura corrente (a que voce clicou).
gca
gco
DE GRAFICOS
3.7. MANIPULAC
AO
69
[0 0 1]
normal
-
0.5000
none
6
auto
none
[1x131 double]
[1x131 double]
[1x0 double]
off
[]
[0x1 double]
on
[]
[]
queue
on
on
on
off
on
c 2005 G. L. TORRES
CAP
ITULO 3. GRAFICOS
2-D, 3-D E IMAGENS
70
Tag:
Type:
UIContextMenu:
UserData:
Visible:
Parent:
DisplayName:
XDataMode:
XDataSource:
YDataSource:
ZDataSource:
line
[]
[]
on
150.0012
manual
Por exemplo, observe da lista de propriedades acima que a espessura da linha da curva
plotada e 0.5pt (propriedade LineWidth igual a 0.5000). O comando get(gco) (tendo
apenas o identificador como argumento) lista todas as propriedades relacionadas ao objeto
corrente. Para inspecionar apenas um grupo de propriedades, use a forma geral e
get(gco,NomePropriedade1,...
NomePropriedade2,...
.
.
NomePropriedadeN)
Para ajustar o valor de uma ou mais propriedades do objeto corrente, utilize a funcao set da
forma
set(gco,NomePropriedade1,ValorPropriedade1,...
NomePropriedade2,ValorPropriedade2,...
.
.
NomePropriedadeN,ValorPropriedadeN);
O identificador do monitor do computador (o maior nvel hierarquico) e sempre o valor 0.
Assim, se quisermos inspecionar a resolucao corrente do monitor, basta emitir o comando
>> get(0,ScreenSize)
ans =
1
1024
768
c 2005 G. L. TORRES
Captulo
Programa
c
ao em Matlab
MATLAB oferece quatro processos de decisao ou estruturas de controle de fluxo. Sao eles:
o laco for, o laco while, estruturas if-else-end, e o comando switch. Uma vez que estas
estruturas englobam varios comandos do MATLAB, elas geralmente aparecem em arquivos-M,
em vez de serem digitadas diretamente no prompt do MATLAB.
4.1
Operadores L
ogicos e Relacionais
Descricao
<
>
=
6=
Observe que um u
nico = significa atribuicao e nunca um teste de igualdade no MATLAB.
Comparac
oes entre escalares produzem 1 se a relacao for verdadeira, ou zero se ela for falsa.
Comparac
oes sao definidas tambem entre matrizes de mesma dimensao e entre uma matriz e
um escalar, o resultado sendo uma matriz de 0s e 1s em ambos os casos. A comparacao de
matrizes compara os pares de elementos correspondentes, enquanto que a comparacao de uma
matriz com um escalar compara cada elemento da matriz com o escalar. Exemplos:
>> A = [1 2; 3 4]; B = 2*ones(2);
71
EM MATLAB
CAP
ITULO 4. PROGRAMAC
AO
72
>> A == B
ans =
0
0
1
0
>> A > 2
ans =
0
1
0
1
Os operadores l
ogicos do MATLAB sao:
Operador
&
|
~
xor
all
any
Descric
ao
e l
ogico
ou l
ogico
nao l
ogico
ou exclusivo logico
verdade se todos elementos do vetor sao nao-nulos
verdade se qualquer elemento do vetor e nao-nulo
>> xor(x>0,y>0)
ans =
1
0
>> any(x>0)
ans =
1
>> all(x>0)
ans =
0
O comando find retorna os ndices dos elementos nao-nulos de um vetor. Exemplo:
c 2005 G. L. TORRES
4.1. OPERADORES LOGICOS
E RELACIONAIS
73
-Inf
Com o vetor x definido acima, podemos utilizar find para obter os elementos finitos de x,
>> x(find(isfinite(x)))
ans =
-3
1
0
0
e substituir os componentes negativos de x por zero:
>> x(find(x < 0)) = 0
x =
0
1
0
0
Quando a func
ao find e aplicada sobre uma matriz A, o vetor de ndices obtido corresponde a
matriz tratada como um vetor das colunas empilhadas uma sobre a outra, A(:), e este vetor
pode ser utilizado para reindexar a matriz. No exemplo abaixo utilizamos a funcao find para
zerar os elementos de A que sao menores do que os elementos correspondentes de B:
>> A = [4 2 16; 12 4 3], B = [12 3 1; 10 -1 7]
A =
4
2
16
12
4
3
B =
12
10
3
-1
1
7
>> f = find(A<B)
f =
1
3
6
>> A(f) = 0
A =
0
0
12
4
16
0
c 2005 G. L. TORRES
EM MATLAB
CAP
ITULO 4. PROGRAMAC
AO
74
Um uso alternativo de find para matrizes e [i,j] = find(A), o qual retorna vetores i e j
contento os ndices de linhas e colunas dos elementos nao-nulos.
Os resultados dos operadores e funcoes logicas do MATLAB sao arrays (vetores ou
matrizes) de 0s e 1s que sao exemplos de arrays logicos. Arrays logicos podem ser criados
aplicando-se a func
ao logical a um array numerico. Arrays logicos podem ser utilizados para
indexacoes. Exemplo:
>> y = [1 2 0 -3 0]
y =
1
2
0
-3
>> i1 = logical(y)
i1 =
1
2
0
-3
>> i2 = (y ~= 0)
i2 =
1
1
0
>> i3 = [1 1 0 1 0]
i3 =
1
1
0
>> y(i1)
ans =
1
-3
>> y(i2)
ans =
1
-3
>> isequal(i2,i3)
ans =
1
>> y(i3)
??? Index into matrix is negative or zero.
changes to logical indices.
Observe que mesmo embora i2 tenha os mesmos elementos que i3 (e sao considerados iguais
na comparac
ao), apenas o vetor l
ogico i2 pode ser utilizado como indexador.
O uso de find pode algumas vezes ser evitado quando seu argumento e um array logico.
No exemplo anterior, x(find(isfinite(x))) pode ser substitudo por x(isfinite(x)). No
entanto, e recomendado o uso de find para melhor clareza do codigo.
4.2
Al
em de Vetores e Matrizes
MATLAB dispoe de outras estruturas de dados alem de arrays tipo vetores e matrizes, dentre
elas: celulas (cell), estruturas (struct), classes (class) e objetos, e identificadores de func
oes.
c 2005 G. L. TORRES
4.2. ALEM
DE VETORES E MATRIZES
4.2.1
75
C
elulas
Uma celula e uma unidade multidimensional de dados. Arrays de celulas de diferentes dimensoes, cujos elementos sao c
opias de outros arrays, podem ser criados da seguinte maneira:
utilizando-se o smbolo para construcao de arrays de celulas { };
utilizando-se comandos de atribuicao;
utilizando-se a func
ao cell.
Por exemplo,
>> x = 4;
>> C = { x pascal(x) chol(pascal(x)) }
C =
[4]
[4x4 double]
[4x4 double]
Para acessar o conte
udo de uma celula, use subscritos entre chaves, como segue:
>> C{2}
ans =
1
1
1
1
1
2
3
4
1
3
6
10
1
4
10
20
1
2
3
4
1
3
6
10
1
4
10
20
C{3} =
1
0
0
0
1
1
0
0
1
2
1
0
1
3
3
1
EM MATLAB
CAP
ITULO 4. PROGRAMAC
AO
76
A{1,1}
A{1,2}
A{2,1}
A{2,2}
4.2.2
=
=
=
=
[1 2; 3 4];
Curso MATLAB e SIMULINK;
[1+2j; 3+4j];
1:5;
Estruturas
Estruturas tambem sao arrays multidimensionais de diferentes tipos de dados, mas seus elementos (recipientes de dados chamados campos) sao acessados por designadores de campos
textuais (campos nominados) e nao atraves de operacoes de indexacao como nos arrays de
celulas. Por exemplo, para criar a estrutura barra contendo o n
umero da barra, nome da
barra, tipo da barra e tensao da barra de uma rede eletrica, faca
>> barra.numero
>> barra.nome =
>> barra.tipo =
>> barra.tensao
>> barra
barra =
numero:
nome:
tipo:
tensao:
= 10;
barra 10;
Swing;
= 1.05;
10
barra 10
Swing
1.0500
4.2. ALEM
DE VETORES E MATRIZES
77
20
barra 20
PV
1
Um elemento da estrutura tambem pode ser criado com a funcao struct, como segue:
>> barra(3) = struct(numero,30,nome,barra 30,tipo,PQ,tensao,1.0);
>> barra(3)
ans =
numero:
nome:
tipo:
tensao:
30
barra 30
PQ
1
Para acessar um campo especfico de uma estrutura, incluir um ponto apos o nome da estrutura,
seguido pelo nome do campo. Por exemplo,
>> barra(3).nome
ans =
barra 30
A func
ao fieldnames(barra) retorna o nome de todos os campos da estrutura barra. O
comando rmfield(barra,tipo) remove o campo tipo da estrutura barra. Os comandos
getfield/setfield permitem obter/estabelecer o conte
udo de um campo da estrutura.
No entanto, no contexto de um programa de fluxo de potencia, e prefervel criar os campos
ilustrados acima da forma:
>> barra.numero
>> barra.nome =
>> barra.tipo =
>> barra.tensao
>> barra
barra =
numero:
nome:
tipo:
tensao:
= [10 20 30];
{barra 10; barra 20; barra 30};
{Swing; PV; PQ};
= [1.05 1 1];
[3x1 double]
{3x1 cell}
{3x1 cell}
[1.0500 1 1]
>> barra.numero
ans =
10
20
30
c 2005 G. L. TORRES
EM MATLAB
CAP
ITULO 4. PROGRAMAC
AO
78
4.3
Lacos for
4.4. LAC
OS WHILE
4.4
79
Lacos while
4.5
Estruturas if-else-end
EM MATLAB
CAP
ITULO 4. PROGRAMAC
AO
80
se express
ao-1 e verdade
se express
ao-2 e verdade
se express
ao-3 e verdade
se nenhuma express
ao e verdade
possvel interromper o progresso dos lacos for e while, mas nao o de uma estrutura
E
if-else-end, atraves do comando break. Exemplo:
>> EPS = 1;
>> for num = 1:1000
EPS = EPS / 2;
if (1+EPS) <= 1
EPS = EPS * 2
break
end
end
EPS =
2.2204e-16
c 2005 G. L. TORRES
81
>> num
num =
53
Observe que o comando break forca o laco for terminar prematuramente; neste exemplo,
ele foi executado apenas 53 vezes, apesar do limite 1000.
4.6
Comando switch
4.7
Esta estrutura altera o controle de fluxo se um erro ocorre durante a execucao. A forma geral
da estrutura e como segue:
try
comando1
comando2
.
c 2005 G. L. TORRES
EM MATLAB
CAP
ITULO 4. PROGRAMAC
AO
82
.
comandoN
catch
comando1
comando2
.
.
comandoM
end
Normalmente, apenas os comandos entre try e catch sao executados. Porem, se um erro
ocorre enquanto executa qualquer dos comandos, entao o erro e capturado em lasterr e os
comandos entre catch e end sao executados. Se um erro ocorre entre catch e end, ent
ao a
execucao e terminada, a nao ser que outra sequencia try ... catch tenha sido estabelecida.
A string do erro na falha do bloco try pode ser obtida com a funcao lasterr.
4.8
Arquivos-M
Function contem uma linha de definicao function e pode aceitar argumentos de entrada e
retornar argumentos de sada, e suas variaveis internas sao locais a funcao (a nao
ser que seja declarada global).
Um script permite-nos armazenar uma sequencia de comandos que serao utilizados repetidamente ou que serao necessarios em algum tempo futuro. Exemplo:
%SWEEP
Generates a volume-swept 3D object.
N = 10;
z = linspace(-5,5,N);
radius = sqrt(1+z.^2);
theta = 2*pi*linspace(0,1,N);
X = radius*cos(theta);
Y = radius*sin(theta);
Z = z(:,ones(1,N));
surf(X,Y,Z)
axis equal
O exemplo abaixo mostra uma function stat que calcula a media aritmetica e o desvio padrao
dos elementos de um vetor x:
c 2005 G. L. TORRES
83
4.8.1
Editando Arquivos-M
Para criar e editar arquivos-M temos duas escolhas. Podemos utilizar qualquer editor para
arquivos ASCII, ou podemos utilizar o MATLAB Editor/Debugger que faz parte do software.
No sistema MS Windows este editor e carregado digitando-se edit no prompt do MATLAB,
ou clicando no cone apropriado na barra de ferramentas, ou selecionando as opcoes New ou
Open... do menu File.
O editor do MATLAB possui varias caractersticas interessantes para auxiliar na edic
ao
de arquivos-M, incluindo identac
ao automatica de lacos e estruturas if, sintaxe de cores, e
fechamento de colchetes e quotas . Estas e outras caractersticas podem ser desativadas ou
personalizadas selecionando Preferences no menu File, e na caixa de dialogo que surge, no
item Editor/Debugger, personalize o editor de acordo com as suas preferencias.
4.9
Comandos I/O
EM MATLAB
CAP
ITULO 4. PROGRAMAC
AO
84
Descricao
Leitura apenas.
Escrita apenas (cria o arquivo se necessario).
Agrega (cria o arquivo se necessario).
Leitura e escrita (nao cria o arquivo).
Trunca ou cria para leitura e escrita.
Ler e agrega (cria o arquivo se necessario).
Por default, arquivos sao abertos no modo binario. Para abrir um arquivo no modo texto,
deve-se adicionar t a string de permissao, como em rt e wt+.
O comando
>> st = fclose(arq)
fecha o arquivo que possui o identificador arq atribudo previamente pelo comando fopen.
fclose retorna 0 em st se o fechamento ocorreu com sucesso; caso contrario, retorna 1.
Os comandos para leitura e escrita de dados em arquivos binarios sao fread e fwrite,
respectivamente. A leitura de dados formatados pode ser feita pelo comando fscanf:
>> [A,contador] = fscanf(arq,formato)
ler dados do arquivo identificado por arq, converte os dados de acordo com a string de formato
especificada, e retorna os dados na matriz A. O argumento de sada contador e um argumento
opcional que retorna o n
umero de elementos lidos com sucesso. O argumento formato e uma
string contendo especificac
oes de formato da linguagem C.
No exemplo
>> fprintf(%6.3f\n,pi)
3.142
o caracter % representa o incio de um especificador de formato requerendo uma largura de
campo de 6 dgitos com 3 dgitos apos o ponto decimal e \n representa uma nova linha (sem a
qual sadas subsequentes continuariam sobre a mesma linha). Se a largura do campo especificado nao e larga o suficiente, ent
ao MATLAB expande-a conforme for necessario:
>> fprintf(%6.3f\n,pi^10)
93648.047
A notacao de ponto fixo produzida por f e adequada para exibir inteiros (utilizando %n.0f) e
quando um n
umero fixo de casas decimais e desejado, tal quando exibindo valores monetarios
(utilizando %n.2f). Se f e substituido por e, entao o dgito apos o ponto representa o n
umero
de dgitos significantes para exibir na notacao exponencial:
c 2005 G. L. TORRES
85
>> fprintf(%12.3e\n,pi)
3.142e+000
Quando escolher a largura do campo lembrar que para um n
umero negativo o sinal de menos
ocupa uma posic
ao:
>> fprintf(%5.2f\n%5.2f\n,exp(1),-exp(1))
2.72
-2.72
Um sinal de menos exatamente apos o caracter % resulta no n
umero alinhado a esquerda.
Exemplo:
>> fprintf(%5.0f\n%5.0f\n,9,103)
9
103
>> fprintf(%-5.0f\n%-5.0f\n,9,103)
9
103
O formato string pode conter caracteres a serem literamente impressos, como:
>> m = 5; iter = 11; U = orth(rand(m)) + 1e-10;
>> fprintf(iter = %2.0f\n,iter)
iter = 11
>> fprintf(norm(U*U-I) = %11.4e\n,norm(U*U-eye(m)))
norm(U*U-I) = 8.4618e-010
Observe que, dentro de uma string, representa um u
nico apostrofo. Para imprimir % e \
utilizamos \% e \\ no formato da string.
Outro especificador de formato u
til e g, o qual utiliza e ou f para produzir o resultado
mais curto:
>> fprintf(%g %g\n,exp(1),exp(20))
2.71828 4.85165e+008
Varios outros especificadores de formato e caracteres especiais sao aceitos pelo comando de
sada fprintf, o qual comporta-se similarmente ao comando C/C++ de mesmo nome. Tais
especificac
oes envolvem o caracter %, flags opcionais, largura e campos de precisao opcional,
especificador de subtipo, e os caracteres de conversao da primeira parte da tabela abaixo.
O comando
contador = fprintf(arq,formato,A,...)
formata os dados na matriz A (e quaisquer argumentos adicionais), sob o controle da string
formato especificada, e escreve os dados no arquivo identificado por arq. contador e um
argumento opcional de sada que contem o n
umero de bytes escritos com sucesso.
c 2005 G. L. TORRES
EM MATLAB
CAP
ITULO 4. PROGRAMAC
AO
86
d
i
o
u
x
X
f
e
E
g
G
c
s
\n
\r
\t
\b
\f
\\
\%
notac
ao decimal (sinal)
notac
ao decimal (sinal)
notac
ao octal (sem sinal)
notac
ao decimal (sem sinal)
notac
ao hexadecimal (letras min
usculas)
notac
ao hexadecimal (letras mai
usculas)
notac
ao de ponto-fixo
notac
ao exponencial (e min
usculo)
notac
ao exponencial (E mai
usculo)
forma mais compacta de %e ou %f
forma mais compacta de %E ou %F
Caracter u
nico
String de caracteres
Avanca a impressao para a proxima linha.
Tecla de retorno.
Tabulacao.
Backspace.
Nova pagina.
Imprime a barra invertida \.
Imprime o caracter %.
O comando
>> [S,msgerro] = sprintf(formato,A,...)
formata os dados na parte real do array A (e em qualquer argumento de entrada adicional),
sob controle da string de formato especificada (formato), retornando os dados formatados na
variavel string S. Se ocorre um erro na leitura entao o argumento de sada msgerro retorna uma
mensagem de erro. Caso contrario, msgerro retorna uma string vazia. sprintf e o mesmo que
fprintf exceto que ele retorna os dados numa variavel string MATLAB em vez de escrever
num arquivo ou dispositivo de sada.
Outros comandos de leitura sao fgetl e fgets:
>> linha = fgetl(arq)
retorna a proxima linha do arquivo identificado por arq como uma string MATLAB. O terminador de linha nao e includo. O comando fgets tem a mesma funcao, exceto que o terminador
de linha e includo na string.
Um comando de leitura muito interessante e o textread, o qual ler dados formatados de
um arquivo texto. Os comandos
A
A
A
A
=
=
=
=
textread(nomearquivo)
textread(nomearquivo,,N)
textread(nomearquivo,,parametro,valor,...)
textread(nomearquivo,,N,parametro,valor,...)
=
=
=
=
textread(nomearquivo)
textread(nomearquivo,formato,N)
textread(nomearquivo,formato,parametro,valor,...)
textread(nomearquivo,formato,N,parametro,valor,...)
c 2005 G. L. TORRES
87
leem dados do arquivo nomearquivo retornando nas variaveis A, B, C, etc. O tipo de cada
argumento de retorno e dado pela string formato. O n
umero de argumentos de retorno deve
ser exatamente igual ao n
umero de especificadores de formato na string formato. Se houver
menos campos no arquivo do que na string formato, entao um erro e produzido.
Se N e especificado, ent
ao a string formato e reutilizada N vezes. Se N e igual a -1 (ou nao
e especificado), ent
ao textread ler o arquivo todo. Se pares parametro,valor sao fornecidos,
entao opc
oes configuraveis pelo usuario personalizam o comportamento de textread.
O comando textread funciona identificando e convertendo grupos de caracteres do arquivo.
Um campo de entrada e definido como uma string de caracteres nao espaco branco extendendo
ate o proximo espaco em branco ou caracter de delimitacao ou ate que a largura do campo seja
esgotada. Caracteres delimitadores repetidos sao significantes, enquanto que caracteres espaco
branco repetidos sao considerados como um so.
Se a string formato e vazia, ent
ao textread ler apenas dados numericos. A string formato
pode conter caracteres de espaco (os quais sao ignorados), caracteres ordinarios (os quais sao
esperados igualar o proximo caracter nao-espaco branco na entrada), ou especificacoes de
conversao. As especificac
oes de conversao suportadas sao:
%n
ler um n
umero, seja em ponto flutuante ou inteiro (retorna double array).
%5n ler ate 5 dgitos ou ate o proximo delimitador.
%d
%u
%f
%s
%q
ler uma string delimitada por ", ignorando as aspas (retorna cellstr).
%5q ler ate 5 caracteres nao aspas ou ate espaco branco.
%c
%[...]
ler caracteres iguais aos entre os colchetes ate o primeiro caractere diferente ou espaco
branco (retorna cellstr). Use %[]...] para incluir ].
%5[...] ler ate 5 caracteres.
%[^...] ler caracteres diferentes dos caracteres entre os colchetes ate o primeiro caractere
igual ou espaco branco (retorna cellstr). Use %[^]...] para exlcuir ].
%5[^...] ler ate 5 caracteres.
Utilizar %* em vez de % numa conversao causa textread desprezar o campo na entrada (e
nenhuma sada e criada para essa conversao). O % pode ser seguido por uma largura de campo
opcional para manusear campos com largura fixa. As opcoes configuraveis pelo usuario sao:
bufsize
EM MATLAB
CAP
ITULO 4. PROGRAMAC
AO
88
shell
c
c++
delimiter
emptyvalue
endofline
expchars
headerlines
n
umero de linhas a desprezar no incio do arquivo.
whitespace
Tipo1
Tipo2
Tipo1
12.34
23.54
34.90
45
60
12
Sim
Nao
Nao
4.10
89
Classes e Objetos
Em determinadas aplicac
oes pode ser u
til associar atributos especficos a certas categorias de
dados. Classes sao novos tipos de dados tendo comportamentos especficos para elas definidos
(estruturas e operac
oes) e, portanto, podem ser vistas como tens novos que podem ser tratados
como entidades u
nicas. Um objeto e um exemplar de uma classe particular. Assim, objetos
sao estruturas tipificadas. O rotulo dado `a classe identifica tanto o tipo da estrutura quanto o
nome da func
ao que cria objetos que pertencem `aquela classe.
As possveis classes de objetos sao:
double
array de n
umeros em ponto flutuante precisao dupla.
single
array de n
umeros em ponto flutuante precisao simples.
float
array de n
umeros em ponto flutuante precisao simples ou precisao dupla.
numeric
array de n
umero em ponto flutuante ou inteiro.
logical
array l
ogico.
char
sparse
struct
array de estruturas.
cell
array de celulas.
class nome
java class
4.10.1
Identificadores de Func
oes
Um identificador de func
ao (function handle) e um tipo de dado do MATLAB que contem
informac
ao utilizada para se referenciar uma funcao. Ao se criar um identificador de func
ao,
nele sao armazenados todos os dados acerca da funcao necessarios para que seja executada
posteriormente. Isto capacita ao seguinte:
c 2005 G. L. TORRES
EM MATLAB
CAP
ITULO 4. PROGRAMAC
AO
90
passar informac
ao de acesso a funcao, capturar todos os metodos associados a diferentes
tipos de argumentos da func
ao.
acesso mais amplo a subfunc
oes e funcoes particulares.
maior confiabilidade no c
alculo da funcao.
reduc
ao do n
umero de arquivos que define a funcao.
melhoria do desempenho em operacoes repetidas.
manipulac
ao de identificadores em arrays, estruturas e arrays de celulas.
Um identificador (handle) de func
ao e criado no MATLAB da seguinte forma:
>> identificador = @nome_funcao
O identificador e passado a outras funcoes como um argumento. Por exemplo,
>> x = fminbnd(@humps,0.3,1)
Neste exemplo o handles da func
ao humps foi passado para a funcao fminbnd como um argumento, que o processa usando feval:
>> feval(identificador,arg1,arg2,...,argn)
Isto e similar a uma chamada direta da funcao, porem mais eficiente.
c 2005 G. L. TORRES
Captulo
M
etodos Num
ericos
5.1
An
alise de Dados
8
9
5
8
6
9
9
10
7
7
10
8
7
18
22
19
23
22
19
15
20
18
18
19
17
23
91
CAP
ITULO 5. METODOS
NUMERICOS
92
8
15
8
10
12
9
12
12
10
13
9
10
14
12
13
15
13
12
8
8
9
7
7
8
8
8
9
12
10
6
7
5
7
10
11
12
19
18
20
17
22
19
21
20
17
18
20
22
21
22
18
23
24
22
Cada linha contem as temperaturas mais elevadas nas cidades para um certo dia. Cada coluna
contem as temperaturas elevadas para uma cidade diferente. Podemos utilizar o comando plot
para visualizar os dados:
>>
>>
>>
>>
>>
d = 1:31;
plot(d,temp(:,1),k-,d,temp(:,2),k-o,d,temp(:,3),k-.)
xlabel(Dia do Mes)
ylabel(Temperatura (Graus Celcius))
title(Temperatura Diaria Mais Alta em Tres Cidades)
5.2. POLINOMIOS
93
22
20
18
16
14
12
10
10
15
20
25
30
35
Dia do Mes
Figura 5.1:
A temperatura maxima de cada cidade e o dia (linha da matriz) em que ela ocorreu e dada
por
>> [temp_max,x] = max(temp)
temp_max =
19
12
24
x =
9
23
30
Ou seja, a temperatura maxima na primeira cidade, de 19 graus, ocorreu no dia 9. A temperatura mnima de cada cidade e o dia em que ela ocorreu e dada por
>> [temp_min,n] = min(temp)
temp_min =
8
5
15
n =
8
3
7
O desvio padrao das temperaturas e obtido por
>> desvio_padrao = std(temp)
desvio_padrao =
2.5098
1.7646
2.2322
5.2
Polin
omios
CAP
ITULO 5. METODOS
NUMERICOS
94
e representado por:
>> p = [1 -12 0 25 116]
p =
1
-12
0
25
116
Observe que o termo com coeficiente nulo deve ser incluido. As razes de um polinomio sao
encontradas utilizando-se a func
ao roots:
>> r = roots(p)
r =
11.7473
2.7028
-1.2251 + 1.4672i
-1.2251 - 1.4672i
Uma vez que tanto o polinomio como o conjunto de suas razes sao vetores em MATLAB,
MATLAB adota a convenc
ao de que polinomios sao vetores linha e razes sao vetores colunas.
Conhecidas as razes de um polinomio, e possvel construir o polinomio (determinar os seus
coeficientes) utilizando-se o comando poly:
>> pp = poly(r)
pp =
1.0000 -12.0000
-0.0000
25.0000
116.0000
A multiplicac
ao de polinomios e possvel atraves da funcao conv (que executa a convoluc
ao
de dois vetores). Por exemplo, dados os polinomios
a(x) = x3 + 2x2 + 3x + 4,
b(x) = x3 + 4x2 + 9x + 16,
o produto a(x)b(x) e obtido por:
>> a = [1 2 3 4]; b = [1 4 9 16];
>> c = conv(a,b)
c =
1
6
20
50
75
84
64
12
20
c 2005 G. L. TORRES
DE DADOS
5.3. INTERPOLAC
AO
95
81
96
84
Assim,
e(x) = x6 + 6x5 + 20x4 + 52x3 + 81x2 + 96x + 84.
Em algumas aplicac
oes e necessario dividir um polinomio por outro. No MATLAB, isto e
efetuado pela func
ao deconv. Quando um polinomio c(x) e dividido por um polinomio b(x) ha
um quociente q(x) e um restante r(x), ou seja, c(x) = b(x)q(x)+r(x). Utilizando os polinomios
b(x) e c(x) acima, temos:
>> [q,r] = deconv(c,b)
q =
1
2
3
4
r =
0
0
0
0
150
150
84
A avaliac
ao do polinomio p(x) para valores dados de x e efetuada pela funcao polyval.
Exemplo:
>> x = linspace(-1,3);
>> p = [1 4 -7 -10];
>> v = polyval(p,x);
5.3
Interpolac
ao de Dados
O problema de ajuste de curvas (interpolacao de dados) pode ser abordado atraves da func
ao
m
polyfit. Suponha que o conjunto de dados {xi , yi }i=1 possua valores xi distintos, e que
desejamos encontrar um polinomio p de grau no maximo n tal que p(xi ) yi , i = 1, . . . , m.
A funcao polyfit calcula
o ajuste polinomial de mnimos quadrados, ou seja, determina o
P
2
polinomio p tal que m
(p(x
e da
i ) yi ) seja minimizado. A chamada do comando polyfit
i=1
forma
>> p = polyfit(x,y,n)
c 2005 G. L. TORRES
CAP
ITULO 5. METODOS
NUMERICOS
96
Especificando-se o grau n tal que n m produz uma interpolacao polinomial, ou seja, p(xi ) =
yi , i = 1, . . . , m, o polinomio ajusta os dados de forma exata. Entretanto, polinomios de
grau elevado podem ser extremamente oscilatorios, de forma que valores pequenos de n sao
geralmente preferveis. O exemplo seguinte calcula e plota um ajuste polinomial de mnimos
quadrados de grau 3. O dado compreende a funcao 1/(x + (1 x)2 ) avaliada em 20 pontos
igualmente separados sobre o intervalo [2, 2], gerados por linspace.
>>
>>
>>
>>
x = linspace(-2,2,20);
y = 1./(x+(1-x).^2);
p = polyfit(x,y,3);
plot(x,y,*,x,polyval(p,x),--)
x = linspace(-2,2,20);
y = 1./(x+(1-x).^2);
xx = linspace(-2,2,60);
yy = spline(x,y,xx);
plot(x,y,*,xx,yy,--)
1.4
1.4
1.2
1.2
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2
0
2
1.5
0.5
0.5
1.5
0
2
1.5
0.5
0.5
1.5
Figura 5.2:
MATLAB tem func
oes para interpolacao em uma, duas ou mais dimensoes. A func
ao
interp1 aceita pares de dados x(i),y(i) e um vetor adicional xi. Ela ajusta um interpolador
ao dado e ent
ao retorna os valores do interpolador nos pontos em xi:
>> yi = interp1(x,y,xi)
O vetor x deve ter elementos monotonicamente crescentes. Quatro tipos de interpoladores sao
disponveis, sendo especificado por um quarto parametro, conforme a tabela abaixo:
c 2005 G. L. TORRES
DE DADOS
5.3. INTERPOLAC
AO
nearest
linear
spline
cubic
97
Interpolacao
Interpolacao
Interpolacao
Interpolacao
A interpolac
ao linear poe uma linha entre pares de dados adjacentes, enquanto a interpolacao do vizinho mais proximo reproduz o valor y do proximo ponto x. O seguinte exemplo
ilustra o uso de interp1:
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
O resultado e exibido na Figura 5.3. Este codigo amostra 5 pontos de uma senoide no intervalo
[0, ], calcula interpoladores utilizando tres dos quatro metodos mencionados acima, e avalia
os interpoladores em 40 pontos do intervalo.
MATLAB possui duas func
oes para interpolacao em duas dimensoes: griddata e interp2.
Outras func
oes de interpolac
ao sao interp3, para interpolacao em tres dimensoes, e interpn
para interpolac
ao n-dimensional.
spline
nearest
linear
0.8
0.6
0.4
0.2
pi/4
3pi/8
3pi/4
Figura 5.3:
c 2005 G. L. TORRES
2pi
CAP
ITULO 5. METODOS
NUMERICOS
98
5.4
Equac
oes N
ao-Lineares e Otimizac
ao
MATLAB possui rotinas para determinar um zero de uma funcao de uma variavel (fzero) e
para minimizar func
oes de uma variavel (fminbnd) ou de n variaveis (fminsearch). Em todos
os casos a func
ao deve produzir um valor real e ter argumentos reais. Infelizmente, nao ha um
recurso para resolver diretamente um sistema de n equacoes a n variaveis.
A chamada mais simples de fzero e x = fzero(fun,x0), sendo x0 um escalar, o qual
tenta obter um zero da func
ao fun proximo de x0. Exemplo:
>> fzero(cos(x)-x,0)
Zero found in the interval: [-0.9051, 0.9051].
ans =
0.7391
Mais precisamente, fzero procura por um ponto onde fun muda de sinal. Um busca inicial e
executada partindo de x0 para encontrar um intervalo no qual fun muda sinal. A funcao fun
deve retornar um escalar real quando e passado um argumento escalar real. Falhas de fzero
sao sinalizadas com o retorno de um NaN.
Para forcar fzero a afastar-se de singularidades podemos fornecer um intervalo inicial que
engloba um zero mas nao uma singularidade:
>> [x, fval] = fzero(x-tan(x),[-1 1])
Zero found in the interval: [-1 1].
x =
0
fval =
0
A tolerancia de convergencia e a exibicao do resultado em fzero sao controlados por um terceiro
argumento, a estrutura options, a qual e melhor definida utilizando a funcao optimset.
Apenas dois dos campos da estrutura options sao utilizados: Display especifica o nvel de
informac
oes, com valores off para nenhuma sada, iter para sada a cada iteracao, e final
para sada apenas do resultado final; e TolX e uma tolerancia de convergencia. Exemplos:
>> fzero(fun,x0,optimset(Display,iter))
>> fzero(fun,x0,optimset(TolX,1e-4))
A especificac
ao default e optimset(Display,final,TolX,eps). O algoritmo utilizado
por fzero e uma combinac
ao dos metodos da bi-secao, da secante e da interpolacao quadratica
inversa.
O comando x = fminbnd(fun,x1,x2) tenta obter um mnimo local x da funcao de uma
variavel especificada por fun sobre o intervalo [x1,x2]. Um ponto x e um mnimo local de f
se ele minimiza f num intervalo em torno de x. Em geral, uma funcao pode ter varios mnimos
locais. MATLAB nao possui uma funcao para resolver o difcil problema de determinar o
mnimo global de uma func
ao. Exemplo:
>> [x,fval] = fminbnd(sin(x)-cos(x),-pi,pi)
Optimization terminated successfully:
the current x satisfies the termination criteria using
OPTIONS.TolX of 1.000000e-004
x =
c 2005 G. L. TORRES
5.5. TRANSFORMADA RAPIDA
DE FOURIER
99
-0.7854
fval =
-1.4142
Assim como em fzero, as opc
oes podem ser especificadas utilizando-se a estrutura options via
a funcao optimset. Em adic
ao aos campos utilizados por fzero, fminbnd utiliza MaxFunEvals
(o n
umero maximo de avaliac
oes de funcoes permitidas) e MaxIter (o n
umero maximo de
iteracoes permitido). O default corresponde a
optimset(Display,final,MaxFunEvals,500,MaxIter,500,TolX,1e-4)
O algoritmo utilizado por fminbnd e uma combinacao da busca golden section com uma
interpolac
ao parabolica.
A func
ao fminsearch busca por um mnimo local de uma funcao real de n variaveis reais.
A sintaxe de uso e similar a fminbnd exceto que um vetor inicial em vez de um intervalo e
fornecido: x = fminsearch(fun,x0,options). Os campos em options sao aqueles aceitos
por fminbnd mais TolFun, uma tolerancia de termino sobre o valor da funcao. Dada a func
ao
function f = fquad(x)
f = x(1)^2 - x(2)^2 - x(1)*x(2);
podemos executar
>> [x,fval] = fminsearch(@fquad,ones(2,1))
Optimization terminated successfully:
the current x satisfies the termination criteria using
OPTIONS.TolX of 1.000000e-04
and F(X) satisfies the convergence criteria using
OPTIONS.TolFun of 1.000000e-04
x =
1.0e-04 *
-0.4582
-0.4717
fval =
2.1635e-09
Alternativamente, podemos definir f na lista de argumentos, como segue:
>> [x,fval] = fminsearch(x(1)^2+x(2)^2-x(1)*x(2),ones(2,1))
5.5
Transformada R
apida de Fourier
1 1
1
1
1 2 3
F4 =
= e2i/4 .
1 2 4 6 ,
1 3 6 9
A transformada rapida de Fourier (FFT) e uma maneira mais eficiente de formar y. A func
ao
fft implementa a FFT e e chamada como y = fft(x). A eficiencia de fft depende do valor
c 2005 G. L. TORRES
CAP
ITULO 5. METODOS
NUMERICOS
100
5.6
Integra
c
ao
x log xdx.
O n
umero de avaliac
oes da func
ao e retornado num segundo argumento:
[q,count] = quad(fun,a,b)
c 2005 G. L. TORRES
5.7. EQUAC
OES
DIFERENCIAIS ORDINARIAS
101
6Z 1
(y 2 ex + x cos y)dxdy.
Utilizando a func
ao
function out = fxy(x,y)
out = y^2*epx(x)+x*cos(y);
executamos
>> dblquad(@fxy,0,1,4,6)
ans =
87.2983
5.7
Equac
oes Diferenciais Ordin
arias
y(t0 ) = y0 ,
y(0) = 1,
CAP
ITULO 5. METODOS
NUMERICOS
102
Este codigo produz o grafico da Figura 5.4. Os argumentos de entrada para ode45 sao a
funcao funf, o vetor tspan que especifica o intervalo de tempo, e a condicao inicial yzero.
Dois argumentos de sada t e y sao retornados. Os valores de t sao ordenados no intervalo
[0,3] e y(i) aproxima a soluc
ao no instante t(i).
A soluc
ao para a EDO acima e y(t) = et cos 5t, de forma que podemos verificar o erro
maximo na aproximac
ao ode45 como:
>> max(abs(y - exp(-t).*cos(5*t)))
ans =
2.8991e-04
Se mais do que dois valores de tempo sao especificados, entao ode45 retorna a soluc
ao
nestes tempos apenas, suprimindo quaisquer valores de solucao que podem ter sidos calculados
para instantes intermediarios:
>> tspan2 = 0:4;
>> [t2,y2] = ode45(@funf,tspan2,yzero);
>> disp([t2 y2])
0
1.0000
1.0000
0.1043
2.0000
-0.1136
3.0000
-0.0378
4.0000
0.0075
EDOs de ordem elevada podem ser resolvidas se elas primeiro sao escritas como um sistema
de EDOs de primeira-ordem. Por exemplo, a EDO de segunda-ordem
d2
(t) + sin (t) = 0
dt2
pode ser reescrita como
d
y1 (t) = y2 (t),
dt
d
y2 (t) = sin y1 (t).
dt
5.7. EQUAC
OES
DIFERENCIAIS ORDINARIAS
103
0.8
0.6
y(t)
0.4
0.2
0.2
0.4
0.6
0.5
1.5
t
2.5
Figura 5.4:
function yprime = pend(t,y)
%PEND
Pendulo simples.
%
YPRIME = PEND(T,Y).
yprime = [y(2); -sin(y(1))];
Os seguintes comandos calculam solucoes sobre 0 t 10 para tres condicoes iniciais diferentes:
>>
>>
>>
>>
>>
tspan = [0 10];
yazero = [1; 1]; ybzero = [-5; 2]; yczero = [5; -2];
[ta,ya] = ode45(@pend,tspan,yazero);
[tb,yb] = ode45(@pend,tspan,ybzero);
[tc,yc] = ode45(@pend,tspan,yczero);
A forma geral da chamada para ode45 e como segue:
[t,y] = ode45(@fun,tspan,yzero,options,p1,p2,...);
A lista de argumentos adicionais p1,p2,... representa parametros do problema que, se fornecidos, sao passados adiantes para a funcao fun. O argumento opcional options e uma estrutura
que controla varias caractersticas do solver e pode ser especificada via a funcao odeset. Exemplo:
options = odeset(AbsTol,1e-7,RelTol,1e-4);
c 2005 G. L. TORRES
CAP
ITULO 5. METODOS
NUMERICOS
104
Solver
ode45
ode23
ode113
ode15s
ode23s
ode23t
ode23tb
Tipo do Problema
Nonstiff
Nonstiff
Nonstiff
Stiff
Stiff
Midly stiff
Stiff
Tipo do Algoritmo
Runge-Kutta ordens 4 e 5
Runge-Kutta ordens 2 e 3
Multipassos lineares explcitos, ordens 1 a 13
Multipassos lineares implcitos, ordens 1 a 5
Par Rosenbrock modificado (um passo), ordens 2 e 3
Regra trapezoidal (implcita), ordens 2 e 3
Algoritmo tipo Runge-Kutta implcito, ordens 2 e 3
c 2005 G. L. TORRES
Captulo
Arquivos-MEX
6.1
Introdu
c
ao
Voce pode chamar as suas proprias subrotinas C ou Fortran do MATLAB, como se elas
fossem func
oes intrnsecas do MATLAB. Programas C e Fortran chamaveis pelo MATLAB
sao chamados de arquivos-MEX. Arquivos-MEX sao subrotinas dinamicamente conectadas que
o interpretador MATLAB pode carregar e executar automaticamente.
Os arquivos-MEX tem varias aplicacoes:
Programas ja existentes grandes e complexos em C e Fortran podem ser chamados do
MATLAB sem ter que serem reescritos como arquivos-M.
Gargalos de processamento (geralmente lacos for) que nao executam suficientemente
rapidos em MATLAB podem ser recodificados em C ou Fortran para melhor eficiencia
computacional.
Arquivos-MEX nao sao apropriados para todas as aplicacoes. MATLAB e um sistema de alta
produtividade cuja especialidade e eliminar o tempo na programacao em linguagens compiladas
como C e Fortran. Em geral, a maior parte da programacao deveria ser feita em MATLAB.
Apenas recorra a facilidade MEX se ela for indispensavel para a sua aplicacao.
6.2
Usando Arquivos-MEX
CAP
ITULO 6. ARQUIVOS-MEX
106
Extens
ao Arquivo-MEX
mexhpux
mexglx
mexglxa64
mexmac
mexsol
mexw32
Voce pode chamar um arquivo-MEX da mesma maneira que voce chama uma funcao-M.
Por exemplo, um arquivo-MEX chamado conv2.mex no diretorio MATLAB datafun executa
uma convoluc
ao 2-D de matrizes. O arquivo-M conv2.m contem apenas o texto do help. Se
voce requisitar a func
ao conv2 a partir do MATLAB, entao o MATLAB varre cada diretorio
procurando pela primeira ocorrencia de um arquivo chamado conv2 com a correspondente
extensao da tabela acima ou a extensao .m. Quando ele encontra uma ocorrencia, ele carrega
o arquivo e executa-o. Arquivos-MEX tomam precendencia sobre arquivos-M quando arquivos
com o mesmo nome (exceto a extensao) existem no mesmo diretorio. Entretanto, o texto da
documentac
ao do help ainda e lido do arquivo .m.
6.3
Localizac
ao dos Arquivos-MEX
Para MATLAB ser capaz de executar as suas funcoes C ou MATLAB voce deve colocar
os arquivos-MEX compilados contendo essas funcoes num diretorio no caminho MATLAB,
ou executar MATLAB no diretorio no qual elas residem. Funcoes no diretorio de trabalho
corrente sao encontradas antes de funcoes no caminho MATLAB.
Digite path para ver quais diretorios estao atualmente includos no seu caminho. Voce
pode adicionar novos diretorios ao caminho utilizando a funcao addpath, ou selecionando Set
Path... no menu File para editar o caminho.
6.4
Requisitos do Compilador
A versao do seu MATLAB instalado contem todas as ferramentas que voce precisa para
trabalhar com a API. MATLAB inclui um compilador C para o PC chamado Lcc, mas nao
inclui um compilador Fortran. Se voce escolher utilizar o seu compilador C proprio, ele deve ser
um compilador C ANSI. Mais ainda, se voce esta trabalhando numa plataforma MS Windows,
entao seu compilador deve ser capaz de criar DLLs (Dinamic Linked Librarys) Windows 32-bit.
O MATLAB suporta varios compiladores e prover arquivos pre-configurados, chamados
arquivos de opc
ao, designados especificamente para estes compiladores. O proposito de suportar uma larga colec
ao de compiladores e possibilitar que voce utilize a ferramenta de sua
escolha. Uma lista dos compiladores suportados pelo MATLAB encontra-se no seguinte endereco Internet:
www.mathworks.com/support/tech-notes/1600/1601.shtml
c 2005 G. L. TORRES
NO UNIX
6.5. TESTANDO A CONFIGURAC
AO
6.5
107
Testando a Configurac
ao no UNIX
A maneira mais rapida e efetiva de examinar se o seu sistema esta devidamente configurado para criar arquivos-MEX e tentar o verdadeiro processo. Ha um codigo fonte C de um
exemplo, yprime.c, e seu similar Fortran, yprimef.F e yprimefg.F, includos no diretorio
<matlab>/extern/examples/mex, onde <matlab> representa o diretorio onde o MATLAB
esta instalado no seu sistema.
Para compilar e conectar os arquivos fontes yprime.c ou yprimef.F e yprimefg.F, na
plataforma UNIX, voce deve primeiro copiar os arquivos para um diretorio local, e ent
ao
modificar o diretorio de trabalho do MATLAB para esse diretorio local. Na linha de comando
do MATLAB, digite
>> mex yprime.c
Isto utiliza o compilador do sistema para criar o arquivo-MEX chamado yprime com a extens
ao
apropriada para o seu sistema. Voce pode entao chamar yprime como se ele fosse uma func
aoM, como segue:
>> yprime(1,1:4)
ans =
2.0000
8.9685
4.0000
-1.0947
Para tentar a versao Fortran do mesmo programa com o seu compilador Fortran, na linha de
comando do MATLAB digite
>> mex yprimef.F yprimefg.F
Como alternativa a executar o script mex na linha de comando do MATLAB, voce pode
tambem executar o script na linha de comando do sistema operacional.
6.5.1
Selecionando um Compilador
Para modificar o seu compilador default, voce seleciona um arquivo de opcoes diferente. Isto
pode ser feito a qualquer momento, utilizando o comando:
>> mex -setup
Using the mex -setup command selects an options file that is
placed in ~/.matlab/R14 and used by default for mex. An options
file in the current working directory or specified on the command line
overrides the default options file in ~/.matlab/R14.
Options files control which compiler to use, the compiler and link
command options, and the runtime libraries to link against.
To override the default options file, use the mex -f command
(see mex -help for more information).
The options files available for mex are:
1: /usr/local/matlab704/bin/f90opts.sh :
c 2005 G. L. TORRES
CAP
ITULO 6. ARQUIVOS-MEX
108
6.6
Testando a Configurac
ao no Windows
Antes que voce crie arquivos-MEX na plataforma Windows, voce deve configurar o arquivo
de opcoes default, mexopts.bat, para seu compilador. A opcao -setup prover uma maneira
rapida para voce configurar o arquivo de opcoes default, executando a qualquer momento o
comando
mex -setup
seja na linha de comando do MATLAB ou da linha de comando do DOS.
6.6.1
O Compilador Lcc
MATLAB inclui um compilador C chamado Lcc que voce pode utilizar para criar arquivosMEX a partir de c
odigos em C. Ajuda sobre a utilizacao do compilador Lcc e disponvel num
arquivo help que acompanha o MATLAB. Para ver este arquivo, digite na linha de comando
do MATLAB
>> ! <matlab>\sys\lcc\bin\wedit.hlp
substituindo o termo <matlab> com o caminho para o diretorio no qual MATLAB esta instalado no seu sistema.
c 2005 G. L. TORRES
NO WINDOWS
6.6. TESTANDO A CONFIGURAC
AO
6.6.2
109
Selecionando um Compilador
O script mex utiliza o compilador Lcc por default se voce nao tem um compilador C ou C++
proprio ja instalado no seu sistema e voce tenta compilar um arquivo-MEX C. Se voce deseja
compilar programas Fortran, ent
ao voce deve fornecer seu compilador Fortran proprio.
O script mex utiliza a extens
ao do arquivo para determinar o tipo de compilador a usar
para criar seus arquivos-MEX. Por exemplo,
>> mex test1.f
usaria seu compilador Fortran e
>> mex test2.c
usaria seu compilador C.
Se voce nao tem um compilador proprio C ou C++ no seu sistema, entao o utilitario mex
automaticamente configura-se para o compilador Lcc. Assim, para criar arquivos-MEX nestes
sistemas, voce precisa apenas digitar
>> mex filename.c
Em sistemas onde ha um compilador C, C++ ou Fortran, voce pode selecionar qual compilador
deseja utilizar. Uma vez escolhido seu compilador, este compilador torna-se seu compilador
default e voce nao mais tem que selecionar um compilador quando voce compila arquivos-MEX.
Para selecionar um compilador ou mudar o compilador default existente, utilize o comando
>> mex -setup
Este exemplo mostra o processo de ajustar o compilador default para o compilador Microsoft
Visual C++ Version 6.0:
>> mex -setup
Please choose your compiler for building external interface (MEX) files:
Would you like mex to locate installed compilers [y]/n?
Select a compiler:
[1] Digital Visual Fortran version 6.0 in C:\Program Files\Microsoft Visual Studio
[2] Lcc C version 2.4 in E:\MATLAB7\sys\lcc
[3] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio
[0] None
Compiler: 3
6.6.3
CAP
ITULO 6. ARQUIVOS-MEX
110
4.0000
-1.0947
Para tentar a versao Fortran do programa exemplo com o seu compilador Fortran, comute para
seu compilador Fortran utilizando mex -setup. A seguir, na linha de comando do MATLAB,
digite
>> cd([matlabroot \extern\examples\mex])
>> mex yprimef.f yprimefg.f
Como alternativa a executar o script mex da linha de comando do MATLAB, voce pode
tambem executar o script da linha de comando do sistema.
c 2005 G. L. TORRES
Captulo
Matlab Compiler
7.1
Introdu
c
ao
O MATLAB Compiler Version 4 permite que voce converta automaticamente seus programas MATLAB em aplicac
oes auto-contidas ou em componentes de softwares dinamicamente
conectados (DLLs), e o compartilhamento destes com usuarios finais. Nem os aplicativos nem
os componentes criados com o MATLAB Compiler requerem o MATLAB para execuc
ao.
O compilador MATLAB toma aplicacoes MATLAB (arquivos-M, arquivos-MEX, ou outros
codigos executaveis) como entradas e gera aplicacoes ou componentes de softwares independentes e redistribuveis. As aplicacoes e componentes resultantes sao para uma plataforma
especfica.
O MATLAB Compiler pode gerar os seguintes tipos de aplicacoes ou componentes:
Aplicac
oes stand-alone, ou seja, aplicacoes que executam sem o MATLAB.
Bibliotecas compartilhadas C e C++ (DLLs).
Dispositivos Excel (requer o MATLAB Builder for Excel).
Objetos COM (requer o MATLAB Builder for COM).
O MATLAB Compiler suporta todas as funcionalidade do MATLAB, incluindo objetos.
7.2
O MATLAB Compiler (mcc) gera, a partir de arquivos-M, tanto aplicacoes stand-alone quanto
componentes de programas redistribuveis. O alvo final especfico pode ser qualquer dos tipos
111
CAP
ITULO 7. MATLAB COMPILER
112
de componentes suportados relacionados acima. O MATLAB Compiler gera o arquivo encapsulador (wrapper ) apropriado baseado no alvo desejado. Um arquivo encapsulador contem a
interface requerida entre a aplicac
ao compilada e o tipo executavel suportado.
Arquivos encapsuladores diferem dependendo do ambiente de execucao. Para propiciar a
interface requerida, o encapsulador
Executa inicializac
ao e terminacao especfica do encapsulador.
Define vetores de dados contendo informacao de caminho, chaves criptograficas, e outras
informac
oes necessarias pelo MATLAB Component Runtime (MCR).
Prover o c
odigo necessario para passar chamadas das funcoes de interface para as func
oes
MATLAB na MCR.
Por exemplo, o encapsulador para um executavel stand-alone contem a funcao main. Ja o
encapsulador para uma biblioteca contem os pontos de entrada para cada funcao-M p
ublica.
MATLAB Component Runtime (MCR) e um conjunto de bibliotecas compartilhadas autocontidas que possibilitam a execucao de arquivos-M. A MCR prover suporte completo para
todas as caractersticas da linguagem MATLAB. Uma vez que a tecnologia MCR prover total
suporte para a linguagem MATLAB, incluindo Java, iniciar uma aplicacao compilada toma
aproximadamente a mesma quantidade de tempo que a inicializacao do MATLAB.
O MATLAB Compiler 4 tambem utiliza um arquivo Component Technology File (CTF)
para hospedar o pacote distribuvel. Todos os arquivos-M sao criptografados no arquivo CTF
utilizando o sistema de criptografia Advanced Encryption Standard (AES). Cada aplicacao ou
biblioteca produzida pelo MATLAB Compiler tem um arquivo CTF associado. O arquivo
contem o conte
udo MATLAB executavel (arquivos-M, arquivos-MEX, etc.) associado com o
componente. Quando o arquivo CTF e extrado no sistema do usuario, os arquivos permanecem
criptografados. O arquivo CTF e independente do alvo final (executavel ou biblioteca), mas e
especfico da plataforma. O arquivo encapsulador prover a interface necessaria para o tipo do
alvo.
7.3
Aplicac
oes Stand-Alone
O MATLAB Compiler, quando invocado com a opcao macro -m, toma os arquivos-M de
entrada e produz o arquivo encapsulador adequado requerido para uma aplicacao stand-alone.
Entao, seu compilador C ou C++ compila esse codigo e conecta com o MCR, o qual e um
conjunto de bibliotecas compartilhadas que habilita a execucao de arquivos-M. Por exemplo,
para gerar um executavel stand-alone do arquivo exemplo.m, utilize
>> mcc -m exemplo
7.4
Bibliotecas Compartilhadas
Biblioteca C
Voce pode utilizar a opc
ao -l para criar uma biblioteca compartilhada C de um conjunto de
arquivos-M. Por exemplo,
>> mcc -l arquivo1.m arquivo2.m arquivo3.m
c 2005 G. L. TORRES
113
7.5
7.5.1
Produtos Builder
Matlab Builder for COM
Com o MATLAB Builder for COM, voce pode criar componentes COM que podem ser utilizados em qualquer aplicac
ao que trabalha com objetos COM. O produto MATLAB Builder for
COM permite que voce converta arquivos-M para objetos Component Object Model (COM)
que sao acessveis de Visual Basic, C, C++, MS Excel, ou qualquer outro cliente COM. A
colecao de arquivos-M e traduzida numa u
nica classe COM. O MATLAB Builder for COM
suporta m
ultiplas classes por componente.
7.5.2
Com o MATLAB Builder for Excel, voce pode automaticamente gerar um arquivo Visual
Basic Application (.bas) e um DLL plug-in do seu modelo MATLAB que pode ser importado
no Excel com uma func
ao executavel. Usuarios podem ent
ao chamar ou utilizar seus algoritmos
baseados no MATLAB da mesma maneira que outros aplicativos Excel.
O MATLAB Builder for Excel compila arquivos-M em um objeto COM que pode ser
utilizado como um plug-in Excel. A colecao de arquivos-M e traduzida num u
nico plug-in
Excel. O MATLAB Builder for Excel suporta uma classe por componente.
O MATLAB Builder for COM e MATLAB Builder for Excel sao disponveis apenas na
plataforma Windows.
7.6
CAP
ITULO 7. MATLAB COMPILER
114
<matlabroot>/extern/examples/compiler
para o seu diretorio.
Para compilar o c
odigo-M, use
>> mcc -mv magicsquare.m
A opc
ao -m informa o MATLAB Compiler (mcc) para gerar uma aplicacao stand-alone.
A opc
ao -v exibe os passos de compilacao atraves do processo e ajuda identificar outras
informac
oes u
teis tais como qual compilador e usado e quais variaveis ambientes sao
referenciadas.
O comando cria a aplicac
ao stand-alone chamada magicsquare e os arquivos adicionais.
A plataforma Windows agrega a extensao .exe ao nome.
Testando a Aplicac
ao
Estes passos testam a sua aplicac
ao na maquina onde foi desenvolvida:
Atualize o caminho. No Windows adicione o seguinte diretorio ao caminho:
<matlabroot>\bin\win32
No Linux, adicione os seguintes diretorios especficos da plataforma para o caminho da
biblioteca dinamica:
setenv LD_LIBRARY_PATH
<matlabroot>/sys/os/glnx86:
<matlabroot>/bin/glnx86:
<matlabroot>/sys/java/jre/glnx86/jre1.5.0/lib/i386/native_threads:
<matlabroot>/sys/java/jre/glnx86/jre1.5.0/lib/i386/client:
<matlabroot>/sys/java/jre/glnx86/jre1.5.0/lib/i386:
setenv XAPPLRESDIR <matlabroot>/X11/app-defaults
Execute a aplicac
ao stand-alone da linha de comando do sistema digitando o nome da
aplicac
ao:
magicsquare.exe 4
magicsquare 4
(No Windows)
(No UNIX)
2
11
7
14
3
10
6
15
13
8
12
1
c 2005 G. L. TORRES
7.7
115
7.8
% Windows
% Linux
Testando Componentes na M
aquina de Desenvolvimento
Para testar os componentes na propria maquina onde foram desenvolvidos, certifique-se de que
voce tem seu caminho ajustado apropriadamente. No Windows, adicione o seguinte diretorio
para a variavel PATH do seu sistema
<matlabroot>\bin\win32
No UNIX, adicione os seguintes diretorios especficos de plataforma para o seu caminho de
biblioteca dinamica:
setenv LD_LIBRARY_PATH
<matlabroot>/sys/os/glnx86:
<matlabroot>/bin/glnx86:
<matlabroot>/sys/java/jre/glnx86/jre1.5.0/lib/i386/native_threads:
<matlabroot>/sys/java/jre/glnx86/jre1.5.0/lib/i386/client:
<matlabroot>/sys/java/jre/glnx86/jre1.5.0/lib/i386:
setenv XAPPLRESDIR <matlabroot>/X11/app-defaults
Voce pode ent
ao executar as aplicacoes compiladas na sua maquina de desenvolvimento para
testa-las.
7.9
Para preparar o seu componente para uma maquina alvo que nao tem a mesma versao do
MATLAB instalada na maquina de desenvolvimento (ou qualquer versao de MATLAB),
voce precisa empacotar os componentes e configurar as maquinas alvos como segue:
Windows
O componente executavel ou a biblioteca compartilhada.
O arquivo CTF que o compilador cria para o componente (<nome_componente>.ctf).
O arquivo MCRInstaller.exe que esta no diretorio
<matlabroot>\toolbox\compiler\deploy\win32.
c 2005 G. L. TORRES
CAP
ITULO 7. MATLAB COMPILER
116
7.10. LIMITAC
OES
E RESTRIC
OES
7.10
Limitac
oes e Restric
oes
7.10.1
117
O MATLAB Compiler suporta toda a linguagem MATLAB e quase todos os toolboxes MATLAB. Entretanto, algumas funcionalidades limitadas do MATLAB e toolboxes nao sao licenciadas para compilac
ao.
Muitas das GUIs pre-existentes includas no MATLAB e seus toolboxes nao compilam.
Funcionalidades que nao podem ser chamadas diretamente da linha de comando nao
compilam.
Alguns toolboxes, tal como o Symbolic Math Toolbox, nao compilam.
7.10.2
C
odigo Matlab
7.10.3
Aplicac
oes Stand-Alone
Ha um conjunto de func
oes que nao e suportado no modo stand-alone. Estas funcoes caem em
tres categorias:
Func
oes que imprimem ou reportam codigo MATLAB de uma funcao, por exemplo, a
func
ao help do MATLAB, nao funcionara.
Func
oes Simulink, em geral, nao funcionarao.
Func
oes que requerem uma linha de comando, por exemplo, a funcao lookfor MATLAB, nao funcionara.
Os comandos clc, home, e savepath nada farao no modo independente.
Em adicao, ha func
oes que sao nao-distribuveis devido a restricoes de licensa.
add_block
dbdown
dbtype
fields
linmod
new_system
sim
7.11
add_line
dbquit
dbup
get_param
mislocked
open_system
simget
applescript
dbstack
delete_block
help
mlock
pack
sldebug
close_system
dbstatus
delete_line
home
mlock
publish
type
dbclear
dbstep
echo
inmem
more
rehash
dbcont
dbstop
edit
keyboard
munlock
set_param
Compiladores Suportados
CAP
ITULO 7. MATLAB COMPILER
118
7.12
O Processo de Compilac
ao
O processo de criac
ao de componentes de softwares com o MATLAB Compiler e completamente automatico. Por exemplo, para criar uma aplicacao stand-alone, basta voce fornecer
a lista de arquivos-M que constituem a aplicacao. O compilador entao executa as seguintes
operacoes:
Analise de dependencias.
Gerac
ao de c
odigo.
Criac
ao de arquivo.
Compilac
ao.
Linkagem.
An
alise de depend
encias
O primeiro passo determina todas as funcoes nas quais os arquivos-M, os arquivos-MEX e os
arquivos-P (pcode aplicado sobre arquivos-M) dependem. Esta lista inclue nao somente os
arquivos dados como tambem os arquivos que eles chamam, e assim por diante.
Gera
c
ao do c
odigo encapsulador (wrapper)
Este passo gera todo o c
odigo necessario para o componente alvo, incluindo
O c
odigo interface C/C++ para aquelas funcoes-M supridas na linha de comando. Para
bibliotecas e componentes, este arquivo inclue todas as funcoes interface geradas.
Um arquivo de dados de componente que contem informacoes necessarias para executar
o c
odigo-M em tempo de execucao. Estes dados incluem informacao do caminho e chaves
de criptografia necessarias para carregar o codigo-M armazenado nos componentes do
arquivo CTF.
c 2005 G. L. TORRES
119
Cria
c
ao de arquivo
A lista de arquivos executaveis MATLAB (arquivos-M e arquivos-MEX) criados durante a
analise de dependencias e utilizada para criar um arquivo CTF que contem os arquivos necessitados pelo componente para executar apropriadamente no tempo de execucao. Os arquivos
sao criptografados e comprimidos num u
nico arquivo para distribuicao.
Compila
c
ao C/C++
Este passo compila os arquivos C/C++ gerados do codigo wrapper em codigo objeto. Para
alvos que suportam a inclusao de codigo C/C++ suprido pelo usuario na linha de comando
mcc, este c
odigo e tambem compilado neste estagio.
Linkagem
O passo final conecta (linka) os arquivos objetos gerados com as bibliotecas MATLAB necessarias para criar o componente finalizado. Os passos de compilacao C/C++ e conexao usam
o utilitario mbuild que e includo com o compilador MATLAB.
7.13
7.13.1
Execut
avel Stand-Alone
Neste exemplo, o MATLAB Compiler toma os arquivos foo.m e bar.m como entrada e gera
um executavel stand-alone chamado foo:
>> mcc -m foo.m bar.m
foo main.c
foo.ctf
foo
CAP
ITULO 7. MATLAB COMPILER
120
7.13.2
Biblioteca Compartilh
avel C
Neste exemplo, o MATLAB Compiler toma os arquivos foo.m e bar.m como entrada e gera
uma biblioteca compartilhada C chamada libfoo:
>> mcc -W lib:libfoo -T link:lib foo.m bar.m
libfoo.c
libfoo.h
libfoo mcc component data.c Arquivo fonte C contendo os dados necessitados pelo MCR
para inicializar e utilizar a biblioteca. Estes dados incluem
informacao do caminho, chaves de criptografia, e outra inicializacao para o MCR.
libfoo.exports
libfoo.ctf
libfoo
7.13.3
Biblioteca Compartilh
avel C++
Neste exemplo, o MATLAB Compiler toma os arquivos foo.m e bar.m como entrada e gera
uma biblioteca compartilhada C++ chamada libfoo:
>> mcc -W cpplib:libfoo -T link:lib foo.m bar.m
libfoo.cpp
libfoo.h
libfoo mcc component data.cpp Arquivo fonte C++ contendo os dados necessitados pelo
MCR para inicializar e usar a biblioteca. Estes dados incluem informacao do caminho, chaves de criptografia, e
outra inicializacao para o MCR.
libfoo.exports
7.14. PROCESSO DE DISTRIBUIC
AO
121
libfoo.ctf
O arquivo CTF. Este arquivo contem um arquivo compactado e criptografado dos arquivos-M que constituem a
biblioteca (foo.m e bar.m). Este arquivo tambem contem
outros arquivos chamados pelos dois arquivos arquivos-M
principais bem como qualquer outro conte
udo executavel
e arquivos de dados necessarios em tempo de execucao.
libfoo
7.14
Processo de Distribuic
ao
Apos criar seu componente com o MATLAB Compiler voce pode distribu-lo para terceiros de
forma que eles possam usa-lo nas suas maquinas, independente de terem o MATLAB instalado
ou nao. O processo de distribuic
ao requer que voce:
Junte num pacote os componentes necessarios dependendo do tipo de aplicacao gerada.
Distribua-os para os usuarios finais.
Faca com que os usuarios finais instalem nas suas maquinas o pacote distribudo. Durante
esta fase do processo de instalacao, cada usuario executa o MCRInstaller uma vez na
sua maquina alvo, ou seja, a maquina onde ele ira executar a aplicacao ou biblioteca.
No Windows, MCRInstaller e um executavel auto-extravel que instala os componentes
necessarios para executar a aplicacao. No UNIX, MCRInstaller e um arquivo ZIP.
7.14.1
Portando o C
odigo Gerado para uma Plataforma Diferente
Uma vez que formatos binarios sao diferentes em cada plataforma, os varios componentes
gerados pelo MATLAB Compiler nao podem ser movidos de uma plataforma para outra da
forma que se encontra. Voce pode distribuir uma aplicacao gerada no MATLAB Compiler
para qualquer maquina alvo que tem o mesmo sistema operacional que a maquina onde a
aplicacao foi compilada.
Para distribuir uma aplicac
ao para uma maquina cujo sistema operacional nao e o mesmo da
maquina usada no desenvolvimento da aplicacao requer uma recompilacao, ou seja, voce deve
recompilar a aplicac
ao na plataforma alvo desejada. Por exemplo, se voce deseja distribuir
a aplicac
ao que foi desenvolvida numa maquina Windows para uma maquina Linux, ent
ao
voce deve usar o MATLAB Compiler numa maquina Linux e reconstruir por completo a
aplicacao. Consequentemente voce deve ter uma licensa do MATLAB Compiler valida para
cada plataforma.
7.14.2
Antes que um usuario possa executar na sua maquina os componentes que foram gerados no
MATLAB Compiler, ele precisa instalar o MCR, se este ja nao estiver presente. Embora os
usuarios precisam instalar o MCR nas suas maquinas apenas uma vez, o MCR e especfico
da versao do MATLAB Compiler utilizada. Assim, os usuarios finais devem ter a versao
apropriada do MCR instalada nas suas maquinas.
Para preparar uma maquina para receber uma distribuicao para a plataforma Windows, o
usuario precisa apenas instalar o MCR, executando o arquivo MCRInstaller.exe. O usuario
c 2005 G. L. TORRES
CAP
ITULO 7. MATLAB COMPILER
122
deve ter privilegios administrativos para instalar o MCR na maquina, uma vez que a instalac
ao
faz modificac
oes do registro do sistema e do caminho do sistema. Entretanto, a execucao do
aplicativo apos o MCR ter sido apropriadamente ajustado na maquina alvo requer apenas
privilegios a nvel de usuario.
No caso da plataforma UNIX, os usuarios UNIX devem:
Instalar o MCR.
Ajustar o caminho apropriadamente.
Ajustar as variaveis do ambiente necessarias.
Usuarios UNIX devem executar o MCRInstaller, o qual e um arquivo ZIP, e entao manualmente ajustar o caminho e variaveis ambientes como requerido. Lembrar que o arquivo
MCRInstaller.zip e gerado usando a funcao buildmcr no MATLAB. Nao e preciso instalar
o MCR na maquina que tem instalada a mesma versao do MATLAB que foi usada para criar
o componente distribuido.
O MCRInstaller suporta a instalacao de m
ultiplas versoes do MCR numa m
aquina alvo.
Isto permite que aplicac
oes compiladas com versoes diferentes do MCR executem lado a lado
na mesma maquina.
Os usuarios devem sempre executar suas aplicacoes compiladas com a versao correspondente
do MCR. Se voce atualizar o MATLAB Compiler na sua maquina de desenvolvimento e
distribuir a aplicac
ao compilada para seus usuarios, voce devera tambem distribuir a versao
correspondente do MCR. Os usuarios devem atualizar suas MCRs para a nova versao.
7.14.3
7.15
123
mcc e o comando MATLAB que invoca o MATLAB Compiler. Voce pode invocar o comando
mcc seja da linha de comando do MATLAB ou da linha de comando do sistema operacional.
Voce pode especificar uma ou mais flags de opcoes do MATLAB Compiler para o mcc. Voce
pode listar as opc
oes separadamente, como no exemplo
>> mcc -m -g minhafuncao
Macros sao opc
oes do MATLAB Compiler supridas pela MathWorks que simplificam as tarefas
de compilac
ao mais comuns. Em vez de agrupar manualmente varias opcoes juntas para
executar um tipo particular de compilacao, voce pode utilizar uma simples opcao macro.
Voce pode agrupar opc
oes que nao tomam argumentos precedendo a lista de flags com um
hfen, como no exemplo
>> mcc -mg minhafuncao
Opcoes que tomam argumentos nao podem ser combinadas a menos que voce coloque a opc
ao
com seus argumentos por u
ltimo na lista, como no exemplo
>> mcc -v -W main -T link:exe minhafuncao
>> mcc -vW main -T link:exe minhafuncao
Ja o formato abaixo nao e valido
>> mcc -Wv main -T link:exe minhafuncao
Em casos onde voce tem mais de uma opcao que tem argumentos, voce pode incluir apenas
uma dessas opc
oes numa lista combinada e essa opcao deve ser a u
ltima. Voce pode colocar
m
ultiplas listas combinadas na linha de comando do mcc.
7.15.1
Arquivos wrapper encapsulam os arquivos-M da sua aplicacao com uma interface que abilita os
arquivos-M a operarem num dado ambiente. Para prover a interface requerida, o encapsulador
Executa inicializac
ao e terminacao especficas do encapsulador.
Prover o despacho de chamadas de funcoes para o MCR.
Para especificar o tipo de encapsulador a gerar, use a sintaxe
-W <tipo>
A opcao -W main gera encapsuladores que sao adequados para construir aplicacoes stand-alone.
A opc
ao -l, ou sua equivalente -W lib:libname, produz um arquivo encapsulador de
biblioteca C. Esta opc
ao produz uma biblioteca compartilhada de um conjunto arbitrario de
arquivos-M. O arquivo header gerado contem uma declaracao de funcao C para cada uma
das func
oes-M compiladas. A lista de exportacao contem o conjunto de smbolos que sao
exportados da biblioteca C compartilhada.
A opc
ao -W cpplib:libname produz o arquivo encapsulador de uma biblioteca C++. Esta
opcao permite a inclusao de um conjunto arbitrario de arquivos-M numa biblioteca. O arquivo
header gerado contem todos os pontos de entrada para todas as funcoes-M compiladas.
c 2005 G. L. TORRES
CAP
ITULO 7. MATLAB COMPILER
124
7.15.2
Chamando Func
oes Matlab do C ou C++
Para habilitar um programa C ou C++ a chamar uma funcao MATLAB diretamente, voce
deve escrever um encapsulador arquivo-M em torno de cada funcao MATLAB que voce deseja
acessar de fora do MATLAB. Isto e necessario porque nao ha qualquer interface C para func
oes
MATLAB. Por exemplo, para usar a funcao magic numa aplicacao independente, voce pode
utilizar este arquivo-M:
function magicsquare(n)
%MAGICSQUARE generates a magic square matrix of the size specified
%
by the input parameter n.
% Copyright 2003 The MathWorks, Inc.
if (ischar(n))
n=str2num(n);
end
magic(n)
7.15.3
7.15.4
Para utilizar um arquivo-MAT numa aplicacao, use a opcao -a do MATLAB Compiler para
incluir o arquivo-MAT no arquivo CTF.
c 2005 G. L. TORRES
7.15.5
125
Executando as Aplicac
oes
Se voce utiliza um caminho relativo para iniciar uma aplicacao de um diretorio que nao e o
seu diretorio de trabalho, ent
ao pode haver falha. Por exemplo, se voce executa sua aplicac
ao
usando
..\myProgram.exe
voce pode ver o erro
Cannot find the directory containing the myProgram component,
which is required by this application. Make sure the directory
containing myProgram.ctf is on your dynamic load library path
(PATH on Windows, or LD_LIBRARY_PATH on Linux, for example), or
your application search path (PATH on both Windows and Linux).
Error initializing CTF Archive.
Usar um caminho relativo nao e suportado diretamente. Quando voce inicia um programa de
um diretorio usando um caminho relativo, seu diretorio de trabalho atual nao e o diretorio do
executavel. O diretorio de trabalho deve ser o mesmo que o do executavel para que o arquivo
CTF seja encontrado ou senao o diretorio contendo seu arquivo CTF deve estar no caminho
do sistema. Portanto, voce deve iniciar sua aplicacao do seu diretorio ou senao modificar o
caminho do seu sistema.
7.15.6
Para passar argumentos de entrada para um codigo gerado pelo MATLAB Compiler, voce
passa-os exatamente como numa aplicacao tipo console. Por exemplo, para passar um arquivo
chamado arquivo para a func
ao compilada chamada programa, use
programa arquivo
Para passar n
umeros ou letras (por exemplo, 1, 2, e 3), use
programa 1 2 3
Nao separe os argumentos com vrgulas. Para passar matrizes como entrada, use
programa "[1 2 3]" "[4 5 6]"
Voce deve utilizar aspas em torno de um argumento de entrada se ha espaco nele. A sintaxe
de chamada e similar ao comando DOS.
Ha varias aspectos que voce deve ter em mente para o seu arquivo-M antes que voce o
compile:
Os argumentos de entrada que voce passa para o seu executavel da linha de comando do
sistema sao considerados como string. Se, no seu codigo-M antes da compilacao, voce
esta esperando os dados em formato diferente, digamos double, voce precisara converter
a entrada string para o formato requerido. Por exemplo, voce pode usar str2num para
converter a entrada string para dado numerico. Voce pode determinar em tempo-deexecuc
ao se e para fazer isso ou nao usando a funcao isdeployed. Se o seu arquivo-M
espera entradas numericas no MATLAB, o codigo pode verificar se esta sendo executado
como uma aplicac
ao stand-alone. Por exemplo,
c 2005 G. L. TORRES
CAP
ITULO 7. MATLAB COMPILER
126
c 2005 G. L. TORRES
Ap
endice
C
alculo de Fluxo de Pot
encia
A.1
Introdu
c
ao
APENDICE
A. CALCULO
DE FLUXO DE POTENCIA
128
A.2
Formulac
ao B
asica
As equac
oes basicas do problema de fluxo de potencia sao obtidas, considerando-se a analise
nodal, impondo-se a conservac
ao das potencias ativa e reativa em cada barra do sistema, como
uma consequencia das leis de Kirchhoff. Da analise nodal, temos a equacao de rede:
b
b b
Y11 Yb12 Yb1n
V1
I1
Yb21 Yb22 Yb2n Vb2 Ib2
.
. =.
..
..
..
..
.
.
. .. ..
Ybn1 Ybn2 Ybnn
Vbn
Ibn
ou simplesmente
Yb Vb = Ib
X 1
zbij
jI
1
Ybij =
zbij
onde zbij e a impedancia do elemento ligando as barras i e j, e I e o conjunto dos ndices das
barras diretamente conectadas a barra i, incluindo a propria barra i. Identificando-se as partes
real e imaginaria da injec
ao de potencia complexa na barra i:
X
Ybij Vbj
(A.1)
Sbi = Vbi Ibi = Vbi
jI
obtemos as injec
oes de potencia ativa e reativa na barra, como
X
Vj (Gij cos(i j ) + Bij sin(i j ))
Pi = Vi
(A.2)
(A.3)
jI
Q i = Vi
X
jI
D
def
Qi (V, ) = QG
i Qi = Qi
onde PiG e QG
ao potencias geradas e PiD e QD
ao potencias de cargas (demandas).
i s
i s
A definic
ao completa dos fluxos de potencia atraves dos elementos do sistema requer o
conhecimento de quatro variaveis em cada barra do sistema. Duas delas sao conhecidas de
c 2005 G. L. TORRES
PELOS METODOS
A.3. SOLUC
AO
DE GAUSS E DE GAUSS-SEIDEL
129
antemao, e o objetivo do c
alculo de fluxo de potencia e determinar as duas variaveis restantes.
Dependendo de quais sao as duas variaveis conhecidas, geralmente classificamos as barras do
sistema em tres tipos diferentes1 , a saber:
PQ
dados Pi e Qi e desconhecidos Vi e i .
PV
dados Pi e Vi e desconhecidos Qi e i .
dados Vi e i e desconhecidos Pi e Qi .
(A.5)
jI
(A.7)
jI
a potencia ativa injetada na barra de referencia, considerada aqui, sem perda de generalidade,
como sendo a Barra 1. As Equacoes (A.6) e (A.7) sao avaliadas por aplicacao direta das
tensoes e dos
angulos calculados. As potencias reativas calculadas em (A.6) sao comparadas
com limites de operac
ao que sao impostos. Se o limite de potencia reativa em uma barra tipo
PV esta sendo violado, esta barra passa a ser considerada como uma barra tipo PQ, com o
valor de potencia reativa especificado sendo o do limite violado.
A.3
Soluc
ao pelos M
etodos de Gauss e de Gauss-Seidel
Yij Vj
Vi =
Ybii Vb
i
k=1,k6=i
=b
hi (Vb1 , Vb2 , . . . , Vbn )
Alguns controles sobre a maneira como o sistema opera pode requerer outras definic
oes de tipos de barras
c 2005 G. L. TORRES
APENDICE
A. CALCULO
DE FLUXO DE POTENCIA
130
b) Calcule
b) Calcule
k+1 b k
Vbik+1 = Vbik (Vb k b
hi (Vb1k+1 , . . . , Vbi1
, Vi , . . . , Vbnk ))
A.4
O M
etodo de Newton-Raphson
O metodo de Newton-Raphson opera sobre as equacoes de balanco das potencias ativa e reativa
nas barras, em vez da equac
ao da potencia complexa. No problema de fluxo de carga, desejamos
resolver as equac
oes nao-lineares (A.4) e (A.5) para as magnitudes das tensoes das barras PQ
e para os
angulos de fase das barras PQ e PV. Esse problema consiste em determinar as razes
c 2005 G. L. TORRES
A.4. O METODO
DE NEWTON-RAPHSON
131
das equac
oes nao-lineares
def
P
P
P (V, )
0
=
=
.
def
Q
Q
Q(V, )
0
Na iterac
ao k, o metodo de Newton-Raphson requer a solucao do sistema linear:
Hk Nk k
Pk
=
Mk Lk Vk
Qk
(A.8)
(A.9)
onde
k
Hij
Nijk =
Mijk =
Lkij =
(
Vik Vjk (Gij sin(ik jk ) Bij cos(ik jk ))
se i 6= j
Pi
=
j (Vk ,k )
Qki (Vik )2 Bii
se i = j
(
Vik (Gij cos(ik jk ) + Bij sin(ik jk ))
se i 6= j
Pi
=
k
k
k
Vj (V~k ,~k )
Pi /Vi + Vi Gii
se i = j
(
Vik Vjk (Gij cos(ik jk ) + Bij sin(ik jk ))
se i 6= j
Qi
=
k
k
2
j (V~k ,~k )
Pi (Vi ) Gii
se i = j
(
Vik (Gij sin(ik jk ) Bij cos(ik jk ))
se i 6= j
Qi
=
k
k
k
Vj (Vk ,k )
Qi /Vi Vi Bii
se i = j.
a) Faca uma escolha inicial das magnitudes e dos angulos de fase das tensoes
de barra (tipicamente, Vi0 = 1 e i0 = 0.)
b) Calcule os resduos de potencia ativa nas barras PQ e PV, e de potencia
reativa nas barras PQ:
def
Pk
P
P (Vk , k )
=
Qdef
Qk
Q(Vk , k )
Pare o processo iterativo se o teste abaixo e satisfeito:
max |Pik | ,
max |Qki | .
H k Nk
Mk Lk
k
Pk
=
Vk
Qk
Vk+1 = Vk + Vk .
(A.10)
(A.11)
(A.12)
(A.13)
APENDICE
A. CALCULO
DE FLUXO DE POTENCIA
132
Uma vez conhecidos as magnitudes e os angulos de fase das tensoes, os fluxos de potencia
ativa e reativa nos elementos de transmissao podem ser determinados por:
Pij = gij Vi2 Vi Vj (gij cos(i j ) bij sin(i j ))
Qij = (bij +
2
bsh
ij )Vi
(A.14)
(A.15)
Qij =
(A.16)
(A.17)
no caso de transformadores.
A.5
A distribuic
ao do c
odigo MATLAB deste programa e restrita, podendo uma copia ser obtida
ou nao mediante contato direto com o autor (Prof. Geraldo L. Torres, gltorres@ufpe.br).
c 2005 G. L. TORRES
Refer
encias
133