ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB

®
PROF. M. Sc. JOSÉ DONIZETTI DE LIMA
SUMÁRIO
CAPÍTULO I
1 INTRODUÇÃO ................................................................................................ 3
1.1 Breve Histórico e Visão Geral do Software MATLAB ............................. 3
CAPÍTULO II
2 CONCEITOS BÁSICOS ................................................................................. 5
2.1 Controle da janela de comandos ............................................................... 5
2.2 Variáveis ...................................................................................................... 5
2.3 Caracteres especiais .................................................................................. 6
2.4 Operadores aritméticos .............................................................................. 6
2.5 Operadores condicionais ........................................................................... 6
2.6 Operadores lógicos .................................................................................... 6
CAPÍTULO III
3 FUNÇÕES ELEMENTARES DO MATLAB ..................................................... 7
3.1 Funções Científicas ..................................................................................... 7
3.2 Formatos Numéricos ................................................................................. 8
3.3 Entrada de Matrizes .................................................................................... 8
3.4 Polinômios ................................................................................................... 10
3.5 Sistemas de Equações Lineares ............................................................... 12
3.6 Operações com Conjuntos ........................................................................ 14
3.7 Data e Hora ................................................................................................... 15
3.8 Números Complexos .................................................................................. 15
3.9 Operações com vetores e matrizes ........................................................... 16
CAPÍTULO IV
4 RECURSOS GRÁFICOS .................................................................................. 17
4.1 Visualização de Curvas ............................................................................... 17
4.1.1 Estilos de linhas, marcadores e cores .................................................. 18
4.1.2 Especialidades dos gráficos bidimensionais ...................................... 18
4.1.3 Funções gráficas 2D especiais .............................................................. 20
4.1.4 Funções para gráficos bidimensionais ................................................ 22
4.2 Visualização de Superfícies ........................................................................ 23
4.2.1 Gráficos de linha tridimensional ............................................................ 23
4.2.2 Gráficos de Malha e Superfície ............................................................... 24
4.2.3 Funções para gráficos tridimensionais ................................................. 26
4.3 Visualização de imagens ........................................................................... 27
4.4 Demais funções de manipulação de gráficos do MATLAB ................... 27
4.5 Salvando figura em um formato bitmap (extensão BMP) ....................... 28
4.6 Sólidos de revolução .................................................................................. 28
CAPÍTULO V
5 PROGRAMAÇÃO MATLAB .......................................................................... 29
5.1 O Editor do MATLAB .................................................................................. 29
5.2 M-Files: Criando seus próprios programas e funções ............................. 30
5.3 Principais comandos de programação ..................................................... 32
5.4 Interface com o usuário ............................................................................. 36
CAPÍTULO VI
6 EXPRESSÕES SIMBÓLICAS ......................................................................... 38
6.1 Definindo variáveis simbólicas ................................................................ 38
CAPÍTULO VII
7 TÓPICOS ESPECIAIS ..................................................................................... 49
Otimizando a performance de códigos MATLAB ................................... 49
Estatística, Matemática Financeira e Programação Linear .................... 49
Listas de Exercícios e Referências Bibliograficas ........................................ 66
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
3
CAPÍTULO I
1 INTRODUÇÃO
1.1 Breve Histórico e Visão Geral do Software MATLAB
O MATLAB original foi desenvolvido em linguagem Fortran por Clever Moler. Essas
novas versões (5 e 6) foram desenvolvidas em linguagem C por: Steve Bangeret, Steve
Kleiman e Clever Moler – Stanford University.
Desde a sua primeira versão (1984), o MATLAB é tido como produto líder na área de
computação numérica e científica. Mais do que um software, o MATLAB é um ambiente
integrado de modelagem de sistemas e algoritmos, ideal para implementação de
projetos complexos, e que por esta razão vem sendo adotado como ferramenta de
desenvolvimento padrão pelas principais universidades do Brasil e do mundo.
O MATLAB é um software destinado a fazer cálculos com matrizes (matriz é o seu
elemento essencial). O nome MATLAB é derivado de MATrix LABoratory, ou seja, um
laboratório de matrizes.
O MATLAB é um sistema interativo cujo elemento básico da informação é uma matriz
que não requer dimensionamento. Esse sistema permite a resolução de muitos
programas numéricos em apenas uma fração do tempo que se gastaria para escrever
um programa semelhante em linguagem tradicional como Fortran, Basic, C/C
++
, Delphi,
Visual Basic, etc.
O MATLAB é o núcleo de um ambiente de computação numérica baseado em matrizes
que integra:
• Funções de tratamento numérico de alta performance;
• Sofisticados recursos de geração de gráficos para visualização de dados;
• Poderosa linguagem de programação de alto nível.
Assim, o MATLAB pode ser usado para:
• Cálculos matemáticos;
• Desenvolvimento de algoritmos;
• Modelagem, simulação e visualização de protótipos;
• Análise, exploração e visualização de dados;
• Gráficos científicos e de engenharia;
• Desenvolvimento de aplicações, incluindo a elaboração de interfaces gráficas com o
usuário.
O MATLAB é um software matemático interativo de alta performance utilizado em
cálculos numéricos por cientistas, engenheiros, pesquisadores, estudantes, etc. O
MATLAB é composto de um módulo matemático básico fundamental ao qual podemos
agregar os mais variados toolbox (caixas de ferramentas) como: estatísticas,
matemática financeira, matemática simbólica, otimização, etc. O MATLAB integra a
análise numérica, cálculo matricial, processamento de sinais e gráficos, de uma forma
tal que os problemas e soluções são expressos de maneira bem próximos como são
escritos matematicamente. Assim, como os comandos são muito próximos da forma
como são escritas as expressões algébricas, torna-se mais simples o seu uso.
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
4
Uma vez inicializado o MATLAB, aparecerá na janela de comandos um prompt "»".
Esse prompt significa que o MATLAB está esperando comando. A figura a seguir ilustra
essa tela inicial
Figura 1: Janela de comandos do MATLAB
Não se esqueça: Todo comando deve ser finalizado teclando-se "ENTER".
No MATLAB trabalhamos essencialmente com um tipo de objeto: uma matriz numérica
cujos elementos podem se constituir de números complexos. Em diversas situações,
um significado especial é atribuído a uma matriz 1x1, que representa um escalar, e
para matrizes com uma linha ou uma coluna, que representam vetores.
A linguagem MATLAB não contém declaração de dimensionamento ou declaração do
tipo. O armazenamento é feito automaticamente.
A seguir é dada uma breve descrição das teclas para reeditar uma linha de comando:
↑ ↑↑ ↑ retorna a linha anterior
↓ ↓↓ ↓ retorna a linha posterior
← ←← ← move um espaço para a esquerda
→ →→ → move um espaço para a direita
Ctrl ← ←← ← move uma palavra para a esquerda
Ctrl → →→ → move uma palavra para a direita
Home move para o começo da linha
End move para o final da linha
Del apaga um caracter a direita
Backspace apaga um caracter a esquerda
Para sair do MATLAB, digite exit ou quit seguido de ENTER.
Para interromper um comando do MATLAB, aperte a tecla Ctrl C, seguido de ENTER
O comando help proporciona informações on-line sobre um tópico escolhido
help apresenta os diretórios no trajeto de busca (path) do MATLAB
help função mostra as linhas de comentários que documentam a função
help elfun lista as funções matemáticas elementares que estão disponíveis
help graphics lista as funções relacionadas com a criação e controle de figuras e gráficos
help plotxy lista as funções para traçado de gráficos X-Y
help plotxyz lista as funções para traçado de gráficos de superfícies e 3D
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
5
CAPÍTULO II
2 CONCEITOS BÁSICOS
2.1 Controle da janela de comandos
As principais funções para o controle da janela de comandos são:
clc limpa a janela de comandos (semelhante ao comando cls do DOS)
clear limpa da memória variáveis e funções
computer retorna string contendo o computador que está executando MATLAB
delete apaga um arquivo ou um objeto gráfico
demo demonstra recursos do MATLAB; isoladamente, apresenta o menu de demos
diary diary nome_do_arquivo salva o texto (comandos e resultados) de uma sessão
dir dir nome_do_diretório lista os arquivos no diretório
fclose fecha um arquivo
flops retorna a contagem de operações em ponto flutuante realizadas
fopen abre arquivo
format estabelece o formato para mostrar os resultados numéricos
help recurso de ajuda on-line
home retorna o cursor para o canto esquerdo superior da tela
load carrega variáveis armazenadas em arquivos .mat
lookfor recurso de ajuda (help) por palavra-chave
save grava variáveis (em arquivos .mat (formato binário)
size retorna as dimensões de uma matriz
ver mostra o número da versão do MATLAB e dos toolboxes instalados
version retorna a versão em uso do MATLAB
what lista os arquivos (.m, .mat e .mex) no diretório corrente
who lista as variáveis correntes
whos lista as propriedades das variáveis atuais (nomes, dimensão, número de bytes e classe)
2.2 Variáveis
Cada variável é um local na memória do computador capaz de conter um valor
que pode ser modificado durante a execução do programa. Quando o MATLAB
faz cálculos, ele utiliza os valores conhecidos para as variáveis no momento
em que o cálculo foi solicitado. Cuidado com lixos, use sempre o comando clear.
O MATLAB possui constantes numéricas predefinidas que podem ser utilizadas na
definição de vetores e matrizes, bem como na manipulação de dados. São elas:
ans variável de trabalho (utilizada para armazenamento quando não há atribuição), padrão usada
para resultados (ans = answer = resposta = saída dos resultados)
eps Precisão numérica relativa (2
-52
≅ 2x10
-16
), precisão em ponto flutuante. Menor número que,
somado a 1, resulta em um número de ponto flutuante maior do que 1 no computador. Pode
ser usado como um erro a ser tolerado na busca de solução para um determinado problema
através de um processo iterativo
i ou j
Raiz imaginária (raiz quadrada de –1),ou seja: 1 −
inf infinito (exemplo: 1 / 0)
NaN ou nan Not a Number (não número) (exemplo: 0 / 0; ∞ / ∞)
nargin number of argument input: número de argumentos de entrada
nargout number of argument output: número de argumentos de saída
pi 3.14159... = razão entre o perímetro da circunferência e seu diâmetro
realmax maior número real positivo utilizável (representável em ponto flutuante)=1.7977x10
308
≅2
1023
realmin menor número real positivo utilizável (representável em ponto flutuante)=2.2251x10
-308
≅2
-1074
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
6
A seguir tem-se as principais dicas sobre o nome a ser dado a uma variável
Regras para nomes Exemplo
devem começar com uma letra matriz1
podem conter letras, algarismos e caracter de sublinhado matriz5_ex8
sensíveis a maiúsculas e minúsculas as variáveis A e a são diferentes
podem conter até 32 caracteres variavel1234_exercicio22_lista03
2.3 Caracteres especiais
: indexação; geração de vetores. como único índice, empilha matriz em uma coluna
( ) ordem de precedência em cálculos; envolver índices; envolver variáveis de entrada
[ ] definir vetores e matrizes; envolver variáveis de saída
. ponto decimal
... linha de continuação
, separador
; Termina linhas suprimindo a sua impressão na tela
% comentários
! Seguida de um comando do DOS, acionará esse comando digitado
' define string
= efetua atribuição de variável
2.4 Operadores aritméticos
Operador Significado Exemplo Resultado
+ adição » 2+3 5
- subtração » 5-4 1
* multiplicação » 2*3 6
.* multiplicação elemento a elemento » [1 2].*3 3 6
/ divisão à direita » 2/4 0.5000
./ divisão elemento a elemento » [8 4]./2 4 2
\ divisão à esquerda » 2\4 2
^ potenciação » 2^3 8
.^ potenciação elemento a elemento » [3 4].^2 9 16
' ou
transpose
transposta » [3 4] 3
4
2.5 Operadores condicionais
Operador Descrição Exemplo Resultado
== igual a » 5==2 0 (falso)
> maior do que » 5>2 1(verdadeiro)
>= maior ou igual a » 5>=2 1(verdadeiro)
< menor do que » 5<2 0(falso)
<= menor ou igual a » 5<=2 1(falso)
~= diferente (não é igual a) » 5~=2 1(verdadeiro)
Lembrete: “=” é usado para atribuição e não para comparação
2.6 Operadores lógicos
Operador Descrição
& e (and)
| ou (or)
~ não (not)
xor a ou b, mas não a e b (exclusive or) ou exclusivo
any verdadeiro se algum elemento do vetor for verdadeiro
all verdadeiro se todos os elementos do vetor forem verdadeiros
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
7
CAPÍTULO III
3 FUNÇÕES ELEMENTARES DO MATLAB
3.1 Funções Científicas
O MATLAB tem uma série de funções científicas predefinidas (help elfun). A maioria
pode ser usada da mesma forma que seria escrita matematicamente. Por exemplo:
>> x=sqrt(2)/2
x =
0.7071
>> y=acos(x)
y =
0.7854
>> y_graus=y*180/pi
y_graus =
45.0000
Estes comandos calculam o arco cujo cosseno é
2
2
, inicialmente em radianos, depois
em graus. Abaixo segue uma lista de algumas funções científicas disponíveis:
Funções Trigonométricas
sin (x) seno de x sinh (x) seno hiperbólico de x
cos (x) coseno de x cosh (x) coseno hiperbólico de x
tan (x) tangente de x tanh (x) tangente hiperbólica de x
cot (x) cotangente de x coth (x) cotangente hiperbólica de x
sec (x) secante de x sech (x) secante hiperbólica de x
csc (x) cosecante de x csch (x) cosecante hiperbólica de x
asin (x) arco cujo seno é x asinh (x) arco cujo seno hiperbólico é x
acos (x) arco cujo cosseno é x acosh (x) arco cujo coseno hiperbólico é x
atan (x) arco cuja tangente x. atanh (x) arco cuja tangente hiperbólica é x
acot (x) arco cuja cotangente x acoth (x) arco cujo cotangente hiperbólica é x
acsc (x) arco cuja cosecante x acsch (x) arco cujo cosecante hiperbólica é x
asec (x) arco cuja secante x asech (x) arco cujo secante hiperbólica é x
Funções Elementares
abs(x) valor absoluto, ou seja, módulo de x
exp(x) exponencial (base e), ou seja, e
x
fix arredonda em direção ao zero, considera apenas a parte inteira: Exemplo: 2.98 = 2
floor arredonda em direção a menos infinito (-∞)
ceil arredonda em direção a mais infinito (+∞)
gcd(x,y) máximo divisor comum de x e y
lcm(x,y) mínimo múltiplo comum de x e y
log(x) logaritmo natural (base e), ou seja, logaritmo de x na base e
log10(x) logaritmo decimal (base 10), ou seja, logaritmo de x na base 10
log2 logaritmo base 2 e desmembra números em ponto-flutuante
rat aproximação racional: Exemplo: rat(pi)= 3 + 1/(7 + 1/16) = 355/113
rats saída no formato racional: Exemplo: rats(pi) = 355/113
rem (x,y) resto da divisão de x por y: Exemplo: rem(8,3) = 2
round arredonda para o inteiro mais próximo: Exemplo: 2.98 = 3
sign função sinal
sqrt(x) raiz quadrada de x
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
8
3.2 Formatos Numéricos
Quando o MATLAB mostra um resultado numérico ele segue certas regras. No caso de
nenhum formato estar definido, se um resultado é um número inteiro, o MATLAB
mostra como um inteiro. Quando um resultado é um número real, o MATLAB mostra
uma aproximação com até quatro casas decimais. Este foi o caso no exemplo do arco
cosseno, que fizemos anteriormente. Se os dígitos significativos estiverem fora desta
faixa, o MATLAB mostra o resultado em notação científica. Você pode definir um
formato diferente. Os seguintes comandos controlam o formato em que são mostrados
os dados e resultados:
FORMATO RESULTADO
format short
Ponto fixo, 4 casas decimais (formato predefinido, default – padrão)
format short e Notação cientifica, 4 casas decimais
format long Ponto fixo, 14 casas decimais
format long e Notação cientifica, 14 casas decimais
format bank Valor monetário (dólares e centavos), 2 casas decimais
format rat Formato racional (aproximadamente), isto é, razão de inteiros
É importante salientar que o MATLAB não muda a sua forma de representar os
números internamente, quando formatos diferentes de exibição de números são
escolhidos.
3.3 Entrada de Matrizes
Uma matriz, no MATLAB, pode ser introduzida de diversas maneiras:
• Entrada através de uma lista explícita de seus elementos
Essa é a maneira mais fácil de entrar com pequenas matrizes. Nessa lista, os
elementos são separados por espaço(s) " " ou por vírgula ",", estando entre colchetes
"[ ]", e usando ponto e vírgula ";" para indicar o final de cada linha.
Exemplos:
1) Usando ponto e vírgula
» A=[1 2 3;4 5 6;7 8 9] Pressionando ENTER, tem-se o resultado:
A =
1 2 3
4 5 6
7 8 9
2) Sem usar o ponto e vírgula seria
» A=[1 2 3 Pressionando ENTER
4 5 6 Pressionando ENTER
7 8 9] Pressionando ENTER
A =
1 2 3
4 5 6
7 8 9
• Gerando a matriz com uso de uma declaração ou função
Para gerar uma matriz através desta opção, basta declarar a função e seu respectivo
argumento.
Exemplos:
1) Gerar uma matriz identidade 3X3
» I3=eye(3)
I3 =
1 0 0
0 1 0
0 0 1
2) Gerar uma matriz nula 2x3
» Z0=zeros(2,3)
Z0 =
0 0 0
0 0 0
3) Gerar um vetor formado por elementos 1's
» UM=ones(3,1)
UM =
1
1
1
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
9
• Criando um arquivo com extensão M
Para criar um arquivo com extensão M, utilizamos um editor de texto, como por
exemplo o EDIT do DOS, o WORDPAD do WINDOWS, o editor do MATLAB, etc.
Exemplo:
1) Utilizando o editor do MATLAB, criar o arquivo matriz1.m (a extensão é sempre m)
contendo uma matriz M: 2x3, formada pelos elementos (1, 2, 3, 4, 5, e 6, nessa ordem).
Para entrar no editor faça: Clique em File, New e M-File
A seguir digite: M=[1 2 3;4 5 6]
Para salvar este arquivo: Clique em File, Save As, Salve como: matriz1.m
Para que a matriz M esteja disponível basta digitar o nome do arquivo nas linhas de
comando.
» matriz1
M =
1 2 3
4 5 6
Sempre que escrevermos uma matriz e encerrarmos com ponto e vírgula ";" a sua
exibição na tela será omitida. Isto é útil principalmente no caso em que a expressão
resulta em matrizes de grandes dimensões. Neste caso, para termos a matriz na tela,
basta digitar o nome dado a ela.
Exemplo:
» I50=eye(50); Pressionando ENTER, aparece apenas a próxima linha de comando »
% ao digitar o nome da matriz, a mesma é mostrada de forma explícita.
» I50
I50 =
Columns 1 through 12
1 0 0 0 0 0 0 0 0 0 0 0 ...
...
Lembrete: 1) Deve-se dar ENTER após cada linha de comando para que o MATLAB
execute o mesmo.
2) Os parâmetros devem estar entre parênteses "( )"
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
10
3.4 Polinômios
Os polinômios são representados, no MATLAB, como vetores linhas contendo os
coeficientes ordenados segundo as potências decrescentes dos termos. Existem várias
funções que trabalham com polinômios são elas:
FUNÇÃO OBJETIVO
conv multiplicar polinômios; convolução
conv2 multiplicar polinômios bidimensionais
deconv dividir polinômios; deconvolução
poly construir polinômio a partir de suas raízes. polinômio característico
polyadd efetuar a soma de polinômios
polyder calcular a derivada de polinômio
polyfit efetuar ajuste polinomial de dados
polyval avaliar uma matriz polinomial
residue resíduo de divisão de polinômios
roots determinar as raízes de um polinômio (zeros)
3.4.1 Raízes
Considere o vetor p = [1 –5 6], correspondente aos coeficientes da equação do
segundo grau: x
2
– 5x + 6 = 0 e r = [3 2] o vetor contendo as raízes dessa equação.
A função MATLAB roots(p): determina as raízes da equação cujos coeficientes estão
contidos em p, enquanto que a função poly( r) retorna os coeficiente do polinômio que
possui como raízes os componentes do vetor r.
Assim, tem-se:
» p=[1 –5 6];
» r=roots(p)
r =
3
2
» p=poly(r)
p =
1 -5 6
3.4.2 Adição
Se a dimensão dos polinômios p
1
e p
2
forem iguais, pode-se fazer: p
1
+ p
2
para obter a
sua soma. Se a dimensão de p
1
for diferente da dimensão de p
2
, pode-se usar um dos
dois casos:
- Preencher com zeros os coeficientes das potências que faltam em um polinômio
para este igualar-se em dimensão com o outro;
- Usar a função polyadd(p
1
,p
2
)
3.4.3 Multiplicação
A função conv(p
1
,p
2
) multiplica o polinômio p
1
pelo polinômio p
2
.
3.4.4 Divisão
A sintaxe [q,r] = deconv(p
1
,p
2
) retorna o resultado da divisão do polinômio p
1
pelo
polinômio p
2
. Nessa saída aparecem duas variáveis, onde:
q: é o quociente da divisão de p
1
por p
2
e r: é o resto dessa divisão
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
11
3.4.5 Avaliação
A sintaxe polyval(p,a) avalia o polinômio p para o valor a
Exemplo: Calcular o valor de p(5) para o polinômio p(x) = x
2
– 5x + 6
» p = [1 –5 6];
» polyval(p,5)
ans =
6
% como não foi atribuído um nome para a variável resposta, a saída é ans
abreviação de answer = resposta
3.4.6 Derivada
A função que determina a derivada do polinômio p é a função: polyder (p). Serão
exibidos os coeficientes do polinômio que representam a derivada.
Exemplo: Calcular a derivada da função x
2
– 5x + 6 = 0
» p = [1 –5 6];
» der=polyder(p)
der =
2 -5
Portanto, a derivada é dada por: 2x-5
3.4.7 Interpolação: adequação de curvas (função: polyfit)
A função MATLAB polyfit executa o ajuste polinomial de dados. A sintaxe
polyfit(x,y,n) encontra os coeficientes de um polinômio de grau n que ajusta aos
dados, p(x(i)) ≅ y(i), no sentido dos mínimos quadrados.
p=polyfit(x,y,n), onde n é a ordem da função de y em relação a x.
Interpolação linear: n=1;
Interpolação quadrática: n=2;
Interpolação cúbica (usando função do terceiro grau): n=3
Exemplos:
Function ajuste_poli1
x=[1 2 3 4 5];
y=[5 7 9 11 13];
plot(x,y,'.')
pause
close
p1=polyfit(x,y,1)
p2=polyfit(x,y,2)
p3=polyfit(x,y,3)
p1 =
2.0000 3.0000
p2 =
0.0000 2.0000 3.0000
p3 =
-0.0000 0.0000 2.0000 3.0000
function ajuste_poli2
x=[0 1 2 3 4 5];
y=[6 2 0 0 2 6];
plot(x,y,'.')
pause
close
p1=polyfit(x,y,1)
p2=polyfit(x,y,2)
p3=polyfit(x,y,3)
p1 =
-0.0000 2.6667
p2 =
1.0000 -5.0000 6.0000
p3 =
0.0000 1.0000 -5.0000 6.0000
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
12
3.5 Sistema de Equações Lineares
Resolver sistemas da forma: A * x = b, se det(A) ≠ 0 (det = determinante) tem-se uma
única solução dada por: x = A
-1
* b.
No MATLAB, esses sistemas podem ser resolvido com qualquer um dos comandos:
» x=inv(A)*b ou » x=A\b ou » x=pinv(A)*b
Exemplo 1: Resolver o sistema de equações lineares:
¹
¹
¹
'
¹
− · − + −
· + −
· + +
5 2
3 2
8 2
3 2 1
3 2 1
3 2 1
x x x
x x x
x x x
No MATLAB, a entrada será:
» A=[1 2 1; 2 -1 1; -1 1 -2]
A =
1 2 1
2 -1 1
-1 1 -2
» b=[8;3;-5]
b =
8
3
-5
»x=inv(A)*b ou »x=A\b ou »x=pinv(A)*b
x =
1
2
3
Assim, a solução encontrada
representa:
x
1
= 1;
x
2
= 2 e
x
3
= 3
Exemplo 2 : Resolver o sistema:
¹
¹
¹
¹
¹
¹
¹
'
¹
· + + + +
· + + + +
· + + + +
· + + + +
· + + + +
175 9 2 25 18 11
190 3 21 19 12 10
245 22 20 13 6 4
190 16 14 7 5 33
175 15 8 24 17
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
x x x x x
x x x x x
x x x x x
x x x x x
x x x x x
Dica: Use a função inversa e a formatação de números racionais
Resposta: SPD:
¹
'
¹
¹
;
¹
· )
393
1952
,
393
1589
,
393
1171
,
393
883
,
393
260
( S
» A=[17 24 1 8 15; 33 5 7 14 16; 4 6 13 20 22; 10 12 19 21 3; 11 18 25 2 9];
» b=[175 190 245 190 175]';
» X=inv(A)*b
X =
0.6616
2.2468
2.9796
4.0433
4.9669
» format rat
» X=inv(A)*b
X =
260/393
883/393
1171/393
1589/393
1952/393
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
13
Uma outra função MATLAB, permite a solução de sistemas numéricos: solve
Exemplos : Resolva os sistemas usando a função solve do MATLAB
¹
'
¹
· −
· +
2
10
y x
y x
» [x,y]=solve('x+y=10', 'x-y=2')
x =
6
y =
4
¹
¹
¹
'
¹
− · − + −
· + −
· + +
5 2
3 2
8 2
3 2 1
3 2 1
3 2 1
x x x
x x x
x x x
» [x,y,z]=solve('x+2*y+z=8','2*x-y+z=3','-x+y-2*z=-5')
x =
1
y =
2
z =
3
Exercício 1: Construir um programa para a resolução de sistemas lineares com uma única
solução ou seja det(A) ≠0.
function sislin
disp(' ')
disp(' Resolução de sistemas lineares do tipo Ax=b, com det(A)~=0')
disp(' ')
A=input(' Entre com a matriz dos coeficientes (entre [ ]): A ==> ' )
disp(' ')
b=input(' Entre com o vetor das constantes (entre [ ]): b ==> ' )
disp(' ')
if det(A)==0
disp(' ')
disp (' Fim do Programa')
disp(' ')
else
disp(' Solução encontrada para o sistema')
disp(' ')
x=inv(A)*b;
i=1;
while i<=(length(b))
disp([' x_'num2str(i),' = ' num2str(x(i)) ]);
i=i+1;
end
disp(' ')
end
Não é objetivo, neste momento, a compreensão de todas as sintaxes usadas nesse
programa, mas sim motivar o aprendiz para, a partir das funções MATLAB construir
programas com uma facilidade maior para o usuário final.
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
14
3.5 Operações com conjuntos
Dados A = [1 2 3 4 5] e B = [4 5 6 7 8]
union (A,B) representa A∪B = [1 2 3 4 5 6 7 8]
intersect (A,B) representa A∩B = [4 5 ]
setdiff (A,B) representa A - B = [1 2 3]
setxor (A,B) representa (A∪B) - (A∩B) = [1 2 3 6 7 8]
» A=[1 2 3 4 5];
» B=[4 5 6 7 8];
» uniao=union(A,B)
uniao =
1 2 3 4 5 6 7 8
» intersec=intersect(A,B)
intersec =
4 5
» difer=setdiff(A,B)
difer =
1 2 3
» exclus=setxor(A,B)
exclus =
1 2 3 6 7 8
Outros comandos úteis
prod(v)retorna o produto do elementos do vetor v. Exemplo: v = [1 2 3], prod(v)= 6
power(m,n) determina m
n
, m pode ser matriz. Exemplo: power (2,3) = 8
factor(n) determina os fatores primos de n, ou decompõe polinômios.
Ex. : 1) factor(210) = [2 3 5 7] 2)x=sym('x'); decomp=factor(x^2-4) =(x-2)*(x+2)
primes(n) determine os números primos entre 0 e n. Ex. : 1) primes(10) = [2 3 5 7]
perms (v) mostra todas as possíveis permutações dos elementos contidos no vetor. Para determinar
o número de permutações, faça: length(perms(v))
nchoosek(m,n) determina o número de combinações simples nchoosek(4,2 )= 6.Para determinar as
combinações, faça nchoosek(v,n) onde V é um vetor contendo os elementos a ser combinados e n,
o número de elementos a ser tomado em cada combinação
Exercício 1: Construir um programa que calcula o fatorial de um número n dado.
function fatorial(n)
% Determinar o fatorial de um número n dado
% n! = n .(n-1).(n-2).(n-3). ... .3.2.1
% Sintaxe: fatorial(n)
if n < 0
disp(' ')
disp(' Erro: o número deve ser não negativo')
disp(' ')
elseif n==0
disp(' ')
fatorial_n=1;
disp([' ' num2str(n),'! = ' num2str(fatorial_n)]);
disp(' ')
else
disp(' ')
fatorial_n=prod(1:n);
disp([' ' num2str(n),'! = ' num2str(fatorial_n)]);
disp(' ')
end
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
15
3.7 Data e Hora
As funções relacionadas a data e hora são importantes, pois possibilitam determinar o
tempo de execução de nossos programas. As principais funções são:
date retorna dia-mês-ano
clock retorna data e hora atual (ano, mês, dia, hora, minutos, segundos) nesta ordem
datestr converte a data numérica em literais
weekday retorna o dia da semana
calendar calendário de qualquer mês
datetick inserir data em gráficos (eixo x)
cputime tempo de CPU (unidade central de processamento) utilizado pelo MATLAB
etime retorna tempo (em segundos) transcorrido entre dois momentos especificados.
sintaxe: t1 = clock; t2 = clock ; tempo = etime(t2,t1)
tic, toc aciona e faz a leitura de um cronômetro, respectivamente
Exemplo
function tempo
t1=clock;
disp(' ')
c=clock;
c1=c(1);c2=c(2);c3=c(3); c4=c(4);c5=c(5);c6=c(6);
disp([' Data: 'num2str(date),' 'num2str(c4),' horas ' num2str(c5), ' minutos
'num2str(c6),' segundos'])
disp(' ')
disp('OUTRA FORMA ')
disp(' ')
disp([' dia: 'num2str(c3),' mês: 'num2str(c2),' ano: 'num2str(c1)])
disp(' ')
disp([' 'num2str(c4),' horas ' num2str(c5), ' minutos 'num2str(c6),' segundos'])
pause(2)
t2=clock;
t=etime(t2,t1);
disp(' ')
disp([' tempo transcorrido: 'num2str(t),' segundos'])
disp(' ')
3.8 Números complexos
Os números complexos são números da forma: z = a + bi = a + bj, com a e b ∈ ℜ,
e i = j = 1 − . No MATLAB, as principais funções relacionadas aos complexos são:
abs módulo (magnitude) do número complexo
angle ângulo (fase, argumento) do número complexo
cart2pol transforma coordenadas cartesianas para polares
cart2sph transforma coordenadas cartesianas para esféricas
conj conjugado do número complexo
imag parte imaginária do número complexo
pol2cart transforma coordenadas polares para cartesianas
real parte real do número complexo
sph2cart transforma coordenadas esféricas para cartesianas
Exemplo:
» a=1+1i;
» Real=real(a)
Real = 1
» Imag=imag(a)
Imag = 1
» Modulo=abs(a)
Modulo =
1.4142
» angulo_radiano=angle(a)
angulo_radiano =
0.7854
% Obtém-se o argumento(ângulo)do número complexo
angulo_radiano normalizado, isto é, no intervalo [-pi,pi]
» angulo_graus=angulo_radiano*180/pi
angulo_graus =
45
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
16
3.9 Operações com vetores e matrizes
Definição de intervalos
Exemplos:
>> 0:0.05:2 % inicio: incremento :fim
>> 0:2 % inicio:1:fim
>>linspace(1,13,5) % linspace(inicio,fim,n)
>>linspace(4,200) % linspace(inicio,fim,100)
>>logspace(0,2,11) % potência de 10: logspace(inicio,fim,n)
>>for k=vi:in:vf instruções end
linspace: define vetores com elementos linearmente espaçados (incrementos
iguais). Obs.: Se o número de elemento for omitido, o MATLAB assume 100.
Exemplo: Formar uma P. A., onde a
1
=1; a
n
=13 e n=5
» Vet1=linspace(1,13,5) % Forma uma P. A., onde a1=1; an=13 e n=5
Vet1 =
1 4 7 10 13
Vetores
DECLARAÇÃO SIGNIFICADO
sum(v) A soma dos componentes do vetor v
std(v) Desvio padrão com respeito á média
max(v) Maior componente de um vetor
mean(v) Média das componentes do vetor v
min(v) Menor componente do vetor v
abs(v) Módulo das componentes do vetor v
norm(v) Norma euclidiana do vetor v
length(v) Número de componentes do vetor v
sort(v) Ordena o vetor v em ordem crescente
prod(v) Produto das componentes do vetor v
x’ * y Produto interno dos vetores x e y
Principais funções matriciais [Notação: (m = n
0
de linhas, n = n
0
de colunas e A = matriz]
DECLARAÇÃO SIGNIFICADO
det(A) Determinante de uma matriz
inv(A) Inversa de uma matriz
pinv(A) Inversa generalizada de uma matriz
eye(n) Matriz identidade
k.eye(A) Matriz escalar
trace Traço de uma matriz (soma dos elementos da diagonal principal)
A‘ = transpose(A) Matriz transposta
rank(A) Posto de uma matriz (rank=número de linhas Linearmente Independentes)
rand(m,n) Gera dados com distribuição uniforme no intervalo (0, 1)
randn(m,n) Gera dados com distribuição normal padronizada (média = 0 e variância = 1)
diag(A) Matriz diagonal ou diagonal de uma matriz (exibe os elemento da diagonal)
zeros(m,n) Matriz nula
autovalores = eig(A) Autovalores de uma matriz
[autovet autoval]=eig(A) Autovetores de uma matriz (Os autovetores já saem normalizados)
sqrt(A) Raiz de uma matriz (extrai a raiz de cada elemento da matriz)
sqrtm(A) Raiz quadrada de uma matriz A
1/2
.A
1/2
=1
A * A = A Matriz idempotente
A’= inv(A) Matriz ortogonal (A inversa da matriz é a sua transposta)
A’= inv(A) e det(A) = t 1 Matriz ortonormal
A’ = A Matriz simétrica
A’ = - A Matriz anti-simétrica
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
17
Capítulo IV
4 RECURSOS GRÁFICOS
O MATLAB possui ferramentas poderosas e amigáveis para a visualização de dados,
bem de acordo com a filosofia de um laboratório de dados: fácil de experimentar e fácil
de averiguar. Nesta seção apresentar-se-á aspectos básicos e uma visão geral dos
recursos gráficos disponíveis. Informações detalhadas ou sobre gráficos específicos
podem ser obtidos no Help do MATLAB.
4.1 Visualização de Curvas
Os dados a serem visualizados em um gráfico devem estar, tipicamente, em um vetor.
O MATLAB não desenha diretamente gráficos de funções como no MAPLE ou
MATHEMATICA. Por exemplo, para se desenhar o gráfico da função seno, de -pi até
pi, devemos criar um vetor com os valores da função seno e depois plotar o vetor:
» x = -pi : 0.1 : pi;
» y= sin (x);
» plot( y )
O resultado do
plot é
0 10 20 30 40 50 60 70
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Note que o eixo das abcissas não reflete a faixa de valores que foi usada para produzir
o vetor y, de -pi até pi. Ao invés disso, o plot assume que o eixo das abcissas deve
ser o índice do vetor. Para plotar os valores corretos no eixo das abcissas, basta usar
uma pequena variação desse comando (plot(x,y)).
Quando passamos dois vetores para o comando plot, a função assume que o primeiro
vetor é o das abcissas, e o segundo vetor é o das ordenadas. O resultado é:
» x = -pi : 0.1 : pi;
» y = sin ( x );
»plot( x, y);
-4 -3 -2 -1 0 1 2 3 4
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
18
Exemplo 1: Construir um programa para plotar duas curvas no mesmo gráfico, sendo a
primeira com linha sólida, na cor vermelha e os pontos representados por asteriscos e
a segunda com linha pontilhada e na cor azul.
1
a
forma:
function grafico_2x1a
x=-1:0.1:1;
y=x.^2;
z=x.^3;
plot(x,y,'r*',x,z,'b:')
pause
close
2
a
forma:
function grafico_2x1b
x=-1:0.1:1;
y=x.^2;
z=x.^3;
plot(x,y,'r*')
pause % pausa até ser pressionada uma tecla
hold on % Mantém o gráfico atual
plot(x,z,'b:')
pause
close
4.1.1 Estilos de linhas, marcadores e cores
No MATLAB, existem as seguintes configurações de linhas, marcadores e cores,
opções essas válidas para plotar em 2D e 3D.
Tipos de cores Marcadores de ponto Tipos de linhas
y yellow
amarelo . point
ponto - solid
sólida
m magenta
magenta (lilás) o circle
círculo : dotted
pontilhada
c cyan
azul-claro x x-mark
x -. dashdot
traço-ponto
r red
vermelho + plus
+ -- dashed
tracejada
g green
verde * star
asterisco
b blue
azul escuto s square
quadrado
w white
branco d diamond
diamante
k black
preto v triangle
triângulo
^ triangle
triângulo
< triangle
triângulo
> triangle
triângulo
p pentagram
estrela de 5 pontas
h hexagram
estrela de 6 pontas
• Manipulação dos eixos (após o plot):
Construção do eixo X hold on; plot([Xmin Xmax],[0 0])
Construção do eixo X hold on; plot([0 0], [Ymin Ymax])
axis ('ij') insere os valores do eixo y em ordem decrescente
axis ('off') elimina os eixos
axis([Xmin Xmax Ymin Ymax]) define escalas para os eixos X e Y
axis(‘auto’) retorna ao modo automático: Xmin = min(X) e Xmax = max(X), etc
4.1.2 Especialidades dos gráficos bidimensionais
xlabel('rótulo do eixo x'): título do eixo X
ylabel('rótulo do eixo y'): título do eixo Y
grid: para inserir linhas de grade
title('título'): coloca título no gráfico, centralizado, na parte superior da tela
text(x,y,'texto'): coloca texto usando as coordenadas (x,y) como início do texto
gtext('texto'): coloca texto, que irá começar a ser escrito no local onde o mouse for clicado, coincidindo o
início do texto com o cruzamento das duas retas que aparecem
legend('legenda1','legenda2',...,'legendan'): cria uma caixa de legendas no canto superior direito.
Quando desejar mudar de lugar, basta clicar na caixa e arrastar com o botão esquerdo do mouse
clf apaga a figura atual
close fecha todas as janelas gráficas
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
19
figure(n): ativa a janela da figura especificada (n)
zoom: expande a figura a cada click do botão esquerdo do mouse e clicando-se no botão direito
acontece o contrário
box: liga a caixa ao eixo (traça os eixos das ordenadas e das abscissas nos dois lados)
colordef black: colore o fundo da tela de preto
colordef white: colore o fundo da tela de branco
pause: pausa na execução programa, até ser pressionada uma tecla
pause (n): pausa na execução de um programa de (n) segundos
hold on: mantém o gráfico atual
Exemplo 2: Desenhar o gráfico da função f(x) = x
2
+ 2, no intervalo [-5, 5], fornecendo
título ao gráfico, bem como aos eixos x e y. Inserir uma observação destacando o
vértice da parábola, criar uma legenda e gerar grade.
function graf1
x=-5:0.01:5; % inicio: incremento :final
y=x.^2+2;
xv=0;
yv=2;
plot(x,y) % Cria curva com linha sólida e azul
hold on % Mantém o gráfico atual
plot(xv,yv,'or')
title('PARÁBOLA') % Título do gráfico
xlabel('eixo das abscissas') % Nome do eixo x
ylabel('eixo das ordenadas') % Nome do eixo y
text(xv, yv, 'vértice') % Inseri texto ao gráfico em local predefinido no
programa (xv,yv)
legend('y = x.^2 + 2') % Cria legenda
grid % Gera grade
pause
close
Destaca-se que podem ser gerados vários gráficos em uma mesma janela, com o
comando subplot e que as janelas gráficas podem ficar abertas simultaneamente com
os comandos figure e hold.
A sintaxe subplot(m,n,p): particiona a tela para construção do gráfico em um número
igual a mxn, onde p representa a posição de cada novo gráfico, ou seja, cada gráfico
terá uma posição de acordo com elementos matriciais (m linhas e n colunas).
Exemplo 3:
function sub_plot
subplot(2,2,1)
x=-4:0.01:4;
y=x.^2;
plot(x,y)
subplot(2,2,2)
x=-4:0.01:4;
y=x.^2-5*x+6;
plot(x,y)
subplot(2,2,3)
x=-4:0.01:4;
y=x.^2 + 5;
plot(x,y)
subplot(2,2,4)
x=-2:0.01:2;
y=x.^3;
plot(x,y)
pause
close
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
20
Nota: A estrutura do plot permite que os gráficos não estejam restritos a funções.
Podemos plotar curvas paramétricas também, como por exemplos.
Exemplo 1:Circunferência trigonométrica
function ciclo
t=0:0.01:2*pi;
x=cos(t);
y=sin(t);
plot(x,y,'r')
title('circunferência trigonométrica')
xlabel('eixo dos cossenos')
ylabel('eixo dos senos')
hold on
plot([-1 1],[0 0])
plot([0 0],[-1 1])
pause
close
-1 -0.5 0 0.5 1
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
circunferê ncia trigonomé trica
eixo dos cossenos
e
i
x
o

d
o
s

s
e
n
o
s
Exemplo 2: Cardióide
»t=-pi:0.1:pi;
»x=2*cos(t)-cos(2*t);
»y=2*sin(t)-sin(2*t);
»plot(x,y);
-3 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5
-3
-2
-1
0
1
2
3
Com esse exemplo fica claro que o comando plot é adequado para a visualização de
curvas paramétricas em 2D. A curva exibida é uma poligonização (interpolação linear)
dos pontos p(i)=(x(i),y(i)) passados como parâmetros. O caso de gráfico de uma função
y = f(x) deve ser tratado como um caso particular de gráficos de curvas (a saber, o
gráfico da função y=f(x) é o mesmo que o da curva x=t ; y=f(t) ). Existe também o plot3
que tem o mesmo princípio do plot, mas destina-se a visualização de curvas
paramétricas em ℜ
3
.
4.1.3 Funções gráficas 2D especiais
pie: gráficos de pizza (setores). A sintaxe pie(x, x == max(x)): plota os valores de x,
sendo destacada a fatia que representa a parte maior deste conjunto de dados. Para
referenciar o que representa cada fatia deve-se usar o comando legend.
Exemplo:
function fatia
x=[40 30 20 10];
pie(x,x==max(x))
legend('ÓTIMOS','BONS','MÉDIOS',... 'REGULARES')
pause
close
40%
30%
20%
10%
ÓTIMOS
BONS
MÉ DIOS
REGULARES
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
21
pareto (x): Os valores do vetor x são desenhados em colunas em ordem decrescente.
Exemplo:
function grafico_pareto1
x=[104 42 20 10 6 4 14];
pareto(x)
legend('LINHA DE PARETO','HISTOGRAMA');
pause
close
1 2 3 7 4 5
0
20
40
60
80
100
120
140
160
180
200
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
LINHA DE PARETO
HISTOGRAMA
histfit: histograma com ajuste a curva normal.
Exemplo:
» x=normrnd(0,1,1000,1);
» histfit(x)
» xlabel('eixo x')
» ylabel('eixo y')
-3 -2 -1 0 1 2 3
0
10
20
30
40
50
60
70
80
90
HISTOGRAMA COM AJUSTE A CURVA NORMAL
eixo x
e
i
x
o

y
area(x,y): Semelhante ao plot(x,y), mas a área sob a curva é hachurrada, ou seja,
plota um gráfico de área.
function graf_area
x1=-5:0.01:5;
y1=x1.^2;
plot(x1,y1)
hold on
x2=1:0.01:3;
y2=x2.^2;
area(x2,y2)
title('GRÁFICO DE ÁREA')
xlabel('EIXO X')
ylabel('EIXO Y')
pause
close
-5 0 5
0
5
10
15
20
25
GRÁFICO DE Á REA
EIXO X
E
I
X
O

Y
comet: gera gráfico com exibição da trajetória animada, ou seja, plota com trajetória
de cometa.
Exemplo: x=0:0.001:2*pi;
comet(x,sin(x))
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
22
4.1.4 Funções para gráficos bidimensionais
A seguir, tem-se alguns dos principais comandos para plotar gráficos 2D que não foram
apresentados anteriormente:
bar gráfico de barras verticais (colunas)
barh gráfico de barras horizontais
clabel acrescenta rótulos dos níveis em gráficos tipo curvas de níveis (contour)
colorbar mostra mapa de cores na forma de uma barra (escala) de cores
compass compass(z) traça um gráfico que mostra ângulo e magnitude dos elementos complexos
de z como setas emanando da origem (plotar em forma de bússula)
contour plota contorno 2D (tipo curva de nível)
contourc cálculo dos níveis (para plotagem de curvas de níveis)
delete elimina um objeto gráfico
errorbar traça gráfico acrescentando barras (representando faixas) especificadas de erros.
ezplot (‘função’,[Xmin Xmax] % coordenada linear
ezpolar (‘função’,[Xmin Xmax] % coordenada polar
feather(z) traça um gráfico que mostra o ângulo e a magnitude dos elementos complexos de z
como setas emanadas de pontos igualmente espaçados ao longo de um eixo horizontal
fill desenha polígono 2D
fplot (‘função’,[Xmin Xmax] % plotar função
ginput retorna as coordenadas de pontos de um gráfico selecionados com o mouse ou o cursor
hist plota histograma
line cria objeto gráfico do tipo linha
loglog plota em escala logarítmica para ambos os eixos
patch cria objeto gráfico do tipo patch
polar (t,r) plota em coordenadas polares o ângulo teta (t), em radianos, versus o raio r
rose plota histograma em ângulo
rotate gira um objeto gráfico de um certo ângulo, em uma direção especificada
scatter gráfico discreto que indica pontos com marcadores
semilogx plota em semilog
semilogy plota em semilog
set estabelece propriedades para objetos gráficos
stairs gráfico escada (plotar em degrau, apropriado para sinais amostrados)
stem gráfico discreto que indica pontos com marcadores
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
23
4.2 Visualização de Superfícies
4.2.1 Gráficos de linha tridimensional
A sintaxe plot3(x,y,z) é utilizada para plotar pontos e linhas no espaço tridimensional.
Exemplo 1: Plotar a poligonal cujos vértices são dados pelos vetores: x = [1 2 3 4 5],
y = [1 2 3 4 5] e z = [2 2 3 4 4]
function ex_plot3
x=1:5; y=1:5;z=[2 2 3 4 4];
plot3(x,y,z)
grid
hold on
plot3(x,y,z,'ro')
pause
close
1
2
3
4
5
1
2
3
4
5
2
2.5
3
3.5
4
Exemplo 2: Plotar a linha (hélice) onde: x= sen (t), y = cos(t) e z = t
function ex_plot3b
t=0:pi/50:10*pi;
plot3(sin(t),cos(t),t);
title('DIAGRAMA DE LINHAS')
grid
xlabel('Eixo X')
ylabel('Eixo Y')
zlabel('Eixo Z')
pause
close
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
0
10
20
30
40
Eixo X
DIAGRAMA DE LINHAS
Eixo Y
E
ix
o

Z
O comando comet3 exibe o traçado de uma curva em três dimensões, com trajetória
de cometa.
Exemplo:
function helice
% comet3: exibe o traçado de uma curva em três dimensões, visualiza-se o
desenho de uma hélice sendo traçado, por exemplo
t=0:pi/100:10*pi;
comet3(sin(t),cos(t),t)
title('HÉLICE')
xlabel('sen(t)')
ylabel('cos(t)')
zlabel('t')
pause
close
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
24
4.2.2 Gráficos de Malha e Superfície
A sintaxe [X,Y] = meshgrid([Xmin Xmax] , [Ymin Ymax]) específica o domínio para
plotar funções.
Exemplo 1:
x=1:3;
y=4:7;
[X,Y]=meshgrid(x,y)
X =
1 2 3
1 2 3
1 2 3
1 2 3
Y =
4 4 4
5 5 5
6 6 6
7 7 7
Desta forma, a declaração [X,Y]=meshgrid(x,y) transforma o domínio especificado
pelos vetores x e y em valores de X e Y, permitindo a avaliação de funções de duas
variáveis Z=f(X,Y) e usando a declaração mesh(Z) plota-se superfícies em 3D.
Exemplo 1: plotar z=x
2
+ y
2
com –2 ≤ x ≤ 2 e –2 ≤ y ≤ 2
function parabolica
x=-2:0.1:2;
y=-2:0.1:2;
[X,Y]= meshgrid(x,y);
Z=X.^2+Y.^2;
mesh(Z)
pause
print –dbitmap c:\graficos\parabolica
close
Para a visualização de superfícies paramétricas em ℜ
3
, o MATLAB possui duas
funções, surf e mesh. No mesmo espírito do plot, essas funções recebem como
parâmetros 3 matrizes X, Y e Z e exibe uma reconstrução poligonal dos pontos
p(i, j)=(x(i, j),y(i,j),z(i,j)). Por exemplo, para desenhar uma esfera podemos entrar com
os comandos:
function graf_esfera
t=-pi:0.5:pi;
s=-pi:0.5:pi;
% Esse comando gera uma matriz x
onde cada elemento:
% x(i,j)=cos(t(i))*sin(s(j))
x=transpose(cos(t))*sin(s);
% y(i,j)=sin(t(i))*sin(s(j));
y=transpose(sin(t))*sin(s);
% z(i,j)=cos(s(j))
z=ones([1 length(t)])'*cos(s);
surf(x,y,z);
pause
close
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
O caso mais comum de visualização de superfícies é de gráficos de funções a dois
parâmetros z = f(x,y). Nesse caso as funções surf e mesh possibilitam um
relaxamento nos parâmetros de entrada. Os parâmetros x e y não precisam mais ser
matrizes, podendo ser vetores. Por exemplo, para plotar a gaussiana bi-
dimensional f(x,y) = exp(-x
2
) * exp(-y
2
) podemos entrar com os comandos:
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
25
function graf_fdp2normal
x=-2:0.1:2;
y=-2:0.1:2;
z=transpose(exp(-(x .*x))) * exp(-(y.*y));
surf(x,y,z)
% surf(x,y,z,'FaceColor','red','EdgeColor',...
'none'); % somente para a versão 6.0
camlight left
lighting phong % para incrementar o gráfico
pause
close
O comando mesh(X,Y,Z) cria uma perspectiva tridimensional plotando os elementos da
matriz Z em relação ao plano definindo pelas matrizes X e Y. Esse comando mesh
obedece o mesmo padrão do surf mas gera uma superfície em arame:
Salienta-se que os comandos de geração de gráficos (como plot, mesh e surf)
possuem um grande número de opções.
O comando contour3(Z) plota as curvas nível de Z.
Exemplo 2:
function ex_contour3
x=-2:0.2:2;
y=-2:0.2:2;
[X,Y]=meshgrid(x,y);
Z=X.^2+Y.^2;
surf(X,Y,Z)
pause
contour3(Z)
pause
close
5
10
15
20
5
10
15
20
0
2
4
6
8
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
26
Exercício 1: Plotar a função de distribuição de probabilidade (f.d.p) definida por:
) (
2
1
2 2
2
1
) , (
y x
e y x f
+ −
·
π
para - 3 ≤ x ≤ 3 e - 3 ≤ y ≤ 3.
function distr_normal
[X,Y]=meshgrid(-3:0.1:3,-3:0.1:3);
Z=(1/sqrt(2*pi)*exp(-0.5*(X.^2+Y.^2)));
mesh(X,Y,Z)
title('DISTRIBUIÇÃO NORMAL BIDIMENSIONAL')
xlabel('eixo X')
ylabel('eixo Y')
zlabel('eixo Z')
pause
close
4.2.3 Funções para gráficos tridimensionais
Estes são alguns comandos para plotar gráficos 3D que não foram apresentados
anteriormente:
contour3 plota contorno 3D (tipo curva de nível 3D)
cylinder gera cilindro
ezplot3 gera gráfico 3D a partir das equações paramétricas (x(t),y(t),z(t))
fill3 desenha polígono 3D
meshc combinação mesh/contour
quiver plota gradiente
rotate3d on permite girar a figura, usando-se o mouse, para visualizá-la de vários ângulos, basta
para isso apertar o botão esquerdo do mouse e arrastá-lo
slice plota fatias de um gráfico volumétrico
sphere gera esfera
stairs gráfico escada (plotar em degrau, apropriado para sinais amostrados)
stem gráfico discreto que indica pontos com marcadores
surface igual ao mesh mas os espaços são preenchidos
surfc combinação surf/contour
surfil plota superfície 3D com iluminação
uicontrol cria controle de interface de usuário na janela de figura corrente
uimenu cria menu de interface com o usuário
view especifica ponto de visualização (situação de um observador) para um gráfico 3D.
view (azimuth, elevação) % elevação descreve a localização do observador como
um ângulo acima do plano xy e azimuth refere-se ao ângulo interior ao plano xy
onde o observador fica
waterfall gráfico tipo waterfall (semelhante a mesh, sem o quadriculado)
brighten(n) controla a intensidade de cores escuras, onde:
(0< n ≤1): é usado para clarear e (-1≤ n<1): é usado para escurecer
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
27
4.3 Visualização de Imagens
O MATLAB permite também que matrizes sejam visualizadas como imagens. Também
é possível ler imagens de arquivos tipo BMP, JPEG, TIF, GIF ... e guardar essa
imagem em uma matriz, o que possibilita processamento e tratamento de imagens.
Para exemplificar a visualização de imagens, vamos tomar como exemplo a gaussiana
do exemplo anterior, discretizada na matriz z.
» x = -2:0.1:2 ;
» y = -2:0.1:2 ;
» z = transpose(exp(- (x .*x) ) ) * exp( -(y.*y) );
» imagesc(z) ; % comando para visualização da imagem
Assim como os outros recursos gráficos, a visualização de imagens possui uma
grande flexibilidade no ajuste dos parâmetros.
4.4 Demais Funções de Manipulação de Gráficos do MATLAB
As seções anteriores mostraram um conjunto muito reduzido dos recursos disponíveis
para a manipulação dos gráficos. No entanto, os outros recursos e extensões seguem
o mesmo espírito das funções apresentadas anteriormente. Para ter acesso aos
demais recursos para criação e manipulação de gráficos disponíveis, acesso o help do
MATLAB. Assim, para ver uma relação completa das funções gráficas do MATLAB:
digite.
» help graph2d gráficos em duas dimensões
» help graph3d gráficos em três dimensões
» help specgraph especialidades do gráficos
» help graphics informações das funções gráficas e uma breve explicação
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
28
4.5 Salvando figura em um formato bitmap (extensão BMP)
Para salvar uma figura num arquivo com extensão BMP, que posteriormente poderá
ser inserida, como figura, em softwares tais como: o Word for Windows, o Excel, etc.,
deve ser usado o comando: print –dbitmap path filename, onde:
path é o caminho onde será gravado o arquivo (drive e pasta)
filename é o nome do arquivo, que assumirá automaticamente a extensão bmp
Exemplos:
print –dbitmap c:windows\parabola1 a figura atual será salva, num arquivo com o nome
parabola1.bmp, na pasta windows do drive c
print –dbitmap a:\parabola1 a figura atual será salva, num arquivo com o nome
parabola1.bmp, no seu disquete
Exemplo: Análise de sinal: A caixa de ferramentas de processamento de sinal
proporciona ferramentas para examinar e analisar sinais; examinando e analisando seu
teor de freqüência ou expectro e criando filtros.
function ruido
% Construir um sinal de ruídos:
% A fc.linspace(0,10,512) cria 512 elem. igualmente espaçados entre 0 e 10
% linspace = linearmente espaçados
t=linspace(0,10,512);% eixo do tempo
x=3*sin(5*t)-6*cos(9*t)+5*randn((size(t))); % Ruído Branco normal(0, 1)
plot(t,x)% Plota sinal com ruído gaussiano
title('SINAL DE UM RUÍDO')
xlabel('EIXO DO TEMPO')
pause
print -dbitmap c:\graficos\ruido % salvar arquivo: ruido.bmp em c:\graficos
close
4.6 Sólidos em revolução
O MATLAB tem uma função chamada makevase que ativa uma janela denominada
Making a Vase (fazendo um vaso), proporcionando a possibilidade de gerar sólidos em
revolução.
Assim que é digitado makevase na linha de comandos, você deve clicar na opção New
Shape, logo aparecerá na primeira janela uma linha vermelha que representará o
centro da rotação. Você deverá, em seguida, ir clicando com o botão esquerdo do
mouse fazendo o contorno da sua figura sendo que, o último ponto deverá ser feito
com o botão direito do mouse (ou esquerdo, desde que mantenha pressionado a tecla
shift), aparecendo então a figura (sólido) na tela.
Na janela, que usa as mesmas características de confecções de um vaso de barro,
tem-se as opções:
New Shape
deve ser acionado (clicando) para se fazer uma nova figura (molde)
Comment Window é uma janela que fornece as instruções (passos) para confecções da superfície em
revolução
info abre uma janela de ajuda sobre como usar a função makevase
close fecha a janela relativa à função makevase
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
29
CAPÍTULO V
5 PROGRAMAÇÃO MATLAB
Os comandos do MATLAB são normalmente digitados na Janela de Comandos, onde
uma única linha de comando é introduzida e processada imediatamente. O MATLAB é
também capaz de executar seqüências de comandos armazenadas em arquivos.
Os arquivos que contêm as declarações do MATLAB são chamados arquivos ".m", e
consistem de uma seqüência de comandos normais do MATLAB, possibilitando incluir
outros arquivos ".m" escritos no formato texto (ASCII).
5.1 O Editor do MATLAB
Uma das ferramentas disponíveis no MATLAB é um editor de textos específico para
programas .m (o M-File Editor). Embora seja possível editar um arquivo .m em
qualquer editor de textos, o editor do MATLAB possui características que facilitam
muito o trabalho do programador. Por exemplo, ele enfatiza as palavras chaves com
cores diferentes, verifica balanço de parênteses em expressões e provê uma interface
amigável para o uso do DEBUG. Podemos invocar o M-File Editor:
1) Usando o comando:
>> edit nome-do-arquivo
ou, para abrir o editor com um arquivo vazio,
>> edit
2) Selecionando NEW M-FILE para criar um novo arquivo ou OPEN M-FILE para
editar um arquivo já existente, a partir do menu FILE.
3) Selecionando os ícones:
Desta forma, teremos a janela:
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
30
5.2 M-Files: criando seus próprios programas e funções
A maneira mais simples de se fazer um programa em MATLAB é criar um arquivo texto
com a lista de comandos desejados. Os comandos são os mesmos que são usados no
Command Window e tem a mesma sintaxe. Um programa escrito assim é chamado
script e toda vez que for chamado efetua a lista dos comandos como se eles fossem
entrados seqüencialmente via teclado. Por exemplo, para se calcular a distância entre
dois pontos p e q em R
3
podemos gerar um script com os comandos apropriados e
chamá-lo sempre que o cálculo tenha que ser efetuado.
temp = (p(1)-q(1))^2 + (p(2)-q(2))^2 + (p(3)-q(3))^2
distancia = sqrt( temp )
Esse arquivo pode ser criado com qualquer editor de texto e deve ter uma extensão .m;
por exemplo, o script acima poderia estar no arquivo distancia_p_q.m . Para chamá-
lo basta entrar com o nome do arquivo na janela de comandos (Command Window):
» p=[1 0 0];
» q=[0 1 0];
» distancia_p_q
temp =
2
distancia =
1.4142
Lembre-se que o arquivo script deve estar no diretório corrente ou no path do
MATLAB, que é a lista dos diretórios onde o MATLAB procura os arquivos, caso não
ache no diretório corrente. O diretório padrão é: bin (versão 5) ou work (versão 6).
Os arquivos script são úteis quando se deseja efetuar uma seqüência de comandos
com muita freqüência. Como mostra o exemplo anterior, os scripts se utilizam dos
dados presentes na memória (workspace) para efetuar os comandos.
Uma alternativa aos arquivos scripts são os arquivos tipo function, que admitem
parâmetros de entrada, retornam valores e possuem variáveis locais (não afetam o
workspace). Essas características fazem com que programas escritos nesse formato
atuem exatamente como os comandos nativos do MATLAB. São, portanto, uma forma
de ampliar a linguagem, e é um dos pontos chaves do MATLAB.
A palavra função no MATLAB tem um significado diferente daquele que tem na
Matemática. Aqui função é um comando, que pode ter alguns argumentos de entrada e
alguns de saída.
Exemplo:
function distancia=calcula_distancia(x,y)
% Calcula a distancia euclidiana entre os pontos x e y (vetores do Rn)
diferenca=x-y;
distancia=sqrt(diferenca*transpose(diferenca));
Exemplo 1:
>> p=[1 0 0];
>> q=[0 1 0];
>> d=calcula_distancia(p, q)
Ou:
>>d=calcula_distancia([1 0 0], [0 1 0])
d=
1.4142
Exemplo 2
distancia=calcula_distancia([3 4],[0 0])
distancia =
5
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
31
Salienta-se que essa função determina a distância entre dois vetores quaisquer,
independente do número de componente dos mesmos (desde que ambos vetores
sejam de mesma dimensão, é claro).
O arquivo tipo function também tem que ter extensão .m e deve ter o mesmo nome
usado na definição da função, descrita na primeira linha do arquivo; no exemplo
anterior o nome do arquivo deve ser calcula_distancia.m. Veja que para executar
essa função usamos o Command Window da mesma forma como se executa um
comando nativo do MATLAB:
A seguir, tem-se uma lista com alguns comandos de programação para o controle de
fluxo, bem como comandos de programação geral e interfaces com o usuário.
break Interrompe a execução de laços FOR e WHILE equivalente ao BREAK do C
clc, home limpa a tela (janela de comandos)
clear limpa as variáveis da memória do MATLAB (RAM – read access memory)
continue interrompe o fluxo do programa e recomeça um loop FOR ou WHILE, já na iteração
seguinte. Só faz sentido dentro de um FOR ou WHILE
display exibe o nome e o conteúdo de uma variável
disp exibe o conteúdo de uma variável, sem mostrar o seu nome
if condiciona execução de comandos
else usado com o comando IF
elseif usado com o comando IF
end usado para terminar a execução dos comandos IF, FOR, WHILE
error mostra mensagem e aborta a execução da função
errordlg cria uma caixa de diálogo de erro
eval executa uma expressão MATLAB definida através de uma string
feval executa uma função especificada por uma string
for repete comandos por um número de vezes especificado
fprintf grava dados em arquivo formatado
fscanf lê dados de arquivo formatado
function define m-file tipo FUNCTION (função)
global define variáveis globais (Dica: nunca as use)
helpdlg mostra uma caixa de diálogo de ajuda (HELP)
input permite requisitar (com prompt) fornecimento de dados pelo teclado
keyboard suspende a execução de uma rotina e permite que o usuário entre e execute novos
comandos pelo teclado; a rotina é continuada após o usuário digitar return
lasterr última mensagem de erro emitida pelo MATLAB
menu gera um menu de escolhas para entrada do usuário
nargchk verifica número de argumentos de entrada
pause pausa na execução de um programa até ser pressionada uma tecla
pause(n) pausa na execução de um programa de “n” segundos
questdlg cria uma caixa de diálogo de perguntas
rbbox caixa (rubberband box) para seleção de região em gráfico
return causa a saída imediata de uma função
sprintf grava dados formatados em uma única string
switch e case equivalente ao CASE em Pascal ou o C. É um teste para múltiplos casos
uigetfile caixa de diálogo para obter o nome de um arquivo existente
uiputfile caixa de diálogo para especificar o nome de um novo arquivo
warndlg cria uma caixa de diálogo para advertências (warning)
while repete comandos enquanto condição especificada for verdadeira
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
32
5.3 Principais comandos de programação
Como qualquer linguagem de programação, o MATLAB tem comandos específicos
para o controle do fluxo do algoritmo, tais como: IF, FOR e WHILE. Esses comandos
são similares aos encontrados em outras linguagens como C ou Pascal, e sua sintaxe
é bastante simples.
A sintaxe do IF é:
if teste
..........
elseif
..........
else
..........
end
O elseif e o else não são obrigatórios, mas o end é. O if (assim como o for e o while)
pode ser usado tanto em linhas de comando quanto em textos de programas (onde
serão mais úteis de fato).
Exemplo 01: Fazer um programa que permita calcular valores para a função:
¹
¹
¹
'
¹
> + −
≤ ≤
<
·
1 x se , 2
1 x 1 - se ,
-1 x se , 1
) (
2
x
x x f
function a=program1(x)
if x<-1
a=1;
elseif x>=-1 & x<=1
a=x ^2;
else
a=-x+2;
end
A sintaxe do FOR é:
for variavel = vetor
..........
end
O valor de variável recebe o conteúdo de cada coluna de vetor seqüencialmente e,
para cada conteúdo que receba, executa o corpo do FOR. Tipicamente o FOR tem o
seguinte formato exibido no exemplo a seguir
Exemplo 02:
for i = 1:10
disp(i*i )
end
O loop acima é executado 10 vezes, com a variável i assumindo o valor 1 no primeiro
loop, 2 no segundo loop, 3 no terceiro, etc. O comando disp executa um display do
argumento, i
2
no caso. Portanto esse loop simples imprime os 10 primeiros quadrados
perfeitos na janela de comandos (Command Window).
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
33
É comum construções em que conjuntos de laços for são usados principalmente com
matrizes.
Exemplo 03:
for i=1:8
for j=1:8
A(i,j)=i+j;
B(i,j)=i-j;
end
end
C=A+B;
disp(C) % mostra o resultado sem mostrar o nome da variável
Exemplo 04: Construir um programa que plota o gráfico da função:
¹
¹
¹
'
¹
> + −
≤ ≤
<
·
1 x se , 2
1 x 1 - se ,
-1 x se , 1
) (
2
x
x x f
Dica: Use o programa construído no exemplo 01 (program1)
function program2
clear
n=0;
for t=-2:0.01:2 % gerar 401 números
n=n+1;
x(n)=t;
y(n)=program1(t);%aqui chama-se o programa "program 1", com entrada t e saída
y(n)
end
plot(x,y)
pause
close % fecha a janela gráfica
Em geral, as declarações for e if-elseif-else aparecem juntas em um programa
Exemplo 06:
for i=1:5
for j=1:5
if i==j;
A(i,j)=1;
elseif abs(i-j)==1
A(i,j)=-1;
else
A(i,j)=0;
end
end
end
disp(A) % mostra o resultado sem mostrar o nome da variável
Exemplo 07: Criar um programa que verifique se o número dado é positivo, se sim
determinar se o mesmo é par ou ímpar.
function par_impar(n)
if n<0 % se n é negativo
disp ('O número dado é negativo')
elseif rem(n,2)==0 % se número é positivo e par
disp ('O número dado é positivo e par')
else
disp('O número dado é positivo e ímpar')
end
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
34
A sintaxe do WHILE é simples:
while teste
..........
end
Exemplo 08: Usando o comando while determine o fatorial de um número dado
function fatorial(n)
i=1;
prod=1;
if n<0
disp( ' ')
error('n deve ser não negativo')
else
while i<=n
prod=prod*i;
i=i+1;
end
disp(' ')
disp(prod)
end
Exemplo 09: Plotar o gráfico da função y=a*x.^2+b*x+c, no intervalo x
v
- 5 < x < x
v
+ 5
function parabola1
clear % limpa variáveis e funções da memória (RAM)
clc % limpa a tela
aux='s';
while aux=='s';
clc % limpa a janela de comandos, posiciona o cursor no início da tela
a=input('a=');
b=input('b=');
c=input('c=');
xv=-b/2*a;
x=(xv-5):0.01:(xv+5);% definição do domínio
y=a*x.^2+b*x+c;
plot(x,y);
figure(1)
pause
clc % limpa a tela
close % fecha a figura
aux=input('Plotar outro gráfico? (s-sim, n-não)==>' , 's');
% Pergunta se quer plotar um outro gráfico. Apenas quando for digitado "n"
que o programa encerra-se, caso contrário continua indefinidamente o loop.
end
O comando switch executa certas afirmações baseando-se no valor de uma variável
ou expressão. É usado quando têm-se opções de escolha. Sua forma básica é:
switch expressão
case valor1
afirmações
case valor2
afirmações
...
otherwise
afirmações
end
Obs. : Se o primeiro caso for verdadeiro os outros casos não são executados.
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
35
Exemplo 10:
function ex_switch1
var=input('Entre com um dos valores:
-1, 0 ou 1 ==> ');
switch var
case –1
disp('Número negativo')
case 0
disp('Zero')
case 1
disp('Número positivo')
otherwise
disp('outro valor')
end
% multiplos condicionais em cada caso
function ex_switch2
var=input('Entre com um valor ==> ');
switch var
case 1
disp('1')
case {2,3,4}
disp('2 ou 3 ou 4')
case 5
disp('5')
otherwise
disp('outro valor')
end
O comando break permite uma saída antecipada de um for ou while. Esse comando
faz com que o laço mais interno seja terminado imediatamente.
Exemplo 11:
function modifica_matriz
A=[1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5];
X='s';
for i=1:5
if x=='q'
break
end
j=1;
while j<=5
['A('num2str(i),','num2str(j),')='num2str(A(i,j))]
x=input('Modifica? (s-sim, n-não, p-próxima linha, q-sair)==>','s');
if x=='s'
A(i,j)=input('Entre como novo valor de A(i,j)==>');
j=j+1;
clc % limpa a tela
end
if x=='n'
j=j+1;
clc
end
if x=='p'
clc
break % interrompe o WHILE, para mudar para outra linha
end
if x=='q'
clc
break
end
end
end
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
36
5.4 Interface com o usuário
Neste item, apresentaremos os recursos disponíveis no MATLAB para
desenvolvimento de interface com usuário.
• display: exibe o nome e o conteúdo de uma variável
• disp: exibe o conteúdo de uma variável, sem mostrar o seu nome
• input: requisita uma entrada de dados através do teclado
Caixas de diálogos
As caixas de diálogos possibilitam a construção de programas com interface mais
amigável. Por exemplo, ao invés de utilizarmos a função input podemos usar a função
inputdlg (entrada de dados com caixa de diálogos), a qual também permite que se
insira dados através do teclado.
Exemplo 13:
function area_retangulo
%CALCULO DA ÁREA DE UM RETÂNGULO
aviso={'Entre com a largura:' ,'Entre com o comprimento:'};
titulo='ÁREA DE UM RETÂNGULO';
linhas=1;
resposta=inputdlg(aviso,titulo,linhas);
larg=str2num(char(resposta(1)));
comp=str2num(char(resposta(2)));
disp(' **************')
disp(' * ÁREA *')
disp(' **************')
area=larg*comp;
disp(' 'area)
MENU: Lista de escolhas que aparece na tela enquanto determinado programa está
sendo executado, ou seja, gera um menu de escolhas para entrada do usuário.
Exemplo 11:
function imc
k=menu('AVALIAÇÃO FÍSICA - IMC','QUER VER SUA SITUAÇÃO FÍSICA', ...
'FIM - PROGRAMA');
if k==1
dados = {'ENTRE COM O SEU PESO (kg):','ENTRE COM A SUA ALTURA (m):'};
titulo = 'ÍNDICE DE MASSA CORPÓREA – IMC';
linhas=1;
resposta=inputdlg(dados,titulo,linhas);
peso=str2num(char(resposta(1)));
altura=str2num(char(resposta(2)));
format bank
indice = peso/(altura*altura);
disp(' ----------------------------------------------------------')
disp(' |PESO (kg) | ALTURA (m) | ÍNDICE DE MASSA CORPÓREA - IMC |')
disp(' ----------------------------------------------------------')
saida=[peso altura indice];
disp(sprintf('%10.2f %11.2f %17.2f',saida'))
disp(' ')
if indice < 20
disp(' ')
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
37
disp(' VOCÊ DEVE ALIMENTAR-SE MELHOR, REDUZIR O STRESS, ENGORDAR ')
disp(' ')
end
if indice >= 20 & indice <=25
disp(' ')
disp(' TUDO OK!, MANTENHA A FORMA')
disp(' ')
end
if indice > 25 & indice < 30
disp(' ')
disp(' VOCÊ DEVE ALIMENTAR-SE MELHOR, REDUZIR O PESO ')
disp(' ')
end
if indice >= 30
disp(' ')
disp(' REPENSE O SEU MODO DE VIVER, OU ...')
disp(' ')
end
pause
imc
else
% sair do programa
disp(' ')
disp(' -------------------------')
disp(' |OBRIGADO POR USAR: IMC |')
disp(' -------------------------')
disp(' ')
end
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
38
CAPÍTULO VI
6 EXPRESSÕES SIMBÓLICAS
Agora, vamos ver como podemos manipular com expressões que além de números e
variáveis numéricas, contém também variáveis simbólicas.
6.1 Definindo variáveis simbólicas
Primeiro precisamos dizer ao MATLAB que x é uma variável simbólica.
sym: Cria objeto simbólico
syms: Atalho para criar múltiplos objetos simbólicos
Uma vez definido que a variável x é uma variável simbólica, podemos definir
expressões que envolvem esta variável.
Exemplo:
»x=sym('x')
x=
x
»y=x+2*x
y=
3*x
Ou
» syms x
» y=x+2*x
y =
3*x
Para definirmos várias variáveis podemos utilizar as seguintes sintaxes.
Exemplo:
» x= sym('x')
x =
x
» y= sym('y')
y =
y
» z= sym('z')
z =
z
Ou simplesmente:
» syms x y z
6.2 Multiplicação literal de polinômios
Sintaxe: collect(f) determina o resultado da multiplicação dos polinômios de f
Exemplo: f=(x^2+1)*(x^3+2*x)
» x=sym('x');
» f=(x^2+1)*(x^3+2*x)
f =
(x^2+1)*(x^3+2*x)
» produto=collect(f)
produto =
x^5+3*x^3+2*x
» pretty(produto)
5 3
x + 3 x + 2 x
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
39
6.3 Simplificação de expressões
simplify(f): simplifica expressões usando identidade
simple(f): simplifica expressões e coloca na forma técnica
Exemplo 1
» x=sym('x');
» f=sin(x)^2+cos(x)^2
f =
sin(x)^2+cos(x)^2
» simplif=simplify(f)
simplif =
1
Exemplo 2
» x=sym('x');
» f=(x+1)*(x-1)
f =
(x+1)*(x-1)
» simples=simple(f)
simples =
x^2-1
Os comandos do exemplo 1 mandam o MATLAB simplificar a expressão
sen
2
x + cos
2
x. Primeiro informamos que x é uma variável simbólica, depois pedimos
para simplificar a expressão que envolve x. Neste caso, as funções simplify e simple
tem como argumento de entrada uma expressão simbólica e de saída também.
6.4 Fatoração de polinômios
factor(f): fatora o polinômio f, expressando-o como um produto de polinômios
Exemplo:
» x=sym('x');
» f=x^4-5*x^3+5*x^2+5*x-6
f =
x^4-5*x^3+5*x^2+5*x-6
» fator=factor(f)
fator =
(x-1)*(x-2)*(x-3)*(x+1)
6.5 Expansão de polinômios
expand(f): distribui o produto através de uma soma
Exemplo
» x=sym('x');
» f=(x-1)*(x-2)*(x-3)*(x+1)
f =
(x-1)*(x-2)*(x-3)*(x+1)
» expans=expand(f)
expans =
x^4-5*x^3+5*x^2+5*x-6
6.6 Exibição de expressões na forma mais legível
pretty(f): exibe o conteúdo da expressão f em um formato mais legível
» x=sym('x');
» f=x^4-5*x^3+5*x^2+5*x-6
f =
x^4-5*x^3+5*x^2+5*x-6
» pretty(f)
4 3 2
x - 5 x + 5 x + 5 x - 6
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
40
6.7 Conversão da forma numérica para a forma simbólica
poly2sym(f,'var'):
» resp=poly2sym([1 -5 6],'x')
resp =
x^2-5*x+6
» pretty(resp)
2
x - 5 x + 6
6.8 Conversão da forma simbólica para a forma numérica
Sintaxe:sym2poly(f):
» x=sym('x');
» f=x^2-5*x+6
f =
x^2-5*x+6
» coef=sym2poly(f)
coef =
1 -5 6
6.9 Inversa de funções
Sintaxe: finverse(função, variável)
Exemplo:
» syms x
» y=2*x-4
y =
2*x-4
» f_inversa=finverse(y)
f_inversa =
2+1/2*x
» pretty(f_inversa)
2 + 1/2 x
6.10 Somatória de expressões
Sintaxe: symsum(função, variável, a, b)
Exemplo: ∑

n
n
1
2
) 1 2 (
» syms n
» soma=symsum(2*n-1,1,n)
soma =
(n+1)^2-2*n-1
» expande=expand(soma)
expande =
n^2
» pretty(expande)
2
n
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
41
6.11 Função composta
Sintaxe: compose(função f, função g) ! fog = f(g(x))
Exemplo: Dadas as funções f(x)=x+1 e g(x)=x
2
determine:
a) fog=f(g(x))
» syms x
» f_x=x+1;
» g_x=x^2;
» f_o_g=compose(f_x,g_x)
f_o_g =
x^2+1
» pretty(f_o_g)
2
x + 1
b) gof=g(f(x))
» syms x
» g_x=x^2;
» f_x=x+1;
» g_o_f=compose(g_x,f_x)
g_o_f =
(x+1)^2
» expandir=expand(g_o_f)
expandir =
x^2+2*x+1
» pretty(expandir)
2
x + 2 x + 1
6.12 Combinação das funções: pretty e expand
Exemplo: Determinação do binômio de Newton: (x+2)
n
» pretty(expand((x+2)^0))
1
» pretty(expand((x+2)^1))
x + 2
» pretty(expand((x+2)^2))
2
x + 4 x + 4
» pretty(expand((x+2)^3))
3 2
x + 6 x + 12 x + 8
» pretty(expand((x+2)^4))
4 3 2
x + 8 x + 24 x + 32 x + 16
» pretty(expand((x+2)^5))
5 4 3 2
x + 10 x + 40 x + 80 x + 80 x + 32
» pretty(expand((x+2)^6))
6 5 4 3 2
x + 12 x + 60 x + 160 x + 240 x + 192 x + 64
Exemplo geral:
Dadas duas funções f(x) = 2x
2
+3x-5 e g(x) = x
2
-x+7, podemos fazer uma série de
operações algébricas envolvendo estas funções, tais como:
a) f+g b) f-g c) f*g
d) expandir (f*g) e)f/g f) expandir(f/g)
g) usar o comando pretty para tornar mais fácil a visualização dos resultados
h) f
3
i) expandir(f
3
)
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
42
>>x=sym(‘x’); % define a variável x como simbólica
>>f=2*x^2+3*x-5; g=x^2-x+7; % define as funções f e g
>>A=f+g
A =
3*x^2+2*x+2
>>B=f-g
B =
x^2+4*x-12
>>C=f*g
C =
(2*x^2+3*x-5)*(x^2-x+7)
>>D=expand(C)
D =
2*x^4+x^3+6*x^2+26*x-35
>>E=f/g
E =
(2*x^2+3*x-5)/(x^2-x+7)
>>F=expand(E)
F =
2/(x^2-x+7)*x^2+3/(x^2-x+7)*x-5/(x^2-x+7)
>>pretty(F)
2
x x 5
2 ---------- + 3 ---------- - ----------
2 2 2
x - x + 7 x - x + 7 x - x + 7
>>H=f^3
H =
(2*x^2+3*x-5)^3
>>I=expand(H)
I=
8*x^6+36*x^5-6*x^4-153*x^3+15*x^2+225*x-125
Observe que o MATLAB não faz as simplificações ou expansões automaticamente.
Para isso, usamos os comandos simplify que simplifica e expand que faz a expansão.
Além destes, usamos anteriormente também o comando pretty, que mostra a
expressão de uma forma mais fácil de enxergar. Além destes, existe o comando
simple, que tenta encontrar a forma mais simples de escrever uma expressão.
O MATLAB pode realizar operações mais avançadas sobre expressões simbólicas. A
função compose calcula a composição das funções f(x) e g(x) em f(g(x)), a função
finverse encontra a inversa funcional de uma expressão e a função subs substitui uma
variável por um número (ou por outra variável) em uma expressão.
Por exemplo:
>> f=1/(1-x^2); g=sin(x);
>> a=compose(f,g)
a = 1/(1-sin(x)^2)
>>b=compose(g,f)
b = sin(1/(1-x^2))
>>c=finverse(g)
c = asin(x)
>>d=subs(f,x,2)
d = -1/3
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
43
O MATLAB pode resolver equações literais. Por exemplo, para resolver a equação:
ax
2
+bx+c = 0
algebricamente, podemos usar os comandos:
» a=sym('a');
» b=sym('b');
» c=sym('c');
» x=sym('x');
Ou simplismente:
» syms a b c x
% define as variáveis a, b, c e x como simbólicas
» raizes=solve(a*x^2+b*x+c)
» raizes =
[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]
O MATLAB pode exibir este resultado de uma forma mais fácil de enxergar usando a
função pretty.
» pretty(raizes)
[ 2 1/2]
[ -b + (b - 4 a c) ]
[1/2 --------------------]
[ a ]
[ ]
[ 2 1/2]
[ -b - (b - 4 a c) ]
[1/2 --------------------]
[ a ]
Um outro exemplo: Cálculo do determinante de uma matriz de ordem 2 e 3
Determinante 2x2
» syms a b c d
» A=[a b; c d]
» DET=det(A)
DET =
a*d-b*c
Determinante 3x3
» syms a b c d e f g h i
» A=[a b c; d e f;g h i]
» DET=det(A)
DET =
i*a*e-a*f*h-i*d*b+d*c*h+g*b*f-g*c*e
É possível plotar o gráfico de uma função matemática, sem definir o domínio da
mesma.
»sym x ou » x = sym('x') % define a variável x como simbólicas
exemplo 1:
» ezplot(sin(x))
exemplo 2:
» ezplot(x^2)
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
44
Abaixo segue um resumo das funções para manipulação de expressões algébricas:
diff(f) calcula a derivada de f
compose(f,g) determina a composta f(g(x))
expand(expr) expande uma expressão expr
finverse(expr) determina a inversa funcional da expressão expr
pretty(expr) exibe a expressão expr numa forma mais bonita
simple procura encontrar uma forma mais simples de escrever uma expressão expr
simplify(expr) simplifica a expressão expr
solve(expr) acha a(s) solução(es) da equação expr = 0
subs(expr,x,a) substitui na expressão expr a variável x por a
syms x y z a b define as variáveis simbólicas x, y, z, a e b
Existem várias outras funções para manipulação de expressões algébricas. Você pode
obter informações sobre elas digitando help symbolic. Uma função interessante que
mostra as capacidades do MATLAB em tratar com funções matemáticas é funtool que
é uma calculadora para funções.
6.13 Limites
Sintaxe: limit(função,valor) % Determina o limite de uma expressão, para um valor
Exemplos:
x
x
x
) sen(
lim
0 →
» syms x
» limit(sin(x)/x,0)
1
2
4
lim
2
2



x
x
x
» syms x
»limit((x^2-4)/(x-2),2)
4
Exercício:
Usar mudança de variável e o MATLAB para provar que:
) 1 ( 71 , 2
1
1 lim xp e
x
x
x
· ·
,
_

¸
¸
+
∞ →
Solução: Fazendo 0 , x
1
→ ∞ → ⇒ · t quando
t
t !
( ) · +

t t
t
1
1 lim
0
» syms t
» limit((1+t)^(1/t),0)
exp(1)
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
45
6.14 Diferenciação (derivadas)
Já vimos que a sintaxe polyder (p) determina a derivada numérica do polinômio p.
Para determinar as derivadas simbólicas usamos a seguinte sintaxe:
diff(f, var, ord), onde:
f: função literal de uma ou mais variáveis
var: variável em relação a qual deseja-se derivar
ord: ordem da derivada a ser calculada
Assim, tem-se:
diff(f) derivada de f em relação a x
diff(f,s) derivada de f em relação a s
diff(f,2) derivada de f duas vezes em relação a x
diff(f,s,2) derivada de f em relação a s duas vezes
Exemplo 01: Calcular a derivada de 2.a ordem da função f(x) = x
3
» x=sym('x');
» deriv=diff(x^3,x,2)
deriv =
6*x
Exemplo 02: Calcular a derivada de 1.a ordem da função f(x) = x
2
+y
2
a) Em relação a variável x
» syms x y
» der1_x=diff(x^2+y^2,x,1)
der1_x =
2*x
b) Em relação a variável y
» syms x y
» der1_y=diff(x^2+y^2,y,1)
der1_y =
2*y
Usando o MATLAB, determine as derivadas das seguintes funções:
Exemplo 03: f x
x
x
( ) sen ·
+
¸
¸

_
,

3
2
1
⇒ ⇒⇒ ⇒

,
_

¸
¸
+ +
+
·
1
cos .
) 1 (
3
) ( '
2
3
2 2
2 4
x
x
x
x x
x f
» sym x
» a=diff(sin((x^3)/(x^2+1)))
a =
cos(x^3/(x^2+1))*(3*x^2/(x^2+1)-2*x^4/(x^2+1)^2)
» pretty(a)
3 / 2 4 \
x | x x |
cos(------) |3 ------ - 2 ---------|
2 | 2 2 2|
x + 1 \ x + 1 (x + 1) /
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
46
Exemplo 04: f x x x ( ) sen .ln ·
2 3
⇒ ⇒⇒ ⇒ x
x
x x x x f
2 3
sen .
3
ln . cos . sen 2 ) ( ' + ·
» sym x
» b=diff((sin(x))^2*log(x^3))
b =
2*sin(x)*log(x^3)*cos(x)+3*sin(x)^2/x
» pretty(b)
2
3 sin(x)
2 sin(x) log(x ) cos(x) + 3 -------
x
Exemplo 05: f x x x ( ) cos cos · −
1
3
3
⇒ ⇒⇒ ⇒ x x x x x f
3
sen sen ). ( cos ) sen( ) ( '
2
− · + − ·
» sym x
» c=diff(cos(x)-(1/3)*(cos(x)^3))
c =
-sin(x)+cos(x)^2*sin(x)
» pretty(c)
2
-sin(x) + cos(x) sin(x)
Exemplo 06: f x x e
x
( ) sec · +
6
⇒ ⇒⇒ ⇒
x
e x tg x x f
6 2
) ( ). ( sec 2 ) ( ' + ·
» syms x e
» d = diff((sec(x))^2)+((e)^(6*x))
d =
2*sec(x)^2*tan(x)+e^(6*x)
» pretty(d)
2 (6 x)
2 sec(x) tan(x) + e
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
47
6.15 Integração
Cálculo numérico da integral definida
São dadas três funções para calcular a área sob a curva num intervalo finito.
A integração numérica usando o processo chamado de quadratura, no MATLAB,
pode ser feita através das funções:
• quad Integração numérica usando a regra de Simpson recursiva (baixa
ordem).
• quad8 Integração numérica usando a regra de Newton-Cotes adaptativa (alta
ordem).
Além dos métodos anteriores, o MATLAB, determina a integral definida através
das funções:
• trapz aproxima a integral sobre a função, pelo somatório das áreas dos
trapézios
• trapz (x,y) dá o valor da integral de y com seu respectivo x usando para isso
o método dos trapézios. Método trapezoidal.
Integrais simbólicas
Sintaxe: int('função',variável, a, b) ! determina a integral literal

b
a
dx x f ) (
» integ_sen=int('sin(x)',a,b)
integ_sen =
-cos(b)+cos(a)
» pretty(integ_sen)
- cos(b) + cos(a)


dx
x
x
1
3 » integral=int('x^3/sqrt(1-x)')
integral =
2/7*(1-x)^(7/2)-6/5*(1-x)^(5/2)+2*(1-x)^(3/2)-2*(1-x)^(1/2)
» pretty(integral)
7/2 5/2 3/2 1/2
2/7 (1 - x) - 6/5 (1 - x) + 2 (1 - x) - 2 (1 – x)
dx
x
x


2
0
3
1
» integral=int('x^3/sqrt(1-x)',0,1)
integral =
32/35
outras sintaxes para a integral literal
int(f) é a integral indefinida da função f em relação à variável x
int(f,s) é a integral indefinida da função f em relação à variável s
int(f,a,b) é a integral definida da função f em relação à variável x de a até b
int(f,s,a,b) é a integral definida da função f em relação à variável s de a até b
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
48
6.16 Equações diferenciais
Para resolver uma Equação Diferencial Ordinária (E.D.O.) no MATLAB, pode se usar a
função dsolve, cuja sintaxe é dada por:
dsolve(f, cond,'var'), onde:
f : função; cond : são as condições iniciais (ou de contorno) e var: variável
Nota: O MATLAB, utiliza como padrão a variável t como sendo a variável
independente. Para alterar, basta informar como um último parâmetro a variável a ser
considerada como independente.
Exemplos:
1) Resolver a E.D.O. de 1.a ordem:
2
1 y
dt
dy
+ · com condição inicial y(0)=1
»sol=dsolve('Dy=1+y^2,y(0)=1','x')
sol=
tan(x+1/4*pi)
2) Resolver a equação diferencial f'(x)=6x
2
+x-5 sujeita à condição inicial f(0)=2
» sol=dsolve('Dy=6*x^2+x-5,y(0)=2','x')
sol=
2*x^3+1/2*x^2-5*x+2
3) Resolver a equação diferencial f''(x) = 5cos(x) + 2sen(x) sujeita às condições
iniciais f(0) = 3 e f'(0) = 3
» sol=dsolve('D2y=5*cos(x)-2*sin(x)','y(0)=3','Dy(0)=4','x')
sol =
-5*cos(x)+2*sin(x)+8+2*x
Outras funções relacionadas com E.D.O.
ode23 Resolve equações diferenciais pelo método de Runge-Kutta de 2ª/3ª ordens (baixa ordem)
ode23p Resolve eq. dif. através de ode23, plotando o resultado
ode45 Resolve eq. dif. pelo método de Runge-Kutta-Fehlberg de 4ª/5ª ordens (alta ordem)
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
49
CAPÍTULO VII
7 TÓPICOS ESPECIAIS
OTIMIZANDO A PERFORMANCE DE CÓDIGOS MATLAB
Pode-se freqüentemente melhorar a velocidade de execução de um código em
MATLAB ao trocar os laços for e while por vetores ou matrizes que são os elementos
essenciais do MATLAB.
Exemplo: Calcular o valor do seno de 1001 no intervalo [0, 1] com elementos
igualmente espaçados
1) Usando o comando for
function performance
tic
i=0;
for t=0:0.01:10
i=i+1;
y(i)=sin(t);
end
pause(1)
toc
Resultado:
elapsed_time =
1.3200
1) Usando a forma de vetor
function performance
tic
t=0:0.01:10;
y=sin(t);
pause(1)
toc
Resultado:
elapsed_time =
1.0400
ESTATÍSTICA
Função
Distribuição
Acumulada
Função
Distribuição
Acumulada
Inversa
Função
Densidade de
Probabilidade
Geração de
Amostra
Aleatórias
DISTRIBUIÇÃO COMANDO COMANDO COMANDO COMANDO
Beta betacdf betainv betapdf betarnd
Binomial binocdf binoinv binopdf binornd
Qui-quadrado chi2cdf chi2inv chi2pdf chi2rnd
Exponencial expcdf expinv exppdf exprnd
F de Snedecor fcdf finv fpdf frnd
Gama gamcdf gaminv gampdf gamrnd
Geométrica geocdf geoinv geopdf geornd
Hipergeométrica hygecdf hygeinv hygepdf hygernd
Normal normcdf norminv normpdf normrnd
Poisson poisscdf poissinv poisspdf poissrnd
t de Student tcdf tinv tpdf trnd
Uniforme discreta unicdf unidinv unipdf unirnd
Uniforme contínua unifcdf unifinv unifpdf unifrnd
Weibull weibcdf weibinv weibpdf weibrnd
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
50
Análise Estatística dos Dados
Estatística Descritiva
Comando Estatística descritiva
corrcoef coeficiente de correlação
cov matriz covariância
geomean média geométrica
harmmean média harmônica
kurtosis coeficiente de curtose
mean média aritmética
median mediana
moment momento centrado
skewness coeficiente de assimetria
std desvio padrão
var variância
Outras funções básicas
Declaração Significado
max valor máximo
min valor mínimo
sort ordenar em ordem crescente
sum soma dos elementos
prod produto dos elementos
cumsum soma acumulada
cumprod produto acumulado
diff diferença entre elementos
length número de componentes do vetor
Análise Gráfica
Declaração Significado
boxplot boxplot da análise exploratória
normplot análise de normalidade
hist histograma
histfit histograma ajustado a normal
bar gráfico de barras
barh gráfico de colunas
scatter gráfico dispersão dos dados
plot gráfico de linha
pareto gráfico de pareto ou curva ABC
pie, pie3 gráfico em setores (pizza)
area gráfico de área
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
51
Exemplos
1) Exemplo de boxplot para 3 amostras normais
»x1=normrnd(10,2,50,1);
»x2=normrnd(15,4,50,1);
»x3=normrnd(20,5,50,1);
»x=[x1 x2 x3];
»boxplot(x)
1 2 3
5
10
15
20
25
30
V
a
l
u
e
s
Column Number
2) Gerar uma amostra normal de tamanho 100, de média zero e desvio padrão 1,
construir o histograma e determinar: o valor máximo, o valor mínimo e a soma total.
x=normrnd(0,1,100,1);
hist(x)
maximo_x=max(x)
minimo_x=min(x)
soma_x=sum(x)
RESULTADOS
maximo = 2.9199
minimo = -2.7532
soma = -2.2903
-3 -2 -1 0 1 2 3
0
2
4
6
8
10
12
14
16
18
20
3) Gerar uma amostra normal com 100 elementos, de média 70 e desvio padrão 10 e
analisar a normalidade através do comando normplot
»x=normrnd(70,100,100,1);
»normplot(x)
-200 -150 -100 -50 0 50 100 150 200
0.003
0.01
0.02
0.05
0.10
0.25
0.50
0.75
0.90
0.95
0.98
0.99
0.997
Data
P
r
o
b
a
b
il
it
y
Normal Probability Plot
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
52
4) Dados x = [ 1 2 3 4 5 6 7 8 9 10] e y = [ 8 2 6 0 1 3 6 8 3 5]
a) Representar o diagrama de dispersão para x e y plot(x,y,'o')
x=[1 2 3 4 5 6 7 8 9 10]
y=[8 2 6 0 1 3 6 8 3 5]
plot(x,y,'o')
b) Representar um gráfico de linha plot(x,y)
x=[1 2 3 4 5 6 7 8 9 10]
y=[8 2 6 0 1 3 6 8 3 5]
plot(x,y)
5) Para as variáveis alturas e pesos de um grupo de 10 pessoas adultas, dadas pela
tabela a seguir, calcular:
altura(cm) 180 181 170 165 178 156 165 190 175 173
pesos(kg) 80 82 75 68 78 60 63 85 70 72
a) A altura média e o peso médio
b) O desvio padrão para a altura e para o peso
c) O coeficiente de correlação
d) A maior altura e o maior peso
e) A menor altura e o menor peso
a) med_alt =
173.30
med_peso =
73.30
b) desv_alt =
9.75
desv_peso =
8.21
c) coef_corr =
1.0 0.94
0.94 1.00
d) maior_alt =
190.00
maior_peso =
85.00
e) menor_alt =
156.00
menor_peso =
60.00
6) Gerar uma amostra aleatória Normal de tamanho 100, de média 0 e desvio padrão
1, construindo o histograma ajustado a curva normal.
»v=normrnd(0,1,100,1);
»histfit(v)
-3 -2 -1 0 1 2 3
0
2
4
6
8
10
12
14
16
18
20
7) Gerar uma amostra Normal com média 0 e desvio padrão 1, com o tamanho n da
amostra, sendo informado via teclado.
n = input('Entre com o tamanho da amostra, n ==> ');
amostra = normrnd(0,1,n,1)
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
53
8) Gerar o gráfico da função de distribuição normal padronizada univariada
(N(0,1): µ = 0 e σ = 1) e determinar os percentuais de t1σ, t2σ, t3σ e t4σ
function y=fdp_normal(x)
y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));
function distr_normal_integral
Area_1S=quad('fdp_normal',-1,1)*100;
Area_2S=quad('fdp_normal',-2,2)*100;
Area_3S=quad('fdp_normal',-3,3)*100;
Area_4S=quad('fdp_normal',-4,4)*100;
disp(' ')
disp([' MAIS ou MENOS 1 SIGMA = 'num2str(Area_1S) '%'])
disp(' ')
disp([' MAIS ou MENOS 2 SIGMA = 'num2str(Area_2S) '%'])
disp(' ')
disp([' MAIS ou MENOS 3 SIGMA = 'num2str(Area_3S) '%'])
disp(' ')
disp([' MAIS ou MENOS 4 SIGMA = 'num2str(Area_4S) '%'])
disp(' ')
pause
x=-4:0.01:4;
y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));
plot(x,y,'b.')
grid
title('DISTRIBUIÇÃO NORMAL UNIVARIADA')
xlabel('eixo X')
ylabel('eixo Y')
%gtext('<------------- 99,99% ---------------->')
pause
hold on
x=-3:0.01:3;
y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));
plot(x,y,'r.')
%gtext('<--------- 99,73% --------->')
pause
hold on
x=-2:0.01:2;
y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));
plot(x,y,'g.')
%gtext('<------ 95,44% ------>')
pause
hold on
x=-1:0.01:1;
y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));
plot(x,y,'y.')
%gtext('<-- 68,27% -->')
legend('+ ou - 4 sigma','+ ou - 3 sigma','+ ou - 2 sigma','+ ou - 1 sigma')
pause
x=-2:0.01:2;
y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));
area(x,y)
pause
close
>> distr_normal_integral
MAIS ou MENOS 1 SIGMA = 68.2691%
MAIS ou MENOS 2 SIGMA = 95.4499%
MAIS ou MENOS 3 SIGMA = 99.733%
MAIS ou MENOS 4 SIGMA = 99.9938%
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
54
OUTRA FORMA: Usando a função MATLAB normpdf
function normal
x=-3:0.01:3;
y=normpdf(x,0,1);
plot(x,y)
xlabel ('Eixo x')
ylabel ('Eixo y')
title ('DISTRIBUIÇÃO NORMAL')
grid %grade
pause
close
format bank
sigma1=(normcdf(1,0,1)-normcdf(-1,0,1))*100;
sigma2=(normcdf(2,0,1)-normcdf(-2,0,1))*100;
sigma3=(normcdf(3,0,1)-normcdf(-3,0,1))*100;
sigma4=(normcdf(4,0,1)-normcdf(-4,0,1))*100;
disp(' ')
disp('PERCENTUAIS DA DISTRIBUIÇÃO NORMAL ')
disp(' ')
disp([' MAIS ou MENOS 1 SIGMA = 'num2str(sigma1) '%'])
disp(' ')
disp([' MAIS ou MENOS 2 SIGMA = 'num2str(sigma2) '%'])
disp(' ')
disp([' MAIS ou MENOS 3 SIGMA = 'num2str(sigma3) '%'])
disp(' ')
disp([' MAIS ou MENOS 4 SIGMA = 'num2str(sigma4) '%'])
Resultados:
PERCENTUAIS DA DISTRIBUIÇÃO NORMAL
MAIS ou MENOS 1 SIGMA = 68.2689%
MAIS ou MENOS 2 SIGMA = 95.45%
MAIS ou MENOS 3 SIGMA = 99.73%
MAIS ou MENOS 4 SIGMA = 99.9937%
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
55
REGRESSÃO LINEAR SIMPLES
A seguir tem-se alguns exemplos de regressão linear simples através do método dos
mínimos quadrados.
9) Tomando-se a produção de milho (Y) e a quantidade de fertilizante (X) necessária,
dados pela tabela a seguir, faça a regressão linear e calcule o coeficiente de
correlação.
Fertilizantes (X) 6 10 12 14 16 18 22 24 26 32
Milho (Y) 40 44 46 48 52 48 60 68 74 80
function reglinear(X,Y)
% DETERMINAÇÃO DA FUNÇÃO DE REGRESSÃO LINEAR E DO COEFICIENTE DE CORRELAÇÃO e R2
m_est=(mean(X.*Y)-mean(X)*mean(Y))/(mean(X.^2)-(mean(X).^2));
q_est=mean(Y)-m_est*mean(X);
a=(mean(X.*Y)- mean(X)* mean(Y)).^2;
b=(mean(X.^2)-(mean(X)).^2)*((mean(Y.^2)-(mean(Y)).^2));
RSQUARE=sqrt(a/b)*100;
RSQUARE2=(a/b)*100;
disp(' ')
disp(' -------------------------------------------------------------------')
disp('| MODELO DE REGRESSÃO LINEAR SIMPLES: MÉTODO DOS MÍNIMOS QUADRADOS |')
disp(' -------------------------------------------------------------------')
disp(' -----------------------------------------------------------')
disp(['|FUNÇÃO DE REGRESSÃO ESTIMADA:Y ='num2str(q_est),' + 'num2str(m_est),'*X |']);
disp( ' -----------------------------------------------------------')
disp( ' -----------------------------------------------------')
disp([' | COEFICIENTE DE CORRELAÇÃO LINEAR: ' num2str(RSQUARE),' % |']);
disp( ' -----------------------------------------------------')
disp(' ')
disp( ' ------------------')
disp([' | R2 = ' num2str(RSQUARE2),' % |']);
disp( ' ------------------')
disp(' ')
Resolução via função implementada no MATLAB: reglin
» x=[6;10;12;14;16;18;22;24;26;32];
» y=[40;44;46;48;52;48;60;68;74;80];
» reglin(x,y)
-------------------------------------------------------------------
| MODELO DE REGRESSÃO LINEAR SIMPLES: MÉTODO DOS MÍNIMOS QUADRADOS |
-------------------------------------------------------------------
-------------------------------------------------------
| FUNÇÃO DE REGRESSÃO ESTIMADA: Y = 26.125 + 1.6597*X |
-------------------------------------------------------
------------------------------------------------
| COEFICIENTE DE CORRELAÇÃO LINEAR: 96.4966 % |
------------------------------------------------
-------------------
| R2 = 93.1159 % |
-------------------
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
56
10) A seguir tem-se os km rodados e os litros gastos, faça a regressão linear e
determine o coeficiente de correlação.
Medida km litros Medida km litros
1 3203 400 13 3203 400
2 3203 400 14 3203 400
3 2603 340 15 803 100
4 3105 400 16 803 100
5 1305 150 17 1102 130
6 804 100 18 3202 400
7 1604 200 19 1604 150
8 2706 300 20 1603 200
9 805 100 21 3203 400
10 1903 200 22 3702 450
11 3203 400 23 3403 440
12 3702 450
Resolução via função implementada no MATLAB: reglin
» reglin(x,y)
-------------------------------------------------------------------
| MODELO DE REGRESSÃO LINEAR SIMPLES: MÉTODO DOS MÍNIMOS QUADRADOS |
-------------------------------------------------------------------
-------------------------------------------------------
| FUNÇÃO DE REGRESSÃO ESTIMADA: Y = -11.5627 + 0.12739*X |
-------------------------------------------------------
------------------------------------------------
| COEFICIENTE DE CORRELAÇÃO LINEAR: 99.3065 % |
------------------------------------------------
-------------------
| R2 = 98.6177 % |
-------------------
REGRESSÃO LINEAR MÚLTIPLA
Notas:
1) O MATLAB, possui uma função que determina a solução para o modelo de
regressão linear múltiplo é a função regress. A sintaxe mais simples desta função é
regress(y,x, alpha)
2) O MATLAB possui um toolbox para a área de estatística (stats), assim a respeito
das demais funções estatísticas digite nas linhas de comando help stats ou consulte a
apostila do próprio MATLAB, apostila em inglês, no formato pdf e inclusa no CD de
instalação do mesmo.
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
57
MATEMÁTICA FINANCEIRA
A seguir tem-se alguns programas escritos em MATLAB, voltados para a área de
matemática financeira.
k=menu('MATEMÁTICA FINANCEIRA - PROF.M.Sc.: DONIZETTI',...
'MONTANTE - JUROS COMPOSTO','PRESTAÇÃO - SISTEMA PRICE', ...
'MONTANTE - SÉRIE DE PGTO UNIFORMES',...
'FIM DO PROGRAMA - matfin');
if k==1
%CALCULO DO MONTANTE
clear % limpa as variáveis (lixos)
clc % limpa a tela
aviso={'ENTRE COM O CAPITAL:','ENTRE COM A TAXA:','ENTRE COM O PERÍODO:'};
titulo='MONTANTE - JUROS COMPOSTOS';
linhas=1;
resposta=inputdlg(aviso,titulo,linhas);
pv=str2num(char(resposta(1)));
i=str2num(char(resposta(2)));
n=str2num(char(resposta(3)));
format bank
fv=pv*(1 + i/100)^n;
disp(' ')
disp(' ----------')
disp(' |MONTANTE|')
disp(' ----------')
disp(' ')
disp(fv)
pause
clc % limpa a tela
matfin
elseif k==2
%CALCULO DA PRESTAÇÃO PELO SISTEMA PRICE
clear % limpa as variáveis (lixos)
clc % limpa a tela
aviso={'ENTRE COM O CAPITAL:','ENTRE COM A TAXA:','ENTRE COM O PERÍODO:'};
titulo='MONTANTE - JUROS COMPOSTOS';
linhas=1;
resposta=inputdlg(aviso,titulo,linhas);
pv=str2num(char(resposta(1)));
i=str2num(char(resposta(2)));
n=str2num(char(resposta(3)));
format bank
pmt=pv*(i/100*(1+ i/100)^n)/((1+i/100)^n-1);
disp(' -------------')
disp(' | PRESTAÇÃO |')
disp(' -------------')
disp(' ')
disp(pmt)
% CÁLCULO DA TABELA DE AMORTIZAÇÃO, PERÍODO A PERÍODO - PRICE
SaldoDevedor=pv;
pause(1)
disp(' ---------------------------------------------------------------- ')
disp(' |PERIODO| |JURO| |AMORTIZAÇÃO| |SALDO_DEVEDOR| |GASTO| ')
disp(' ---------------------------------------------------------------- ')
for j=1:n % número de prestações
Juro=SaldoDevedor*(i/100); % juros de cada periodo
Amort=pmt-Juro; % valor da amortização do período
SaldoDevedor=SaldoDevedor-Amort; % atualização do saldo devedor
J=fix(j);
format bank
gasto=(pmt*j);
periodo=[J Juro Amort SaldoDevedor gasto];
disp(periodo)
pause(1)
end
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
58
pause
clc % limpa a tela
matfin
elseif k==3
%CALCULO DO MONTANTE EM UMA SÉRIE DE PAGAMENTOS UNIFORMES
clear % limpa as variáveis (lixos)
clc % limpa a tela
aviso = {'ENTRE COM A PRESTAÇÃO:','ENTRE COM A TAXA:','ENTRE COM O PERÍODO:'};
titulo = 'MONTANTE - JUROS COMPOSTOS';
linhas=1;
resposta=inputdlg(aviso,titulo,linhas);
pmt=str2num(char(resposta(1)));
i=str2num(char(resposta(2)));
n=str2num(char(resposta(3)));
format bank
fv=pmt*((1+i/100)^n-1)/(i/100);
disp(' ----------')
disp(' |MONTANTE|')
disp(' ----------')
disp(' ')
disp(fv)
clc % limpa a tela
matfin
else
% sair do programa
disp(' ')
disp(' ---------------------------')
disp(' |OBRIGADO POR USAR: matfin ')
disp(' ---------------------------')
disp(' ')
clc % limpa a tela
end
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
59
K=menu('SISTEMAS DE AMORTIZAÇÃO - PROF.M.Sc.: DONIZETTI',...
'SISTEMA PRICE - FRANCÊS', ...
'SISTEMA DE AMORTIZAÇÃO CONSTANTE - SAC',...
'SISTEMA DE AMORTIZAÇÃO AMERICANA - SAA',...
'FIM - PROGRAMA - sisamo');
% RESUMO SOBRE OS SISTEMAS DE AMORTIZAÇÃO
%
% Tabela Price - Sistema de Amortização Francês
%
% - Prestações sempre iguais, periódicas e sucessivas
% - Juros incidem sobre o saldo devedor e são decrescentes
% - Parcelas de amortização do principal assumem valores crescentes
%
% SAC - Sistema de Amortização Constante
%
% - Prestações decrescentes
% - Juros incidem sobre o saldo devedor e são decrescentes
% - Amortizações do principal são sempre iguais ou constantes em todo
% o prazo do financiamento
%
% SAA - Sistema de Amortização Americana
%
% - Neste sistema paga-se periodicamente apenas os juros, e na última
% prestação paga-se os juros somados ao capital emprestado
% (juros + principal). Sendo assim, as prestações são constantes,
% com excessão da última
% - Juros incidem sobre o saldo devedor e são contantes,
% com excessão da última
% - Amortiza-se apenas na última prestação
if K==1
clear
clc
% SISTEMA PRICE (FRANCÊS) DE AMORTIZAÇÃO
% PRICIPAL CARACTERÍSTICA: PRESTAÇÃO CONSTANTE
% BASTANTE UTILIZADO NAS COMPRAS COM POUCAS PRESTAÇÕES
% CALCULO DA PRESTAÇÃO PELO SISTEMA PRICE
disp(' ')
aviso={'ENTRE COM O CAPITAL:','ENTRE COM A TAXA:','ENTRE COM O PERÍODO:'};
titulo='SISTEMA PRICE - PRESTAÇÃO CONSTANTE';
linhas=1;
resposta=inputdlg(aviso,titulo,linhas);
pv=str2num(char(resposta(1)));
i=str2num(char(resposta(2)));
n=str2num(char(resposta(3)));
format bank
pmt=pv*(i/100*(1+ i/100)^n)/((1+i/100)^n -1);
disp(' -----------------------------------------------------------------------')
disp(' |VALOR EMPRESTADO | N.0 DE PRESTAÇÃO | TAXA DE JUROS | VALOR PRESTAÇÃO|')
disp(' -----------------------------------------------------------------------')
sai=[pv n i pmt];
disp(sprintf('%13.2f %15.0f %17.2f %17.2f\n',sai'))
% CÁLCULO DA TABELA DE AMORTIZAÇÃO PERÍODO A PERÍODO - PRICE
SaldoDevedor=pv;
%pause(1)
disp(' -----------------------------------------------------------------')
disp(' |PERIODO|PRESTAÇÃO| JUROS |AMORTIZAÇÃO|SALDO_DEVEDOR|TOTAL GASTO|')
disp(' -----------------------------------------------------------------')
prest=0;
ju=0;
amt=0;
for p=1:n % número de prestações
Juro=SaldoDevedor*(i/100); % juros de cada periodo
Amort=pmt-Juro; % valor da amortização do período
SaldoDevedor=SaldoDevedor-Amort; % atualização do saldo devedor
gasto=(pmt*p);
resp=[p pmt Juro Amort SaldoDevedor gasto];
disp(sprintf('%8.0f %10.2f %8.2f %9.2f %12.2f %12.2f\n',resp'))
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
60
pause(1) %prest=prest+pmt;
ju=ju+Juro;
amt=amt+Amort;
end
disp(' ----------------------------------------------')
disp(' |TOTAL PAGO | JUROS PAGOS | AMORTIZAÇÃO TOTAL|')
disp(' ----------------------------------------------')
total=[gasto ju amt];
disp(sprintf('%12.2f %12.2f %15.2f\n',total'))
pause
clc % limpa a tela
sisamo
elseif K==2
clear
clc
% SISTEMA DE AMORTIZAÇÃO CONSTANTE
% PRICIPAL CARACTERÍSTICA: AMORTIZAÇÃO CONSTANTE
% CALCULO DO VALOR DA AMORTIZAÇÃO
aviso = {'ENTRE COM O CAPITAL:','ENTRE COM A TAXA:','ENTRE COM O PERÍODO:'};
titulo = 'SAC - AMORTIZAÇÃO CONSTANTE';
linhas=1;
resposta=inputdlg(aviso,titulo,linhas);
pv=str2num(char(resposta(1)));
i=str2num(char(resposta(2)));
n=str2num(char(resposta(3)));
format bank
Amort=pv/n;
disp(' -------------------------------------------------------------------')
disp(' |VALOR EMPRESTADO | N.0 DE PRESTAÇÃO | TAXA DE JUROS | AMORTIZAÇÃO|')
disp(' -------------------------------------------------------------------')
sai=[pv n i Amort];
disp(sprintf('%12.2f %15.0f %17.2f %17.2f\n',sai'))
% CÁLCULO DA TABELA DE AMORTIZAÇÃO PERÍODO A PERÍODO - SAC
SaldoDevedor=pv;
% pause(1)
disp(' ------------------------------------------------------------------')
disp(' |PERIODO|AMORTIZAÇÃO| JUROS |PRESTAÇÃO|SALDO_DEVEDOR|TOTAL GASTO|')
disp(' ------------------------------------------------------------------')
gasto=0;
amt=0;
ju=0;
for p=1:n % número de prestações
Juro=SaldoDevedor*(i/100); % juros de cada periodo
pmt=Amort+Juro; % valor da prestação período
SaldoDevedor=SaldoDevedor-Amort; % atualização do saldo devedor
gasto=gasto+pmt;
ju=ju+Juro;
amt=amt+Amort;
resposta=[p Amort Juro pmt SaldoDevedor gasto];
disp(sprintf('%9.0f %10.2f %9.2f %9.2f %11.2f %12.2f\n',resposta'))
pause(1)
end
disp(' ----------------------------------------------')
disp(' |AMORTIZAÇÃO TOTAL | JUROS PAGOS |TOTAL PAGO |')
disp(' ----------------------------------------------')
total=[amt ju gasto];
disp(sprintf('%15.2f %15.2f %15.2f\n',total'))
pause
clc % limpa a tela
sisamo
elseif K==3
clc
clear
% SISTEMA DE AMORTIZAÇÃO AMERICANA - SAA
% PRICIPAL CARACTERÍSTICA: A CADA PERÍODO PAGA-SE APENAS O JUROS,
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
61
% NO ÚLTIMO PERÍODO PAGA-SE O JUROS + O MONTANTE EMPRESTADO
% PORTANTO O JUROS É SEMPRE CONSTANTE
% CALCULO DO VALOR DO JUROS
aviso={'ENTRE COM O CAPITAL:','ENTRE COM A TAXA:','ENTRE COM O PERÍODO:'};
titulo='SAA - JUROS CONSTANTE';
linhas=1;
resposta=inputdlg(aviso,titulo,linhas);
pv=str2num(char(resposta(1)));
i=str2num(char(resposta(2)));
n=str2num(char(resposta(3)));
format bank
Juro= pv*(i/100);
disp(' ----------------------------------------------------------------')
disp(' |VALOR EMPRESTADO | N.0 DE PRESTAÇÃO | TAXA DE JUROS | JUROS |')
disp(' ----------------------------------------------------------------')
sai=[pv n i Juro];
disp(sprintf('%12.2f %15.0f %17.2f %17.2f\n',sai'))
% CÁLCULO DA TABELA DE AMORTIZAÇÃO PERÍODO A PERÍODO - SAC
SaldoDevedor=pv;
% pause(1)
disp(' ------------------------------------------------------------------')
disp(' |PERIODO| JUROS |PRESTAÇÃO|AMORTIZAÇÃO|SALDO_DEVEDOR|TOTAL GASTO|')
disp(' ------------------------------------------------------------------')
ju=0;
gasto=0;
amt=0;
prest=0;
for p=1:(n-1) % número de prestações
Juros=pv*(i/100); % juros de cada periodo
pmt=Juros; % valor da prestação do período
Amort=0;
SaldoDevedor=SaldoDevedor-Amort; % atualização do saldo devedor
gasto=Juros*p;
resposta=[p Juro pmt Amort SaldoDevedor gasto];
disp(sprintf('%8.0f %9.2f %10.2f %9.2f %11.2f %13.2f\n',resposta'))
pause(1)
end
p=n;
Juros=pv*(i/100); % juros de cada periodo
pmt=Juros+pv; % valor da amortização do período
Amort=pv;
SaldoDevedor=SaldoDevedor-Amort; % atualização do saldo devedor
gasto=Juros*p+ pv;
resposta=[p Juro pmt Amort SaldoDevedor gasto];
disp(sprintf('%8.0f %9.2f %10.2f %9.2f %11.2f %13.2f\n',resposta'))
ju=Juros*n;
amt=pv;
disp(' --------------------------------------------')
disp(' |JUROS PAGOS |TOTAL PAGO |AMORTIZAÇÃO TOTAL|')
disp(' --------------------------------------------')
total=[ju gasto amt];
disp(sprintf('%12.2f %12.2f %13.2f\n',total'))
pause
clc % limpa a tela
sisamo
else
% sair do programa
disp(' ')
disp(' ----------------------------')
disp(' |OBRIGADO POR USAR: sisamo |')
disp(' ----------------------------')
disp(' ')
clc % limpa a tela
end
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
62
PROGRAMAÇÃO LINEAR
A Programação Linear (LINEAR PROGRAMMING): é o campo da Matemática cujo
objetivo é otimizar a solução de um problema que depende de um conjunto de variáveis
sujeito a um conjunto de restrições.
Exemplo 01: Considere o seguinte problema
Uma indústria produz duas peças A e B que necessitam passar por três operações. Os
tempos de execução por unidade, as disponibilidades em horas por mês, e os lucros
em reais por unidade são dados pela seguinte tabela:
Operação Peça A
(minutos/unidade)
Peça B
(minutos/unidade)
Disponibilidade
(horas/mês)
1 11 9 165
2 7 12 140
3 6 6 160
Lucro (R$ / unidade) 9 10
Pergunta-se em quais condições a industria deve trabalhar mensalmente para obter o
maior lucro, isto é quais as quantidades de peças A e B que devem ser fabricadas para
ter lucro máximo?
Resolução:
Sejam:
x
1
= quantidade de peças A a ser produzida por mês.
x
2
= quantidade de peças B a ser produzida por mês.
tempo gasto com a operação
11x
1
+ 9x
2
≤ 165*(60) (1)
7x
1
+ 12x
2
≤ 140*(60) (2)
6x
1
+ 6x
2
≤ 160* (60) (3)
Assim, temos
11x
1
+ 9x
2
≤ 9.900
7x
1
+ 12x
2
≤ 8.400
6x
1
+ 6x
2
≤ 9.600
Obs.: 60 usado para acerto das unidades
Lucro obtido L = 9x
1
+ 10x
2
Como não é possível número negativo de peças acrescentamos as condições de
positividade que são: x
1
≥ 0 e x
2
≥ 0
Logo o problema proposto encontrando valores de x
1
e x
2
∈ℜ satisfazendo
11x
1
+ 9x
2
≤ 9.900
7x
1
+ 12x
2
≤ 8.400
6x
1
+ 6x
2
≤ 9.600
x
1
≥ 0 e x
2
≥0
tal que L = 9x
1
+ 10x
2
represente o lucro máximo.
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
63
Observações:
1) É possível encontrar graficamente os valores x
1
, x
2
∈ℜ que satisfazem as equações
acima.
Considere as retas
1) 11x
1
+ 9x
2
≤ 9.900 ! Interesecção com os eixos coordenados (900;0) e (0, 1100)
2) 7x
1
+ 12x
2
≤ 8.400 ! Interesecção com os eixos coordenados (1200;0) e (0; 700)
3) 6x
1
+ 6x
2
≤ 9.600 ! Interesecção com os eixos coordenados (1600;0) e (0; 1600)
A região R descreve todos os pontos (x
1
, x
2
) ∈ ℜ
2
que satisfazem as condições do
problema. Pode se provar que a solução para o lucro ocorre sempre em algum vértice
(não necessariamente em um único) desta região.
x11=[900 0];
x12=[0 1100];
x21=[1200 0];
x22=[0 700];
x31=[1600 0];
x32=[0 1600];
plot(x11,x12,x21,x22,x31,x32)
legend('11x1+9x2=9900','7x1+12
x2=8400','6x1+6x2=9600')
hold on
c=[-9 -10];
A=[11 9; 7 12; 6 6];
b=[9900; 8400; 9600];
minimo=lp(c,A,b)
x=minimo(1);
y=minimo(2);
plot(x,y,'ko')
text(x+20,y+20,'ponto ótimo')
0 200 400 600 800 1000 1200 1400 1600
0
200
400
600
800
1000
1200
1400
1600
ponto ó timo
11x1+9x2=9900
7x1+12x2=8400
6x1+6x2=9600
2) O problema acima é um típico problema de programação linear (P.L.). Um problema
de P.L. é caracterizado pelos seguintes pontos:
• Uma função linear para ser otimizada (ser maximizada ou minimizada)
• As variáveis do problema estão sujeitas à condições de interdependência lineares
são equações ou inequações lineares.
Programação Linear (Linear Programming)
Problema:
0 x
b Ax : a s.
cx


Min
Sintaxe: lp(c,A,b)
» c=[-9 -10];
» A=[11 9; 7 12; 6 6];
» b=[9900; 8400; 9600];
» minimo=lp(c,A,b)
minimo =
626.0870
334.7826 Portanto, essas são as quantidades a serem produzidas
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
64
Exemplo 02:
(Covest-PE) Eric necessita de complementos das vitaminas A e C. Diariamente precisa
de pelo menos 63 unidades de A e no mínimo 55 unidades de C. Ele pode escolher
entre os compostos I e II, que apresentam, por cápsula, as características abaixo:
Composto Vitamina A Vitamina C Valor R$
I 7 unidades 4 unidades 0,70
II 4 unidades 5 unidades 0,50
Qual o gasto mínimo diário de Eric, em reais, com os compostos I e II?
Resolução:
Primeira etapa: O equacionamento:
¹
¹
¹
'
¹

≥ +
≥ +
+
0 x x
55 x 5 x 4
63 4x 7x
a Sujeito
0,50x 0,70x
2 2
2 2
2 2
2 2
e
Min
Segunda etapa: A solução via MATLAB:
O padrão da função MATLAB lp(c,A,b) (lp, é a abreviação de linear programming) é:
¹
'
¹


0
b Ax
a sujeito
x
x
c Min
Assim, tem-se que adaptar o sistema anterior, ficando o mesmo da seguinte forma:
¹
¹
¹
'
¹

− ≤ − −
− ≤ −
+
0 x e x
55 x 5 x 4
63 4x 7x -
a .
0,50x 0,70x
2 1
2 1
2 1
2 1
S
Min
Implementação MATLAB
» A=[-7 -4;-4 -5]
A =
-7 -4
-4 -5
» b=[-63 –55]
b =
-63 -55
» c=[0.70 0.50]
c =
0.7000 0.5000
» resp=lp(c,A,b)
resp =
5.0000
7.0000
» custo=c*resp
custo =
7.0000
% Portanto, o custo mínimo diário
será de R$ 7,00
Exercício 01: Elaborar um aplicativo, usando a função lp, de forma que torne mais fácil
a utilização dessa função por parte do usuário final. Dica: Construa uma interface com
o usuário, sendo solicitado do mesmo: a matriz A e os vetores c e b
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
65
Exercício 02: Resolver os seguintes problemas de programação linear
a) min -0.56x1 -0.42x2
sujeito a:
1x1 + 2x2 ≤ 240.000
1.5x1 + 1x2 ≤ 180.000
x1 ≤ 110.000
c=[-0.56;-0.42];
A=[1 2; 1.5 1; 1 0];
b=[240000; 180000 ; 110000];
minimo=lp(c,A,b)
minimo =
60000.00
90000.00
b) max 80x1 + 80x2
sujeito a:
x1 + 2x2 ≤ 80
3x1 + 2x2 ≤ 120
x1≥ 0 e x2 ≥ 0
x11=[80 0];
x12=[0 40];
x21=[40 0];
x22=[0 60];
plot(x11,x12,x21,x22)
legend('x1+2x2=80','3x1+2x2=1200')
hold on
c=[-80 -80];
A=[1 2; 3 2];
b=[80; 120];
minimo=lp(c,A,b)
x=minimo(1);
y=minimo(2);
plot(x,y,'ro')
text(x+1,y+1,'ponto ótimo')
minimo =
20.0000
30.0000
0 10 20 30 40 50 60 70 80
0
10
20
30
40
50
60
ponto ó timo
x1+2x2=80
3x1+2x2=1200
PROGRAMAÇÃO QUADRÁTICA (quadratic Programming)
Problema:
0 x
b Cx : a s.
x
t


+ + c bx Ax Min
Sintaxe: qp(A,b,C,d)
Exemplo
Min 2x
2
- 5x + 6
s.a: x ≤10
qp(A,b,C,d)
a=qp(2,-5,1,10)
a=2.5000
Nota:
O MATLAB possui um toolbox para a área de otimização (help optim), assim consulte
a ajuda online ou a apostila do próprio MATLAB, apostila em inglês, no formato pdf e
inclusa no CD de instalação do mesmo.
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
66
LISTA DE EXERCÍCIOS 1 - Comandos Básicos do MATLAB,
Sistemas Lineares e Equações
1) Dadas as matrizes:
1
]
1

¸

·
3 4
2 1
A e
1
]
1

¸

·
8 7
6 5
B , calcule:
Obs.: Usando a janela de comandos (Command Window) do MATLAB
a) A+B
b) A'+B'
c) A-B
d) A*B
e) A.*B
f) 2*A+B'
g) det(A)
h) det(B)
i) det(A*B)
j) inv(A)
k) inv(B)
l) inv(A)*A
m) inv(B)*B
2) Construa um programa (script - roteiro) que execute todos os itens pedidos no
exercício anterior. Dica: Abra um arquivo a partir de (File, New, M-File) ou digitando
edit, nas linhas de comando. Digite os comandos necessários e salve o arquivo com
o nome de roteiro1.m, no diretório (bin, versão 5 ou work, versão 6) ou em seu
disquete. Para executá-lo a partir do disquete digite o seguinte comando na linha
de comandos: addpath a:, logo após digite o nome do arquivo roteiro1.
3) Criar as seguintes matrizes
a) Identidade de ordem 5
b) Matriz nula do tipo 3x4
c) Matriz de elementos 1's do tipo 8x1
4) Resolva os sistemas lineares
a)
¹
¹
¹
'
¹
· + + −
· + −
− · − −
4 4 3
6 3
2
z y x
z y x
z y x
SPD S = { (-6, -14, 10)}
b)
¹
¹
¹
'
¹
· + −
· + −
· + +
0 2
3
2 3 2
z y x
z y x
z y x
SPD S=
¹ ¹¹ ¹
' '' '
¹ ¹¹ ¹
¹ ¹¹ ¹
; ;; ;
¹ ¹¹ ¹
− −− − − −− − 3) ,
5
7
,
5
3 2
(
(1) Use a função inversa (inv(A)) e o formato racional (format rat)
(2) Use a função solve e compare com o resultado obtido em (1)
(3) Use o programa escrito na apostila e compare com os resultados obtidos
em (1) e (2)
5) Resolva as equações:
a) x
2
+ 4 = 0 b) x
2
- 9x + 16 = 0 c) x
2
- 4x + 4 = 0
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
67
6) Em uma sala de aula estão 8 pessoas, reunidas em uma mesa circular. Cada uma
escolhe um número aleatório e pega o seu número e soma com os números das
pessoas ao lado, a sua direita e esquerda. Passa-se as 8 somas para você, que
estava fora da sala. Como você faz para descobrir o número que cada um
escolheu?
Nota: Considere que as somas sejam: Soma
1
=6; Soma
2
=9; Soma
3
=12;
Soma
4
=15; Soma
5
=18; Soma
6
=21; Soma
7
=16; Soma
8
=11
Resolução:
Equacionamento
¹
¹
¹
¹
¹
¹
¹
¹
¹
¹
¹
'
¹
· + +
· + +
· + +
· + +
· + +
· + +
· + +
· + +
8
7
6
5
4
3
2
1
soma b a h
soma a h g
soma h g f
soma g f e
soma f e d
soma e d c
soma d c b
soma c b a
Implementação via MATLAB
» A=[1 1 1 0 0 0 0 0
0 1 1 1 0 0 0 0
0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0
0 0 0 0 1 1 1 0
0 0 0 0 0 1 1 1
1 0 0 0 0 0 1 1
1 1 0 0 0 0 0 1];
» b=[6;9;12;15;18;21;16;11];
» x=inv(A)*b
Solução MATLAB
x =
1.00
2.00
3.00
4.00
5.00
6.00
7.00
8.00
Obs.: Poderia se resolver este exercício usando o comando solve
[a b c d e f g h]=solve('a+b+c=6','b+c+d=9','c+d+e=12','d+e+f=15',...
'e+f+g=18','f+g+h=21','g+h+a=16','h+a+b=11')
a =
1
b =
2
c =
3
d =
4
e =
5
f =
6
g =
7
h =
8
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
68
LISTA DE EXERCÍCIOS 2 - Números complexos, Polinômios e
Construções Gráfica
Números complexos
1) Dado o número complexo Z= 3 + 4i, determinar:
a) A parte real do número Z c) O módulo de Z
b) A parte imaginária de Z d) O ângulo de Z (em graus)
Polinômios
1) Determinar as raízes do polinômio x
4
–10x
3
+35x
2
-50x +24
» p=[1 -10 35 -50 24];
» raizes=roots(p)
raizes =
4
3
2
1
2) Determinar o polinômio cujas raízes são: 1, 2, 3 e 4 ambas raízes com
multiplicidade 1 (cada elemento é raiz uma única vez)
» raizes=[1 2 3 4];
» p=poly(raizes)
p =
1 -10 35 -50 24
3) Dados os polinômios p(x) = x
2
+ 2x +3 e q(x) = 4x
2
+ 5x + 6
a) Determine o produto de p(x) por q(x) através de seus coeficientes
» p=[1 2 3];
» q=[4 5 6];
» a=conv(p,q)
a =
4 13 28 27 18
b) Os coeficientes do quociente e do resto da divisão de p(x) por q(x)
» [quoc resto]=deconv(p,q)
quoc =
0.2500
resto =
0 0.7500 1.5000
c) Calcule o valor numérico do polinômio p(x) para x = 1
» p=[1 2 3];
» px_1=polyval(p,1)
px_1 =
6
d) Avalie o polinômio q(x) para x = 1, x = 2, x = 3, x = 4 e x = 5
» q=[4 5 6];
» qx_1_5=polyval(p,1:5)
qx_1_5 =
6 11 18 27 38
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
69
Construção de Gráficos
1) Construa o gráficos das seguintes funções (com titulo ao gráfico, nomes a seus
eixos e linhas de grade)
a) f(x) = x
3
no intervalo [-5;5]
b) f(x) = e
x
no intervalo [-10;10]
c) f(x) = cos(x) no intervalo [-2π, 2π]
d) y = sen (x) no intervalo 0 ≤ x ≤ 4π.
2) Plotar o gráfico da função humps, dada por:
6
04 , 0 ) 9 , 0 (
1
01 , 0 ) 3 , 0 (
1
) (
2 2

+ −
+
+ −
·
x x
x f
no intervalo -2 ≤ x ≤ 2. Em seguida determine as raízes dessa função nesse
intervalo.
function graf_humps
x=-2:0.1:2;
y=1./((x-0.3).^2+0.01)+ ...
1./((x-0.9).^2+0.04)-6;
plot(x,y,[-2 2],[0 0])
% É necessário definir a função
function y=humps(x)
y=1/((x-0.3)^2+0.01)+ ...
1/(x-0.9)^2+0.04)-6;
» fzero('humps',[-0.5 0])
ans =
-0.1316
» fzero('humps',[1 1.5])
ans =
1.2995
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-20
0
20
40
60
80
100
3) Construir o gráfico das funções: sen (x), sen (2x), sen (3x), sen(4x), sen (x/2) e sen
(x/3), no intervalo [0, 4π] usando o comando subplot.
4) Fazer em um mesmo gráfico, usando o comando plot, os gráficos das funções:
a) sen (x) e sen (x + π)
b) cos (x) e cos (x + π)
5) Plotar o gráfico cuja equação é: y = x
3
- 8x
2
+15x, no intervalo [-2, 7].
6) Plotar o gráfico da função
2 2
.
y x
e x z
− −
· com - 2 ≤ x ≤ 2 e - 2 ≤ y ≤ 2, usando o
comando mesh. Fornecer um título ao gráfico, rotular os eixos x , y e z, inserir linha
de grade.
x=-2:0.1:2;
y=-2:0.1:2;
[X Y]=meshgrid(x,y);
Z=X.*exp(-X.^2-Y.^2);
mesh(X,Y,Z)
title('GRÁFICO DA SUPERFÍCIE
Z=X.*exp(-X.^2-Y.^2');
xlabel('eixo x')
ylabel('eixo y')
zlabel('eixo z')
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
70
7) Representar graficamente a parábola de equação y = x
2
+ x - 6, no intervalo - 3 ≤ x
≤ 2 e determine as raízes dessa equação.
8) Representar graficamente a equação y = x
3
- 2x
2
- 5 x + 6, no intervalo - 5 ≤ x ≤ 5 e
determine as raízes dessa equação.
9) Representar graficamente as duas curvas anteriores simultaneamente no intervalo
3 ≤ x ≤ 4
10) Plotar o gráfico cuja equação é dada por: ) 2 (
2
4
) (
2



· x
x
x
x f , no intervalo [-2, 6].
X1=-2:0.1:(2-10*eps);
x2=(2+10*eps):0.1:6;
y1=(x1.^2-4)./(x1-2);
y2=(x2.^2-4)./(x2-2);
plot(x1,y1,'g',x2,y2,'g')
pause
close
-2 -1 0 1 2 3 4 5 6
0
1
2
3
4
5
6
7
8
11) Plotar o gráfico cuja equação é:
x
y
1
· , no intervalo [-5, 5].
x1=-5:0.1:(0-eps); % eps = 2,22x10-16
y1=1./x1;
x2=(0+eps):0.1:5; % eps = 2,22x10-16
y2=1./x2;
plot(x1,y1,'b',x2,y2,'b')
axis([-5 5 -10 10]) % Definição da área
de plotagem: x=[0 5] e y=[0 10]
grid
xlabel('x')
ylabel('y = 1 / x ')
title('função inversa de x')
hold on
plot([0 0],[-10 10],'k') % assintota
pause; close
-5 -4 -3 -2 -1 0 1 2 3 4 5
-10
-8
-6
-4
-2
0
2
4
6
8
10
x
y

=

1

/

x

funç ã o inversa de x
12) Plotar o gráfico cuja equação é:
1
1

·
x
y , no intervalo [-5, 5].
x1=-5:0.1:(1-10*eps); % eps=2,22x10-16
y1=1./(x1-1);
x2=(1+10*eps):0.1:5; % eps=2,22x10-16
y2=1./(x2-1);
plot(x1,y1,'b',x2,y2,'b')
axis([-5 5 -10 10])
grid
xlabel('x')
ylabel('y = 1 /(x-1) ')
title('gráfico da função: 1/(x-1))')
hold on
plot([0 0],[-10 10],'k')
plot([-5 5],[0 0],'k')
plot([1 1],[-10 10],'r') % Assintota
pause; close
-5 -4 -3 -2 -1 0 1 2 3 4 5
-10
-8
-6
-4
-2
0
2
4
6
8
10
x
y

=

1

/
(
x
-
1
)

grá fico da funç ã o: 1/ (x-1))
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
71
LISTA DE EXERCÍCIOS 3 - PROGRAMANDO COM O MATLAB
1) Criar uma matriz do tipo 3x3 tal que cada elemento a
ij
= i + j, usando um duplo FOR
n=3;
m=3;
for i=1:m
for j=1:n
A(i,j)=i+j;
end;
end
disp('Matriz A')
disp(A)
2) Usando dois comandos for criar uma matriz do tipo 4x3 com todos elementos iguais
a 10.
for m=1:4
for n=1:3
A(m,n)=10;
end
end
disp(A)
3) Gerar uma matriz de Hilbert (é uma matriz cujos elementos são iguais a
1 / (i + j - 1) com i e j variando de 1 até n e salvar este arquivo como "hilbert.m".
Primeira forma:
Usando um duplo for
For i=1:n
For j=1:n
A(i,j)=1/(i+j-1);
End
End
Segunda forma:
Usando o comando eval
t='1/(i+j-1)';
for i=1:n
for j=1:n
A(i,j)=eval(t)
end
end
4) Construir um programa que determina o gráfico da função tg(x) para
2
3
2
π π
x ≤ −
Function graf_tangente
% gráfico da função tangente(x) x = [-pi/2 3*pi/2]
x11=(-pi/2+eps):0.01:(pi/2-eps);
x12=(pi/2+eps):0.01:(3*pi/2-eps);
x=[x11';x12']; % excluir os valores onde a função é indefinida
y=tan(x);
plot(x,y,'r')
xlabel('x (radianos)')
ylabel('y = tangente(x) ')
title('gráfico da função tangente ')
grid
axis([-pi/2 3*pi/2 -5 5])
hold on
plot([-5 5],[0 0])% cria o eixo das abscissas
hold on
plot([0 0],[-5 5]) % cria o eixo das ordenadas
pause
close
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
72
5) Elabore um programa para calcular x
n
(x inteiro e positivo) sem usar exponenciação
ou função predefinida (lembre-se: x
n
= x* x* ... *x (n-vezes))
function pot=potencia(x,n)
Pot=1;
For i=1:n
pot=pot*x;
end
6) Elabore um programa que calcula a soma dos n primeiros números naturais não
nulos
function soma=soma1(n)
Soma=0;
For i=1:n
soma=soma+i;
end
function soma=soma2(n)
soma=0;
i=1;
while i<=n
soma=soma+i;
i=i+1;
end
function soma=soma3(n)
soma=0;
while n~=0
soma=soma+n;
n=n-1;
end
Função MATLAB (built in function) sum
Exemplo: sum(1:100)
7) Elabore um programa que calcula a soma dos quadrados dos n primeiros números
naturais não nulos.
function soma=soma_quad(n)
Soma=0;
For i=1:n
soma=soma+i*i;
end
8) Elaborar uma função que determina o maior número fatorial calculado pelo MATLAB
function max_fatorial
% Determinar o maior número fatorial calculado pelo MATLAB
n=1;
while prod(1:n) < realmax
n=n+1;
end
disp(' ')
disp(n-1)
9) Escrever um programa para gerar uma matriz identidade de ordem 5, usando os
comandos: for e if
10) Escrever um programa para gerar uma matriz identidade de ordem n, solicitando do
usuário a ordem da mesma.
Dica: Use os comandos: input, for e if
11) Gerar uma matriz triangular inferior, cujos elementos diagonais são iguais a 5 e os
demais iguais a10.
12) Escrever um programa para gerar uma matriz diagonal, cujos elementos diagonais
são os números inteiros positivos nessa ordem.
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
73
13) Em uma sala de aula estão 8 pessoas, reunidas em uma mesa circular. Cada uma
escolhe um número aleatório e pega o seu número e soma com os números das
pessoas ao lado, a sua direita e esquerda. Passa-se as 8 somas para você, que
estava fora da sala. Como você faz para descobrir o número que cada um
escolheu? Elaborar um aplicativo que solicite do usuário as 8 somas e determina os
números escolhidos.
¹
¹
¹
¹
¹
¹
¹
¹
¹
¹
¹
'
¹
· + +
· + +
· + +
· + +
· + +
· + +
· + +
· + +
H b a h
G a h g
F h g f
E g f e
D f e d
C e d c
B d c b
A c b a
Os valores A, B, ..., H são recebidos do usuário
através da sintaxe:
A = input ('Entre com o valor da primeira soma ==> ')
....
H = input ('Entre com o valor da oitava soma ==> ')
Assim, basta resolver o sistema: x = inv(A)*b
14) Gerar 1000 números aleatórios com distribuição normal e verificar a distribuição
dos dados através da função histfit
>> a=randn(10000,1);
>> histfit
15) Elabore um aplicativo que determine as raízes e o vértice de uma função quadrática
function zero_para
clear; clc
disp(' ENTRE COM OS COEFICIENTES: a, b e c')
disp (' ')
disp(' O COEFICIENTE "a" NÃO PODE SER ZERO')
disp (' ')
disp(' POIS É UMA FUNÇÃO DO SEGUNDO GRAU')
disp (' ')
a=input(' ENTRE COM O COEFICIENTE, a = ');
disp(' ')
b=input(' ENTRE COM O COEFICIENTE, b = ');
disp(' ')
c=input(' ENTRE COM O COEFICIENTE, c = ');
disp(' ')
disp(' ----------------------------')
disp(' RAÍZES (ZEROS) DA PARÁBOLA ')
disp(' ----------------------------')
delta=b^2-4*a*c;
if delta >=0
x´=(-b-sqrt(delta))/(2*a)
x´´=(-b+sqrt(delta))/(2*a)
else
i=sym ('i');
x´=(-b-sqrt(-delta)*i)/(2*a)
x´´=(-b+sqrt(-delta)*i)/(2*a)
end
disp(' ')
disp(' ------------------------------------')
disp(' COORDENADAS DO VÉRTICE DA PARÁBOLA ')
disp(' ------------------------------------')
disp(' ')
xv=-b/(2*a)
yv=-(b^2-4*a*c)/(4*a)
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
74
16) Determinação do fatorial de um número dado
function fatorial(n)
% Determinar o fatorial de um número n dado
% n! = n .(n-1).(n-2).(n-3). ... .3.2.1
% Sintaxe: fatorial(n)
if n < 0
disp(' ')
disp(' Erro: o número deve ser não negativo')
disp(' ')
elseif n==0
disp(' ')
fatorial_n=1;
disp([' ' num2str(n),'! = ' num2str(fatorial_n)]);
disp(' ')
else
disp(' ')
fatorial_n=prod(1:n);
disp([' ' num2str(n),'! = ' num2str(fatorial_n)]);
disp(' ')
end
function fatorial2(n)
if n==0
disp(' ')
disp('1')
disp(' ')
else
prod=1;
while n~=0
prod=prod*n;
n=n-1;
end
disp(' ')
disp(prod)
disp(' ')
end
function fatorial3(n)
if n==0
disp(1)
else
prod=1;
for i=1:n;
prod=prod*i;
end
disp(' ')
disp(prod)
end
function fatorial4(n)
i=1;
prod=1;
if n<0
disp( ' ')
error('n deve ser não negativo')
else
while i<=n
prod=prod*i;
i=i+1;
end
disp(' ')
disp(prod)
end
function p=factorial(n)
if (length(n)~=1)|(fix(n)~=n)|(n<0)
error('n deve ser não negativo')
end
p=prod(1:n);
Exercício: Elaborar um aplicativo que solicite do usuário o seu salário bruto e que determine o
seu salário líquido, isto é, já descontado o INSS e o IRPF
Nota:
• Considere que as alíquotas do INSS podem ser: 8%, 9%, 10%, 11%, sendo que o valor
máximo não possa ultrapassar R$156,00 (valor máximo).
• As alíquotas do IRPF são:
1. Isento para valores até R$ 1.057,50;
2. 15,00% para valores de R$ 1.057,50 até R$ 2.115,00;
3. 27,50% para valores acima de 2.115,00;
4. Assim o valor máximo para dedução é de R$ 423,00.
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIA
75
REFERÊNCIAS BIBLIOGRÁFICAS
01 Curso de MATLAB for Windows, Departamento de Engenharia Mecânica, UNESP,
Campus de Ilha Solteira.
02 JOHNSON, R. A.; WICHERN, D. W. Applied multivariate statistical analysis. 4. ed.
New Jersey: Prentice–Hall, inc., 1998.
03 LECKAR, H.; SAMPAIO, R. Aproximando soluções de AX=B com o MATLAB,
PUC-RJ.
04 MARQUES, J. M. MATLAB BÁSICO Curitiba 1999
05 MATLAB for Windows User’s Guide, version 5.2 Student, The Math Works Inc.,
1991.
06 MATLAB: The Language of Technical computing – Using MATLAB: Version 5.
Natick, MA: The Math Works, Inc, 1998.
07 MATSUMOTO, E. Y. MATLAB 6 – Fundamentos de programação, Ed. Érica, 1. ed.,
2001.
08 OPTIMIZATION TOOLBOX: For use with MATLAB. User's Guide: version 5. Natick,
MA: The Math Works, Inc, 1997.
09 PUCCINI, A. de Lima e PIZZOLATTO, N. Introdução a Programação Linear. Rio de
Janeiro. Livros Técnicos e Científicos ed., 1983
10 SAMPAIO, R.; CATALDO, E.; RIQUELME, R. Introdução ao MATLAB, Laboratório
de vibrações, PUC-RJ.
11 STATISTICS TOOLBOX: For use with MATLAB. User's Guide: version 2.1. Natick,
MA: The Math Works, Inc., 1998.
12 SWOKOWSKI, E. W Cálculo com Geometria Analítica. 2. ed. Vol I e II Makron
Books São Paulo, 1994
13 SYMBOLIC MATH TOOLBOX: User's Guide: version 2. Natick, MA: The Math
Works, Inc, 1997.
14 THE STUDENT EDITION OF MATLAB: Version 5 – User's Guide. New Jersey,
1998.
15 ZIONTS, Stanley Linear and Integer Programming. New Jersey, Prentice-Hall, inc.,
1974.
ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
®
PROF. M. Sc. JOSÉ DONIZETTI DE LIMA
Ministério da Educação
Centro Federal de Educação Tecnológica do Paraná
Unidade de Pato Branco
ELEMENTOS BÁSI COS DE
PROGRAMAÇÃO EM MATLAB
®
PROF. : M. Sc. JOSÉ DONI ZETTI DE LI MA

ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
CAPÍTULO I 1 INTRODUÇÃO 1.1 Breve Histórico e Visão Geral do Software MATLAB

3

O MATLAB original foi desenvolvido em linguagem Fortran por Clever Moler. Essas novas versões (5 e 6) foram desenvolvidas em linguagem C por: Steve Bangeret, Steve Kleiman e Clever Moler – Stanford University. Desde a sua primeira versão (1984), o MATLAB é tido como produto líder na área de computação numérica e científica. Mais do que um software, o MATLAB é um ambiente integrado de modelagem de sistemas e algoritmos, ideal para implementação de projetos complexos, e que por esta razão vem sendo adotado como ferramenta de desenvolvimento padrão pelas principais universidades do Brasil e do mundo. O MATLAB é um software destinado a fazer cálculos com matrizes (matriz é o seu elemento essencial). O nome MATLAB é derivado de MATrix LABoratory, ou seja, um laboratório de matrizes. O MATLAB é um sistema interativo cujo elemento básico da informação é uma matriz que não requer dimensionamento. Esse sistema permite a resolução de muitos programas numéricos em apenas uma fração do tempo que se gastaria para escrever um programa semelhante em linguagem tradicional como Fortran, Basic, C/C++, Delphi, Visual Basic, etc. O MATLAB é o núcleo de um ambiente de computação numérica baseado em matrizes que integra: • Funções de tratamento numérico de alta performance; • Sofisticados recursos de geração de gráficos para visualização de dados; • Poderosa linguagem de programação de alto nível. Assim, o MATLAB pode ser usado para: • Cálculos matemáticos; • Desenvolvimento de algoritmos; • Modelagem, simulação e visualização de protótipos; • Análise, exploração e visualização de dados; • Gráficos científicos e de engenharia; • Desenvolvimento de aplicações, incluindo a elaboração de interfaces gráficas com o usuário. O MATLAB é um software matemático interativo de alta performance utilizado em cálculos numéricos por cientistas, engenheiros, pesquisadores, estudantes, etc. O MATLAB é composto de um módulo matemático básico fundamental ao qual podemos agregar os mais variados toolbox (caixas de ferramentas) como: estatísticas, matemática financeira, matemática simbólica, otimização, etc. O MATLAB integra a análise numérica, cálculo matricial, processamento de sinais e gráficos, de uma forma tal que os problemas e soluções são expressos de maneira bem próximos como são escritos matematicamente. Assim, como os comandos são muito próximos da forma como são escritas as expressões algébricas, torna-se mais simples o seu uso.

PROF. M. Sc. JOSÉ DONIZETTI DE LIA

ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB

4

Uma vez inicializado o MATLAB, aparecerá na janela de comandos um prompt "»". Esse prompt significa que o MATLAB está esperando comando. A figura a seguir ilustra essa tela inicial Figura 1: Janela de comandos do MATLAB

Não se esqueça: Todo comando deve ser finalizado teclando-se "ENTER". No MATLAB trabalhamos essencialmente com um tipo de objeto: uma matriz numérica cujos elementos podem se constituir de números complexos. Em diversas situações, um significado especial é atribuído a uma matriz 1x1, que representa um escalar, e para matrizes com uma linha ou uma coluna, que representam vetores. A linguagem MATLAB não contém declaração de dimensionamento ou declaração do tipo. O armazenamento é feito automaticamente. A seguir é dada uma breve descrição das teclas para reeditar uma linha de comando:
retorna a linha anterior ↑ retorna a linha posterior ↓ move um espaço para a esquerda ← move um espaço para a direita → move uma palavra para a esquerda Ctrl ← move uma palavra para a direita Ctrl → Home move para o começo da linha End move para o final da linha Del apaga um caracter a direita Backspace apaga um caracter a esquerda Para sair do MATLAB, digite exit ou quit seguido de ENTER. Para interromper um comando do MATLAB, aperte a tecla Ctrl C, seguido de ENTER

O comando help proporciona informações on-line sobre um tópico escolhido
help help função help elfun help graphics help plotxy help plotxyz apresenta os diretórios no trajeto de busca (path) do MATLAB mostra as linhas de comentários que documentam a função lista as funções matemáticas elementares que estão disponíveis lista as funções relacionadas com a criação e controle de figuras e gráficos lista as funções para traçado de gráficos X-Y lista as funções para traçado de gráficos de superfícies e 3D

PROF. M. Sc. JOSÉ DONIZETTI DE LIA

. Sc. número de bytes e classe) 5 2. bem como na manipulação de dados.1 Controle da janela de comandos As principais funções para o controle da janela de comandos são: clc clear computer delete demo diary dir fclose flops fopen format help home load lookfor save size ver version what who whos limpa a janela de comandos (semelhante ao comando cls do DOS) limpa da memória variáveis e funções retorna string contendo o computador que está executando MATLAB apaga um arquivo ou um objeto gráfico demonstra recursos do MATLAB. Quando o MATLAB faz cálculos.7977x10 ≅2 -1074 -308 menor número real positivo utilizável (representável em ponto flutuante)=2. Menor número que.mat e . = razão entre o perímetro da circunferência e seu diâmetro 1023 308 maior número real positivo utilizável (representável em ponto flutuante)=1. ele utiliza os valores conhecidos para as variáveis no momento em que o cálculo foi solicitado. apresenta o menu de demos diary nome_do_arquivo salva o texto (comandos e resultados) de uma sessão dir nome_do_diretório lista os arquivos no diretório fecha um arquivo retorna a contagem de operações em ponto flutuante realizadas abre arquivo estabelece o formato para mostrar os resultados numéricos recurso de ajuda on-line retorna o cursor para o canto esquerdo superior da tela carrega variáveis armazenadas em arquivos . Pode ser usado como um erro a ser tolerado na busca de solução para um determinado problema através de um processo iterativo Raiz imaginária (raiz quadrada de –1). resulta em um número de ponto flutuante maior do que 1 no computador.2 Variáveis Cada variável é um local na memória do computador capaz de conter um valor que pode ser modificado durante a execução do programa.2251x10 ≅2 i ou j inf NaN ou nan nargin nargout pi realmax realmin PROF.m.mat recurso de ajuda (help) por palavra-chave grava variáveis (em arquivos . O MATLAB possui constantes numéricas predefinidas que podem ser utilizadas na definição de vetores e matrizes. M.mex) no diretório corrente lista as variáveis correntes lista as propriedades das variáveis atuais (nomes. somado a 1.. precisão em ponto flutuante. use sempre o comando clear.14159.ou seja: − 1 infinito (exemplo: 1 / 0) Not a Number (não número) (exemplo: 0 / 0. isoladamente. . dimensão. São elas: ans eps variável de trabalho (utilizada para armazenamento quando não há atribuição). ∞ / ∞) number of argument input: número de argumentos de entrada number of argument output: número de argumentos de saída 3. padrão usada para resultados (ans = answer = resposta = saída dos resultados) -52 -16 Precisão numérica relativa (2 ≅ 2x10 ). JOSÉ DONIZETTI DE LIA .mat (formato binário) retorna as dimensões de uma matriz mostra o número da versão do MATLAB e dos toolboxes instalados retorna a versão em uso do MATLAB lista os arquivos (.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB CAPÍTULO II 2 CONCEITOS BÁSICOS 2. Cuidado com lixos.

. M. envolver variáveis de saída ponto decimal linha de continuação separador Termina linhas suprimindo a sua impressão na tela comentários Seguida de um comando do DOS. geração de vetores.^ ' ou transpose Significado adição subtração multiplicação multiplicação elemento a elemento divisão à direita divisão elemento a elemento divisão à esquerda potenciação potenciação elemento a elemento transposta Exemplo » 2+3 » 5-4 » 2*3 » [1 2]. JOSÉ DONIZETTI DE LIA .4 Operadores aritméticos Operador + * .6 Operadores lógicos Operador & | ~ xor any all Descrição e (and) ou (or) não (not) a ou b../2 » 2\4 » 2^3 » [3 4]./ \ ^ . acionará esse comando digitado define string efetua atribuição de variável 2..* / .^2 » [3 4] Resultado 5 1 6 3 6 0. Sc. . como único índice.3 Caracteres especiais : () [] .5000 4 2 2 8 9 16 3 4 2. envolver índices. .ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB A seguir tem-se as principais dicas sobre o nome a ser dado a uma variável Regras para nomes devem começar com uma letra podem conter letras. mas não a e b (exclusive or) ou exclusivo verdadeiro se algum elemento do vetor for verdadeiro verdadeiro se todos os elementos do vetor forem verdadeiros PROF. algarismos e caracter de sublinhado sensíveis a maiúsculas e minúsculas podem conter até 32 caracteres Exemplo matriz1 matriz5_ex8 as variáveis A e a são diferentes variavel1234_exercicio22_lista03 6 2. empilha matriz em uma coluna ordem de precedência em cálculos. % ! ' = indexação. envolver variáveis de entrada definir vetores e matrizes.5 Operadores condicionais Operador Descrição Exemplo == igual a » 5==2 > maior do que » 5>2 >= maior ou igual a » 5>=2 < menor do que » 5<2 <= menor ou igual a » 5<=2 ~= diferente (não é igual a) » 5~=2 Lembrete: “=” é usado para atribuição e não para comparação Resultado 0 (falso) 1(verdadeiro) 1(verdadeiro) 0(falso) 1(falso) 1(verdadeiro) 2.*3 » 2/4 » [8 4].

3) = 2 arredonda para o inteiro mais próximo: Exemplo: 2. logaritmo de x na base 10 logaritmo base 2 e desmembra números em ponto-flutuante aproximação racional: Exemplo: rat(pi)= 3 + 1/(7 + 1/16) = 355/113 saída no formato racional: Exemplo: rats(pi) = 355/113 resto da divisão de x por y: Exemplo: rem(8. JOSÉ DONIZETTI DE LIA . depois 2 em graus. Sc.98 = 3 função sinal raiz quadrada de x abs(x) exp(x) fix floor ceil gcd(x. Por exemplo: >> x=sqrt(2)/2 x = 0. módulo de x x exponencial (base e). M. ou seja. e arredonda em direção ao zero.98 = 2 arredonda em direção a menos infinito (-∞) arredonda em direção a mais infinito (+∞) máximo divisor comum de x e y mínimo múltiplo comum de x e y logaritmo natural (base e).7071 >> y=acos(x) y = 0.1 Funções Científicas O MATLAB tem uma série de funções científicas predefinidas (help elfun).ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB CAPÍTULO III 3 FUNÇÕES ELEMENTARES DO MATLAB 7 3.y) log(x) log10(x) log2 rat rats rem (x. A maioria pode ser usada da mesma forma que seria escrita matematicamente. arco cuja tangente hiperbólica é x acoth (x) arco cuja cotangente x arco cujo cotangente hiperbólica é x acsch (x) arco cuja cosecante x arco cujo cosecante hiperbólica é x asech (x) arco cuja secante x arco cujo secante hiperbólica é x Funções Elementares valor absoluto. ou seja.7854 >> y_graus=y*180/pi y_graus = 45. considera apenas a parte inteira: Exemplo: 2.0000 Estes comandos calculam o arco cujo cosseno é 2 .y) lcm(x.y) round sign sqrt(x) PROF. Abaixo segue uma lista de algumas funções científicas disponíveis: sin (x) cos (x) tan (x) cot (x) sec (x) csc (x) asin (x) acos (x) atan (x) acot (x) acsc (x) asec (x) Funções Trigonométricas sinh (x) seno de x seno hiperbólico de x cosh (x) coseno de x coseno hiperbólico de x tanh (x) tangente de x tangente hiperbólica de x coth (x) cotangente de x cotangente hiperbólica de x sech (x) secante de x secante hiperbólica de x csch (x) cosecante de x cosecante hiperbólica de x asinh (x) arco cujo seno é x arco cujo seno hiperbólico é x acosh (x) arco cujo cosseno é x arco cujo coseno hiperbólico é x atanh (x) arco cuja tangente x. inicialmente em radianos. logaritmo de x na base e logaritmo decimal (base 10). ou seja. ou seja.

se um resultado é um número inteiro. JOSÉ DONIZETTI DE LIA . 4 casas decimais Ponto fixo. pode ser introduzida de diversas maneiras: • Entrada através de uma lista explícita de seus elementos Essa é a maneira mais fácil de entrar com pequenas matrizes. Sc." para indicar o final de cada linha. o MATLAB mostra uma aproximação com até quatro casas decimais. no MATLAB. Exemplos: 1) Usando ponto e vírgula » A=[1 2 3. 14 casas decimais Notação cientifica. razão de inteiros É importante salientar que o MATLAB não muda a sua forma de representar os números internamente. e usando ponto e vírgula ". Exemplos: 1) Gerar uma matriz identidade 3X3 » I3=eye(3) I3 = 1 0 0 0 1 0 0 0 1 2) Gerar uma matriz nula 2x3 » Z0=zeros(2.". isto é. o MATLAB mostra o resultado em notação científica. Nessa lista.3) Z0 = 0 0 3) Gerar um vetor formado por elementos 1's » UM=ones(3. 2 casas decimais Formato racional (aproximadamente). 4 casas decimais (formato predefinido. No caso de nenhum formato estar definido. o MATLAB mostra como um inteiro. Você pode definir um formato diferente. Os seguintes comandos controlam o formato em que são mostrados os dados e resultados: FORMATO format short format short e format long format long e format bank format rat RESULTADO Ponto fixo. Quando um resultado é um número real. M.4 5 6. 14 casas decimais Valor monetário (dólares e centavos). default – padrão) Notação cientifica. que fizemos anteriormente. tem-se o resultado: A= 1 4 7 2 5 8 3 6 9 2) Sem usar o ponto e vírgula seria » A=[1 2 3 Pressionando ENTER 4 5 6 Pressionando ENTER 7 8 9] Pressionando ENTER A= 1 4 7 2 5 8 3 6 9 • Gerando a matriz com uso de uma declaração ou função Para gerar uma matriz através desta opção.1) UM = 0 0 0 0 1 1 1 PROF. estando entre colchetes "[ ]".2 Formatos Numéricos 8 Quando o MATLAB mostra um resultado numérico ele segue certas regras. Se os dígitos significativos estiverem fora desta faixa.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 3.3 Entrada de Matrizes Uma matriz.7 8 9] Pressionando ENTER. 3. os elementos são separados por espaço(s) " " ou por vírgula ". basta declarar a função e seu respectivo argumento. quando formatos diferentes de exibição de números são escolhidos. Este foi o caso no exemplo do arco cosseno.

para termos a matriz na tela. Lembrete: 1) Deve-se dar ENTER após cada linha de comando para que o MATLAB execute o mesmo. Exemplo: 1) Utilizando o editor do MATLAB. basta digitar o nome dado a ela. 2. M.. Sc. etc. Exemplo: » I50=eye(50). Para entrar no editor faça: Clique em File.. 0 0 0 0 0 0 0 0 0 0 0 .m (a extensão é sempre m) contendo uma matriz M: 2x3. 3. 4. criar o arquivo matriz1. 2) Os parâmetros devem estar entre parênteses "( )" PROF." a sua exibição na tela será omitida. Isto é útil principalmente no caso em que a expressão resulta em matrizes de grandes dimensões. formada pelos elementos (1.4 5 6] Para salvar este arquivo: Clique em File. Pressionando ENTER. 5. aparece apenas a próxima linha de comando » % ao digitar o nome da matriz. e 6.. JOSÉ DONIZETTI DE LIA . a mesma é mostrada de forma explícita. » matriz1 M= 1 4 2 5 3 6 Sempre que escrevermos uma matriz e encerrarmos com ponto e vírgula ". » I50 I50 = Columns 1 through 12 1 . Neste caso. Save As. nessa ordem). utilizamos um editor de texto.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB • Criando um arquivo com extensão M 9 Para criar um arquivo com extensão M. como por exemplo o EDIT do DOS..m Para que a matriz M esteja disponível basta digitar o nome do arquivo nas linhas de comando. o WORDPAD do WINDOWS. o editor do MATLAB. Salve como: matriz1. New e M-File A seguir digite: M=[1 2 3.

Nessa saída aparecem duas variáveis.2 Adição Se a dimensão dos polinômios p1 e p2 forem iguais.p2) 3. M.r] = deconv(p1.1 Raízes Considere o vetor p = [1 –5 6].4.4. no MATLAB. Existem várias funções que trabalham com polinômios são elas: FUNÇÃO conv conv2 deconv poly polyadd polyder polyfit polyval residue roots OBJETIVO multiplicar polinômios.4 Divisão A sintaxe [q. convolução multiplicar polinômios bidimensionais dividir polinômios.p2) retorna o resultado da divisão do polinômio p1 pelo polinômio p2. Se a dimensão de p1 for diferente da dimensão de p2.p2) multiplica o polinômio p1 pelo polinômio p2. » r=roots(p) r = 3 2 » p=poly(r) p = 1 -5 6 3. polinômio característico efetuar a soma de polinômios calcular a derivada de polinômio efetuar ajuste polinomial de dados avaliar uma matriz polinomial resíduo de divisão de polinômios determinar as raízes de um polinômio (zeros) 3. Sc. 3.3 Multiplicação A função conv(p1.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 3. pode-se fazer: p1 + p2 para obter a sua soma. como vetores linhas contendo os coeficientes ordenados segundo as potências decrescentes dos termos. enquanto que a função poly( r) retorna os coeficiente do polinômio que possui como raízes os componentes do vetor r. Usar a função polyadd(p1. onde: q: é o quociente da divisão de p1 por p2 e r: é o resto dessa divisão PROF.4. tem-se: » p=[1 –5 6]. pode-se usar um dos dois casos: Preencher com zeros os coeficientes das potências que faltam em um polinômio para este igualar-se em dimensão com o outro.4. JOSÉ DONIZETTI DE LIA . correspondente aos coeficientes da equação do segundo grau: x2 – 5x + 6 = 0 e r = [3 2] o vetor contendo as raízes dessa equação. deconvolução construir polinômio a partir de suas raízes. A função MATLAB roots(p): determina as raízes da equação cujos coeficientes estão contidos em p.4 Polinômios 10 Os polinômios são representados. Assim.

Serão exibidos os coeficientes do polinômio que representam a derivada.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 3.a) avalia o polinômio p para o valor a Exemplo: Calcular o valor de p(5) para o polinômio p(x) = x2 – 5x + 6 » p = [1 –5 6].n). a saída é ans abreviação de answer = resposta 11 3.3) p1 = -0.'.7 Interpolação: adequação de curvas (função: polyfit) A função MATLAB polyfit executa o ajuste polinomial de dados. onde n é a ordem da função de y em relação a x.4.0000 function ajuste_poli2 x=[0 1 2 3 4 5].0000 2. p=polyfit(x.6 Derivada A função que determina a derivada do polinômio p é a função: polyder (p).y.y.n) encontra os coeficientes de um polinômio de grau n que ajusta aos dados.0000 6.0000 p3 = 0. y=[5 7 9 11 13].0000 3.0000 3.4.y.0000 3.0000 0. JOSÉ DONIZETTI DE LIA . Sc.0000 6.y.0000 PROF.2) p3=polyfit(x.0000 -5.5 Avaliação A sintaxe polyval(p.0000 2.y. a derivada é dada por: 2x-5 3.2) p3=polyfit(x.y. » polyval(p.5) ans = 6 % como não foi atribuído um nome para a variável resposta.6667 p2 = 1.') pause close p1=polyfit(x. Interpolação quadrática: n=2. p(x(i)) ≅ y(i). plot(x.0000 -5. » der=polyder(p) der = 2 -5 Portanto.0000 p3 = -0. A sintaxe polyfit(x.y.y. Interpolação linear: n=1.y.y. no sentido dos mínimos quadrados.') pause close p1=polyfit(x.1) p2=polyfit(x. M. y=[6 2 0 0 2 6].0000 p2 = 0.4.3) p1 = 2.'.1) p2=polyfit(x. Exemplo: Calcular a derivada da função x2 – 5x + 6 = 0 » p = [1 –5 6].0000 2. plot(x. Interpolação cúbica (usando função do terceiro grau): n=3 Exemplos: Function ajuste_poli1 x=[1 2 3 4 5].0000 1.

5 Sistema de Equações Lineares 12 Resolver sistemas da forma: A * x = b.9796 1171/393 4. . 33 5 7 14 16. . se det(A) ≠ 0 (det = determinante) tem-se uma única solução dada por: x = A-1 * b. 4 6 13 20 22. x2 = 2 e x3 = 3 solução encontrada 17 x1 + 24 x 2 + x3 + 8 x 4 + 15 x5 = 175 33x + 5 x + 7 x + 14 x + 16 x = 190 2 3 4 5  1  Exemplo 2 : Resolver o sistema: 4 x1 + 6 x 2 + 13x3 + 20 x 4 + 22 x5 = 245 10 x + 12 x + 19 x + 21x + 3 x = 190 2 3 4 5  1 11x1 + 18 x 2 + 25 x3 + 2 x 4 + 9 x5 = 175  Dica: Use a função inversa e a formatação de números racionais  260 883 1171 1589 1952  . esses sistemas podem ser resolvido com qualquer um dos comandos: » x=inv(A)*b ou » x=A\b ou » x=pinv(A)*b  x1 + 2 x2 + x3 = 8  Exemplo 1: Resolver o sistema de equações lineares: 2 x1 − x2 + x3 = 3  − x + x − 2 x = −5 2 3  1 No MATLAB.0433 1589/393 4. M. » format rat X=inv(A)*b » X=inv(A)*b = X = 0. . a entrada será: » A=[1 2 1. a representa: x1 = 1.9669 1952/393 PROF. 10 12 19 21 3. 11 18 25 2 9].3. b=[175 190 245 190 175]'.6616 260/393 2. ) Resposta: SPD: S = (  393 393 393 393 393  » » » X A=[17 24 1 8 15. -1 1 -2] A = 1 2 1 2 -1 1 -1 1 -2 » b=[8.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 3. 2 -1 1.2468 883/393 2.-5] b = 8 3 -5 »x=inv(A)*b ou »x=A\b ou »x=pinv(A)*b x = 1 2 3 Assim. No MATLAB. Sc. JOSÉ DONIZETTI DE LIA .

M. i=1. permite a solução de sistemas numéricos: solve Exemplos : Resolva os sistemas usando a função solve do MATLAB  x + y = 10  x − y = 2  x1 + 2 x2 + x3 = 8  2 x1 − x2 + x3 = 3 − x + x − 2 x = −5 2 3  1 » x 6 y 4 » x 1 y 2 z 3 [x.'2*x-y+z=3'. mas sim motivar o aprendiz para. i=i+1.y]=solve('x+y=10'. a partir das funções MATLAB construir programas com uma facilidade maior para o usuário final. function sislin disp(' ') disp(' Resolução de sistemas lineares do tipo Ax=b.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB Uma outra função MATLAB.z]=solve('x+2*y+z=8'. end disp(' ') end Não é objetivo. PROF.'-x+y-2*z=-5') = = = 13 Exercício 1: Construir um programa para a resolução de sistemas lineares com uma única solução ou seja det(A) ≠0. a compreensão de todas as sintaxes usadas nesse programa.' = ' num2str(x(i)) ]). JOSÉ DONIZETTI DE LIA .y. neste momento. while i<=(length(b)) disp([' x_'num2str(i). Sc. 'x-y=2') = = [x. com det(A)~=0') disp(' ') A=input(' Entre com a matriz dos coeficientes (entre [ ]): A ==> ' ) disp(' ') b=input(' Entre com o vetor das constantes (entre [ ]): b ==> ' ) disp(' ') if det(A)==0 disp(' ') disp (' Fim do Programa') disp(' ') else disp(' Solução encontrada para o sistema') disp(' ') x=inv(A)*b.

disp([' ' num2str(n). . Ex. Exemplo: power (2. : 1) factor(210) = [2 3 5 7] 2)x=sym('x').ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 3. prod(v)= 6 n power(m. function fatorial(n) % Determinar o fatorial de um número n dado % n! = n .B) representa A∪B = [1 2 3 4 5 6 7 8] intersect (A. » uniao=union(A. disp(' ') end PROF.B) representa (A∪B) . disp(' ') else disp(' ') fatorial_n=prod(1:n).5 Operações com conjuntos Dados A = [1 2 3 4 5] e B = [4 5 6 7 8] union (A. . disp([' ' num2str(n).2. decomp=factor(x^2-4) =(x-2)*(x+2) primes(n) determine os números primos entre 0 e n.. Sc.2 )= 6.3. m pode ser matriz.B) difer = 1 2 3 » exclus=setxor(A. Exemplo: v = [1 2 3].(n-2).'! = ' num2str(fatorial_n)]).Para determinar as combinações.(n-3).3) = 8 factor(n) determina os fatores primos de n.B = [1 2 3] setxor (A. faça: length(perms(v)) nchoosek(m. o número de elementos a ser tomado em cada combinação Exercício 1: Construir um programa que calcula o fatorial de um número n dado.'! = ' num2str(fatorial_n)]).B) intersec = 4 5 » difer=setdiff(A. » B=[4 5 6 7 8].B) representa A .B) uniao = 1 2 3 4 » intersec=intersect(A.n) determina m .n) onde V é um vetor contendo os elementos a ser combinados e n.B) exclus = 1 2 3 6 14 5 6 7 8 7 8 Outros comandos úteis prod(v)retorna o produto do elementos do vetor v. JOSÉ DONIZETTI DE LIA .(n-1). : 1) primes(10) = [2 3 5 7] perms (v) mostra todas as possíveis permutações dos elementos contidos no vetor.B) representa A∩B = [4 5 ] setdiff (A. ou decompõe polinômios. Ex. M. Para determinar o número de permutações.(A∩B) = [1 2 3 6 7 8] » A=[1 2 3 4 5].n) determina o número de combinações simples nchoosek(4. faça nchoosek(v..1 % Sintaxe: fatorial(n) if n < 0 disp(' ') disp(' Erro: o número deve ser não negativo') disp(' ') elseif n==0 disp(' ') fatorial_n=1.

7 Data e Hora 15 As funções relacionadas a data e hora são importantes.7854 % Obtém-se o argumento(ângulo)do número complexo angulo_radiano normalizado.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 3. ' minutos 'num2str(c6).' horas ' num2str(c5). dia. isto é.c2=c(2).8 Números complexos Os números complexos são números da forma: z = a + bi = a + bj.c5=c(5). t=etime(t2.' 'num2str(c4). c1=c(1). sintaxe: t1 = clock. segundos) nesta ordem converte a data numérica em literais retorna o dia da semana calendário de qualquer mês inserir data em gráficos (eixo x) tempo de CPU (unidade central de processamento) utilizado pelo MATLAB retorna tempo (em segundos) transcorrido entre dois momentos especificados. t2 = clock .' ano: 'num2str(c1)]) disp(' ') disp([' 'num2str(c4).pi] » angulo_graus=angulo_radiano*180/pi angulo_graus = 45 PROF. pois possibilitam determinar o tempo de execução de nossos programas. com a e b ∈ ℜ.t1). mês. as principais funções relacionadas aos complexos são: abs angle cart2pol cart2sph conj imag pol2cart real sph2cart módulo (magnitude) do número complexo ângulo (fase. toc retorna dia-mês-ano retorna data e hora atual (ano. tempo = etime(t2. argumento) do número complexo transforma coordenadas cartesianas para polares transforma coordenadas cartesianas para esféricas conjugado do número complexo parte imaginária do número complexo transforma coordenadas polares para cartesianas parte real do número complexo transforma coordenadas esféricas para cartesianas Exemplo: » a=1+1i.' horas ' num2str(c5). hora. M.' segundos']) disp(' ') 3.c3=c(3).t1) aciona e faz a leitura de um cronômetro. Sc. disp(' ') disp([' tempo transcorrido: 'num2str(t).c6=c(6).' mês: 'num2str(c2). respectivamente Exemplo function tempo t1=clock. JOSÉ DONIZETTI DE LIA .' segundos']) disp(' ') disp('OUTRA FORMA ') disp(' ') disp([' dia: 'num2str(c3). No MATLAB. » Real=real(a) Real = 1 » Imag=imag(a) Imag = 1 » Modulo=abs(a) Modulo = 1. As principais funções são: date clock datestr weekday calendar datetick cputime etime tic. c4=c(4). ' minutos 'num2str(c6).4142 » angulo_radiano=angle(a) angulo_radiano = 0. minutos. no intervalo [-pi. disp([' Data: 'num2str(date).' segundos']) pause(2) t2=clock. e i = j = − 1 . disp(' ') c=clock.

200) % linspace(inicio. M.100) >>logspace(0..fim. onde a1=1.5) % linspace(inicio.5) % Forma uma P. an=13 e n=5 Vet1 = 1 4 7 10 13 Vetores DECLARAÇÃO sum(v) std(v) max(v) mean(v) min(v) abs(v) norm(v) length(v) sort(v) prod(v) x’ * y SIGNIFICADO A soma dos componentes do vetor v Desvio padrão com respeito á média Maior componente de um vetor Média das componentes do vetor v Menor componente do vetor v Módulo das componentes do vetor v Norma euclidiana do vetor v Número de componentes do vetor v Ordena o vetor v em ordem crescente Produto das componentes do vetor v Produto interno dos vetores x e y Principais funções matriciais [Notação: (m = n0 de linhas. Obs.A =1 Matriz idempotente Matriz ortogonal (A inversa da matriz é a sua transposta) Matriz ortonormal Matriz simétrica Matriz anti-simétrica PROF.fim.A SIGNIFICADO Determinante de uma matriz Inversa de uma matriz Inversa generalizada de uma matriz Matriz identidade Matriz escalar Traço de uma matriz (soma dos elementos da diagonal principal) Matriz transposta Posto de uma matriz (rank=número de linhas Linearmente Independentes) Gera dados com distribuição uniforme no intervalo (0. n = n0 de colunas e A = matriz] DECLARAÇÃO det(A) inv(A) pinv(A) eye(n) k.n) randn(m.fim.: Se o número de elemento for omitido. A. an=13 e n=5 » Vet1=linspace(1.9 Operações com vetores e matrizes Definição de intervalos Exemplos: >> 0:0. Sc..13. o MATLAB assume 100.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 3.13.2.eye(A) trace A‘ = transpose(A) rank(A) rand(m.n) diag(A) zeros(m.n) >>linspace(4.11) % potência de 10: logspace(inicio.n) autovalores = eig(A) [autovet autoval]=eig(A) sqrt(A) sqrtm(A) A*A=A A’= inv(A) A’= inv(A) e det(A) = ± 1 A’ = A A’ = . JOSÉ DONIZETTI DE LIA . Exemplo: Formar uma P. 1) Gera dados com distribuição normal padronizada (média = 0 e variância = 1) Matriz diagonal ou diagonal de uma matriz (exibe os elemento da diagonal) Matriz nula Autovalores de uma matriz Autovetores de uma matriz (Os autovetores já saem normalizados) Raiz de uma matriz (extrai a raiz de cada elemento da matriz) 1/2 1/2 Raiz quadrada de uma matriz A .05:2 % inicio: incremento :fim >> 0:2 % inicio:1:fim >>linspace(1. A.n) >>for k=vi:in:vf instruções end 16 linspace: define vetores com elementos linearmente espaçados (incrementos iguais). onde a1=1.

8 -1 0 10 20 30 40 50 60 70 Note que o eixo das abcissas não reflete a faixa de valores que foi usada para produzir o vetor y. 0 .8 » x = -pi : 0. a função assume que o primeiro vetor é o das abcissas.2 0 -0. para se desenhar o gráfico da função seno. O MATLAB não desenha diretamente gráficos de funções como no MAPLE ou MATHEMATICA. Sc.4 0 . y).ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB Capítulo IV 4 RECURSOS GRÁFICOS 17 O MATLAB possui ferramentas poderosas e amigáveis para a visualização de dados.6 -0. tipicamente. em um vetor. 4. devemos criar um vetor com os valores da função seno e depois plotar o vetor: 1 0.8 -1 -4 -3 -2 -1 0 1 2 3 4 PROF. Nesta seção apresentar-se-á aspectos básicos e uma visão geral dos recursos gráficos disponíveis. e o segundo vetor é o das ordenadas. de -pi até pi. M.1 : pi. Por exemplo. » y= sin (x).2 -0 .y)). Informações detalhadas ou sobre gráficos específicos podem ser obtidos no Help do MATLAB.2 -0.6 -0 .1 Visualização de Curvas Os dados a serem visualizados em um gráfico devem estar. o plot assume que o eixo das abcissas deve ser o índice do vetor. bem de acordo com a filosofia de um laboratório de dados: fácil de experimentar e fácil de averiguar. Quando passamos dois vetores para o comando plot. » plot( y ) O resultado do plot é 0.6 0. Para plotar os valores corretos no eixo das abcissas.4 0.6 » x = -pi : 0.1 : pi. » y = sin ( x ).4 -0. O resultado é: 1 0 . »plot( x.8 0 .4 -0 . Ao invés disso. basta usar uma pequena variação desse comando (plot(x. de -pi até pi. JOSÉ DONIZETTI DE LIA .2 0 -0 .

.solid sólida : dotted pontilhada -. plot(x.z.1.y) como início do texto gtext('texto'): coloca texto. marcadores e cores. opções essas válidas para plotar em 2D e 3D. Tipos de cores y yellow amarelo m magenta magenta (lilás) c cyan azul-claro r red vermelho g green verde b blue azul escuto w white branco k black preto Marcadores de ponto .1 Estilos de linhas.'r*'. Quando desejar mudar de lugar. M. na cor vermelha e os pontos representados por asteriscos e a segunda com linha pontilhada e na cor azul..^2. 1a forma: function grafico_2x1a x=-1:0.'legendan'): cria uma caixa de legendas no canto superior direito. existem as seguintes configurações de linhas.1.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 18 Exemplo 1: Construir um programa para plotar duas curvas no mesmo gráfico. etc Construção do eixo X Construção do eixo X axis ('ij') axis ('off') axis([Xmin Xmax Ymin Ymax]) axis(‘auto’) 4.2 Especialidades dos gráficos bidimensionais xlabel('rótulo do eixo x'): título do eixo X ylabel('rótulo do eixo y'): título do eixo Y grid: para inserir linhas de grade title('título'): coloca título no gráfico.^3.'texto'): coloca texto usando as coordenadas (x. sendo a primeira com linha sólida. [Ymin Ymax]) insere os valores do eixo y em ordem decrescente elimina os eixos define escalas para os eixos X e Y retorna ao modo automático: Xmin = min(X) e Xmax = max(X).[0 0]) hold on.'legenda2'. Sc. y=x..'r*') pause % pausa até ser pressionada uma tecla hold on % Mantém o gráfico atual plot(x.'b:') pause close 2a forma: function grafico_2x1b x=-1:0.y. dashdot traço-ponto -. y=x.dashed tracejada • Manipulação dos eixos (após o plot): hold on.1:1. z=x. na parte superior da tela text(x. plot([Xmin Xmax].1:1. point ponto o circle círculo x x-mark x + plus + * star asterisco s square quadrado d diamond diamante v triangle triângulo ^ triangle triângulo < triangle triângulo > triangle triângulo p pentagram estrela de 5 pontas h hexagram estrela de 6 pontas Tipos de linhas . coincidindo o início do texto com o cruzamento das duas retas que aparecem legend('legenda1'.'b:') pause close 4. JOSÉ DONIZETTI DE LIA . plot([0 0]..^3. basta clicar na caixa e arrastar com o botão esquerdo do mouse clf apaga a figura atual close fecha todas as janelas gráficas PROF. centralizado.y. plot(x.x.^2. z=x. marcadores e cores No MATLAB. que irá começar a ser escrito no local onde o mouse for clicado.z.y.

yv) legend('y = x. onde p representa a posição de cada novo gráfico.01:4. plot(x. plot(x.y) subplot(2. y=x.4) x=-2:0. fornecendo título ao gráfico.01:5. y=x.yv. plot(x.^2+2. M. Exemplo 3: function sub_plot subplot(2.2.01:2. bem como aos eixos x e y. % inicio: incremento :final y=x. cada gráfico terá uma posição de acordo com elementos matriciais (m linhas e n colunas). JOSÉ DONIZETTI DE LIA . plot(x.^2.2. até ser pressionada uma tecla pause (n): pausa na execução de um programa de (n) segundos hold on: mantém o gráfico atual Exemplo 2: Desenhar o gráfico da função f(x) = x2 + 2. y=x. y=x. plot(x. ou seja.y) subplot(2.01:4.2. no intervalo [-5. yv.01:4. Sc. 'vértice') % Inseri texto ao gráfico em local predefinido no programa (xv. xv=0.'or') title('PARÁBOLA') % Título do gráfico xlabel('eixo das abscissas') % Nome do eixo x ylabel('eixo das ordenadas') % Nome do eixo y text(xv. yv=2.^3.2.^2 + 2') % Cria legenda grid % Gera grade pause close Destaca-se que podem ser gerados vários gráficos em uma mesma janela.^2-5*x+6.y) pause close PROF.3) x=-4:0. A sintaxe subplot(m.y) % Cria curva com linha sólida e azul hold on % Mantém o gráfico atual plot(xv. 5].^2 + 5.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 19 figure(n): ativa a janela da figura especificada (n) zoom: expande a figura a cada click do botão esquerdo do mouse e clicando-se no botão direito acontece o contrário box: liga a caixa ao eixo (traça os eixos das ordenadas e das abscissas nos dois lados) colordef black: colore o fundo da tela de preto colordef white: colore o fundo da tela de branco pause: pausa na execução programa.p): particiona a tela para construção do gráfico em um número igual a mxn.n. com o comando subplot e que as janelas gráficas podem ficar abertas simultaneamente com os comandos figure e hold. Inserir uma observação destacando o vértice da parábola. criar uma legenda e gerar grade.1) x=-4:0.y) subplot(2.2) x=-4:0. function graf1 x=-5:0.

5 0 0 .5 -2 -1 .4 eixo d os sen os 0.y(i)) passados como parâmetros.3 Funções gráficas 2D especiais pie: gráficos de pizza (setores).'MÉDIOS'.6 -0 . sendo destacada a fatia que representa a parte maior deste conjunto de dados. plot(x.6 0. y=sin(t).5 -1 -0 .8 -1 -1 -0 .1:pi. como por exemplos.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 20 Nota: A estrutura do plot permite que os gráficos não estejam restritos a funções. O caso de gráfico de uma função y = f(x) deve ser tratado como um caso particular de gráficos de curvas (a saber. M. »y=2*sin(t)-sin(2*t).y).y.5 1 1 .5 Com esse exemplo fica claro que o comando plot é adequado para a visualização de curvas paramétricas em 2D. o gráfico da função y=f(x) é o mesmo que o da curva x=t . pie(x.[0 0]) plot([0 0].. »plot(x. 4. Exemplo: function fatia x=[40 30 20 10].5 0 eixo d os cossen os 0.. Podemos plotar curvas paramétricas também.'BONS'. Sc.[-1 1]) pause close Exemplo 2: Cardióide 2 circu nferê ncia trigon omé trica 1 0.5 1 3 »t=-pi:0. »x=2*cos(t)-cos(2*t). 'REGULARES') pause close 10 % Ó T IM O S BO NS M É D IO S R EG UL AR ES 40 % 20 % 30 % PROF. x=cos(t). y=f(t) ). Para referenciar o que representa cada fatia deve-se usar o comando legend. mas destina-se a visualização de curvas paramétricas em ℜ3.. 1 0 -1 -2 -3 -3 -2 .4 -0 . x == max(x)): plota os valores de x.01:2*pi.1.2 0 -0 . A curva exibida é uma poligonização (interpolação linear) dos pontos p(i)=(x(i).8 0.2 -0 . Existe também o plot3 que tem o mesmo princípio do plot. JOSÉ DONIZETTI DE LIA .'r') title('circunferência trigonométrica') xlabel('eixo dos cossenos') ylabel('eixo dos senos') hold on plot([-1 1].x==max(x)) legend('ÓTIMOS'. A sintaxe pie(x. Exemplo 1:Circunferência trigonométrica function ciclo t=0:0.

y): Semelhante ao plot(x. ou seja.y). pause close 200 180 160 140 120 100 80 60 40 20 0 1 2 3 7 4 5 LINHA D E PARET O HIST O G RAMA 100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% histfit: histograma com ajuste a curva normal.1. Sc. ou seja. M.1). area(x2. comet(x. Exemplo: » x=normrnd(0.01:5. plota um gráfico de área.y1) hold on x2=1:0.y2) title('GRÁFICO DE ÁREA') xlabel('EIXO X') ylabel('EIXO Y') pause close G RÁ F ICO DE Á REA 25 20 15 EIXO Y 10 5 0 -5 0 EIXO X 5 comet: gera gráfico com exibição da trajetória animada. y2=x2. mas a área sob a curva é hachurrada.01:3.^2. plot(x1. function graf_area x1=-5:0. Exemplo: x=0:0.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 21 pareto (x): Os valores do vetor x são desenhados em colunas em ordem decrescente. pareto(x) legend('LINHA DE PARETO'.'HISTOGRAMA'). JOSÉ DONIZETTI DE LIA . Exemplo: function grafico_pareto1 x=[104 42 20 10 6 4 14]. y1=x1.^2. » histfit(x) » xlabel('eixo x') » ylabel('eixo y') eixo y HIST O G R AMA C O M AJUST E A C UR VA NO R MAL 90 80 70 60 50 40 30 20 10 0 -3 -2 -1 0 eixo x 1 2 3 area(x.001:2*pi.1000. plota com trajetória de cometa.sin(x)) PROF.

Sc.[Xmin Xmax] % coordenada linear (‘função’. versus o raio r plota histograma em ângulo gira um objeto gráfico de um certo ângulo. apropriado para sinais amostrados) gráfico discreto que indica pontos com marcadores PROF.[Xmin Xmax] % plotar função retorna as coordenadas de pontos de um gráfico selecionados com o mouse ou o cursor plota histograma cria objeto gráfico do tipo linha plota em escala logarítmica para ambos os eixos cria objeto gráfico do tipo patch plota em coordenadas polares o ângulo teta (t). tem-se alguns dos principais comandos para plotar gráficos 2D que não foram apresentados anteriormente: bar barh clabel colorbar compass contour contourc delete errorbar ezplot ezpolar feather(z) fill fplot ginput hist line loglog patch polar (t.4 Funções para gráficos bidimensionais 22 A seguir.[Xmin Xmax] % coordenada polar traça um gráfico que mostra o ângulo e a magnitude dos elementos complexos de z como setas emanadas de pontos igualmente espaçados ao longo de um eixo horizontal desenha polígono 2D (‘função’. em radianos.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 4. M. JOSÉ DONIZETTI DE LIA . (‘função’.1. em uma direção especificada gráfico discreto que indica pontos com marcadores plota em semilog plota em semilog estabelece propriedades para objetos gráficos gráfico escada (plotar em degrau.r) rose rotate scatter semilogx semilogy set stairs stem gráfico de barras verticais (colunas) gráfico de barras horizontais acrescenta rótulos dos níveis em gráficos tipo curvas de níveis (contour) mostra mapa de cores na forma de uma barra (escala) de cores compass(z) traça um gráfico que mostra ângulo e magnitude dos elementos complexos de z como setas emanando da origem (plotar em forma de bússula) plota contorno 2D (tipo curva de nível) cálculo dos níveis (para plotagem de curvas de níveis) elimina um objeto gráfico traça gráfico acrescentando barras (representando faixas) especificadas de erros.

t) title('HÉLICE') xlabel('sen(t)') ylabel('cos(t)') zlabel('t') pause close PROF. M. JOSÉ DONIZETTI DE LIA .z) grid hold on plot3(x.5 Eixo X 0.cos(t). y = cos(t) e z = t function ex_plot3b t=0:pi/50:10*pi. title('DIAGRAMA DE LINHAS') grid xlabel('Eixo X') ylabel('Eixo Y') zlabel('Eixo Z') pause close D IAG R AMA D E LINHAS 40 30 Eixo Z 20 10 0 1 0.y.t).5 0 -0.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 4.5 Eixo Y -1 -1 -0. y=1:5. y = [1 2 3 4 5] e z = [2 2 3 4 4] function ex_plot3 x=1:5.1 Gráficos de linha tridimensional 23 A sintaxe plot3(x. Sc. comet3(sin(t).2.y. plot3(sin(t).z) é utilizada para plotar pontos e linhas no espaço tridimensional. visualiza-se o desenho de uma hélice sendo traçado.y. Exemplo: function helice % comet3: exibe o traçado de uma curva em três dimensões.'ro') pause close 4 3 . com trajetória de cometa. por exemplo t=0:pi/100:10*pi.z.cos(t).5 0 1 O comando comet3 exibe o traçado de uma curva em três dimensões.5 3 2 .2 Visualização de Superfícies 4. plot3(x.5 2 5 4 3 2 1 1 2 4 3 5 Exemplo 2: Plotar a linha (hélice) onde: x= sen (t). Exemplo 1: Plotar a poligonal cujos vértices são dados pelos vetores: x = [1 2 3 4 5].z=[2 2 3 4 4].

ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
4.2.2 Gráficos de Malha e Superfície

24

A sintaxe [X,Y] = meshgrid([Xmin Xmax] , [Ymin Ymax]) específica o domínio para plotar funções. Exemplo 1:
x=1:3; y=4:7; [X,Y]=meshgrid(x,y) X = 1 2 3 1 2 3 1 2 3 1 2 3 Y = 4 5 6 7 4 5 6 7 4 5 6 7

Desta forma, a declaração [X,Y]=meshgrid(x,y) transforma o domínio especificado pelos vetores x e y em valores de X e Y, permitindo a avaliação de funções de duas variáveis Z=f(X,Y) e usando a declaração mesh(Z) plota-se superfícies em 3D. Exemplo 1: plotar z=x2 + y2 com –2 ≤ x ≤ 2 e –2 ≤ y ≤ 2
function parabolica x=-2:0.1:2; y=-2:0.1:2; [X,Y]= meshgrid(x,y); Z=X.^2+Y.^2; mesh(Z) pause print –dbitmap c:\graficos\parabolica close

Para a visualização de superfícies paramétricas em ℜ3, o MATLAB possui duas funções, surf e mesh. No mesmo espírito do plot, essas funções recebem como parâmetros 3 matrizes X, Y e Z e exibe uma reconstrução poligonal dos pontos p(i, j)=(x(i, j),y(i,j),z(i,j)). Por exemplo, para desenhar uma esfera podemos entrar com os comandos:
function graf_esfera t=-pi:0.5:pi; s=-pi:0.5:pi; % Esse comando gera uma matriz x onde cada elemento: % x(i,j)=cos(t(i))*sin(s(j)) x=transpose(cos(t))*sin(s); % y(i,j)=sin(t(i))*sin(s(j)); y=transpose(sin(t))*sin(s); % z(i,j)=cos(s(j)) z=ones([1 length(t)])'*cos(s); surf(x,y,z); pause close

1 0 .5 0 -0 .5 -1 1 0 .5 0 -0 .5 -1 -1 -0 .5 0 .5 0 1

O caso mais comum de visualização de superfícies é de gráficos de funções a dois parâmetros z = f(x,y). Nesse caso as funções surf e mesh possibilitam um relaxamento nos parâmetros de entrada. Os parâmetros x e y não precisam mais ser matrizes, podendo ser vetores. Por exemplo, para plotar a gaussiana bidimensional f(x,y) = exp(-x2) * exp(-y2) podemos entrar com os comandos:

PROF. M. Sc. JOSÉ DONIZETTI DE LIA

ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB
function graf_fdp2normal x=-2:0.1:2; y=-2:0.1:2; z=transpose(exp(-(x .*x))) * exp(-(y.*y)); surf(x,y,z) % surf(x,y,z,'FaceColor','red','EdgeColor',... 'none'); % somente para a versão 6.0 camlight left lighting phong % para incrementar o gráfico pause close

25

O comando mesh(X,Y,Z) cria uma perspectiva tridimensional plotando os elementos da matriz Z em relação ao plano definindo pelas matrizes X e Y. Esse comando mesh obedece o mesmo padrão do surf mas gera uma superfície em arame:

Salienta-se que os comandos de geração de gráficos (como plot, mesh e surf) possuem um grande número de opções. O comando contour3(Z) plota as curvas nível de Z.

Exemplo 2:
function ex_contour3 x=-2:0.2:2; y=-2:0.2:2; [X,Y]=meshgrid(x,y); Z=X.^2+Y.^2; surf(X,Y,Z) pause contour3(Z) pause close
8

6

4

2

0 20 15 10 5 5 15 10 20

PROF. M. Sc. JOSÉ DONIZETTI DE LIA

ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB

26

Exercício 1: Plotar a função de distribuição de probabilidade (f.d.p) definida por:

f ( x, y ) =

1 2π

e

1 − ( x2 + y2 ) 2

para - 3 ≤ x ≤ 3 e - 3 ≤ y ≤ 3.

function distr_normal [X,Y]=meshgrid(-3:0.1:3,-3:0.1:3); Z=(1/sqrt(2*pi)*exp(-0.5*(X.^2+Y.^2))); mesh(X,Y,Z) title('DISTRIBUIÇÃO NORMAL BIDIMENSIONAL') xlabel('eixo X') ylabel('eixo Y') zlabel('eixo Z') pause close

4.2.3 Funções para gráficos tridimensionais
Estes são alguns comandos para plotar gráficos 3D que não foram apresentados anteriormente:
contour3 cylinder ezplot3 fill3 meshc quiver rotate3d on slice sphere stairs stem surface surfc surfil uicontrol uimenu view plota contorno 3D (tipo curva de nível 3D) gera cilindro gera gráfico 3D a partir das equações paramétricas (x(t),y(t),z(t)) desenha polígono 3D combinação mesh/contour plota gradiente permite girar a figura, usando-se o mouse, para visualizá-la de vários ângulos, basta para isso apertar o botão esquerdo do mouse e arrastá-lo plota fatias de um gráfico volumétrico gera esfera gráfico escada (plotar em degrau, apropriado para sinais amostrados) gráfico discreto que indica pontos com marcadores igual ao mesh mas os espaços são preenchidos combinação surf/contour plota superfície 3D com iluminação cria controle de interface de usuário na janela de figura corrente cria menu de interface com o usuário especifica ponto de visualização (situação de um observador) para um gráfico 3D. view (azimuth, elevação) % elevação descreve a localização do observador como um ângulo acima do plano xy e azimuth refere-se ao ângulo interior ao plano xy onde o observador fica gráfico tipo waterfall (semelhante a mesh, sem o quadriculado) controla a intensidade de cores escuras, onde: (0< n ≤1): é usado para clarear e (-1≤ n<1): é usado para escurecer

waterfall brighten(n)

PROF. M. Sc. JOSÉ DONIZETTI DE LIA

No entanto.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 4. » help graph2d » help graph3d » help specgraph » help graphics gráficos em duas dimensões gráficos em três dimensões especialidades do gráficos informações das funções gráficas e uma breve explicação PROF.*y) ). y = -2:0. a visualização de imagens possui uma grande flexibilidade no ajuste dos parâmetros. os outros recursos e extensões seguem o mesmo espírito das funções apresentadas anteriormente. discretizada na matriz z. acesso o help do MATLAB. Para exemplificar a visualização de imagens. para ver uma relação completa das funções gráficas do MATLAB: digite.. TIF. % comando para visualização da imagem Assim como os outros recursos gráficos. M. o que possibilita processamento e tratamento de imagens. Para ter acesso aos demais recursos para criação e manipulação de gráficos disponíveis.(x .1:2 . imagesc(z) . JOSÉ DONIZETTI DE LIA . 4. Sc. JPEG. GIF .1:2 .3 Visualização de Imagens 27 O MATLAB permite também que matrizes sejam visualizadas como imagens. z = transpose(exp(. Também é possível ler imagens de arquivos tipo BMP.. Assim. e guardar essa imagem em uma matriz.4 Demais Funções de Manipulação de Gráficos do MATLAB As seções anteriores mostraram um conjunto muito reduzido dos recursos disponíveis para a manipulação dos gráficos. » » » » x = -2:0. vamos tomar como exemplo a gaussiana do exemplo anterior.*x) ) ) * exp( -(y.

etc. logo aparecerá na primeira janela uma linha vermelha que representará o centro da rotação. proporcionando a possibilidade de gerar sólidos em revolução. deve ser usado o comando: print –dbitmap path filename. Você deverá.10. num arquivo com o nome parabola1. Na janela.bmp em c:\graficos close 4. que usa as mesmas características de confecções de um vaso de barro. que assumirá automaticamente a extensão bmp Exemplos: print –dbitmap c:windows\parabola1 a figura atual será salva. Assim que é digitado makevase na linha de comandos. desde que mantenha pressionado a tecla shift). que posteriormente poderá ser inserida. como figura.512) cria 512 elem. num arquivo com o nome parabola1. function ruido % Construir um sinal de ruídos: % A fc.linspace(0. o Excel. JOSÉ DONIZETTI DE LIA . 1) plot(t. aparecendo então a figura (sólido) na tela.6 Sólidos em revolução O MATLAB tem uma função chamada makevase que ativa uma janela denominada Making a Vase (fazendo um vaso). % Ruído Branco normal(0.512).x)% Plota sinal com ruído gaussiano title('SINAL DE UM RUÍDO') xlabel('EIXO DO TEMPO') pause print -dbitmap c:\graficos\ruido % salvar arquivo: ruido. igualmente espaçados entre 0 e 10 % linspace = linearmente espaçados t=linspace(0.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 4. onde: path filename é o caminho onde será gravado o arquivo (drive e pasta) é o nome do arquivo. ir clicando com o botão esquerdo do mouse fazendo o contorno da sua figura sendo que.bmp. no seu disquete Exemplo: Análise de sinal: A caixa de ferramentas de processamento de sinal proporciona ferramentas para examinar e analisar sinais. em seguida.% eixo do tempo x=3*sin(5*t)-6*cos(9*t)+5*randn((size(t))).10. examinando e analisando seu teor de freqüência ou expectro e criando filtros. M.5 Salvando figura em um formato bitmap (extensão BMP) 28 Para salvar uma figura num arquivo com extensão BMP. em softwares tais como: o Word for Windows. você deve clicar na opção New Shape. o último ponto deverá ser feito com o botão direito do mouse (ou esquerdo. na pasta windows do drive c print –dbitmap a:\parabola1 a figura atual será salva.. tem-se as opções: deve ser acionado (clicando) para se fazer uma nova figura (molde) New Shape Comment Window é uma janela que fornece as instruções (passos) para confecções da superfície em revolução info abre uma janela de ajuda sobre como usar a função makevase close fecha a janela relativa à função makevase PROF. Sc.bmp.

O MATLAB é também capaz de executar seqüências de comandos armazenadas em arquivos. M.m". 5.m em qualquer editor de textos. JOSÉ DONIZETTI DE LIA . Sc.1 O Editor do MATLAB Uma das ferramentas disponíveis no MATLAB é um editor de textos específico para programas . para abrir o editor com um arquivo vazio. o editor do MATLAB possui características que facilitam muito o trabalho do programador. possibilitando incluir outros arquivos ". Por exemplo. onde uma única linha de comando é introduzida e processada imediatamente. 3) Selecionando os ícones: Desta forma. e consistem de uma seqüência de comandos normais do MATLAB. a partir do menu FILE. Embora seja possível editar um arquivo . >> edit 2) Selecionando NEW M-FILE para criar um novo arquivo ou OPEN M-FILE para editar um arquivo já existente.m" escritos no formato texto (ASCII). ele enfatiza as palavras chaves com cores diferentes.m (o M-File Editor).ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB CAPÍTULO V 5 PROGRAMAÇÃO MATLAB 29 Os comandos do MATLAB são normalmente digitados na Janela de Comandos. verifica balanço de parênteses em expressões e provê uma interface amigável para o uso do DEBUG. Podemos invocar o M-File Editor: 1) Usando o comando: >> edit nome-do-arquivo ou. teremos a janela: PROF. Os arquivos que contêm as declarações do MATLAB são chamados arquivos ".

4142 Lembre-se que o arquivo script deve estar no diretório corrente ou no path do MATLAB. caso não ache no diretório corrente. os scripts se utilizam dos dados presentes na memória (workspace) para efetuar os comandos. retornam valores e possuem variáveis locais (não afetam o workspace). q) Ou: >>d=calcula_distancia([1 0 0]. Aqui função é um comando. que pode ter alguns argumentos de entrada e alguns de saída. » distancia_p_q temp = 2 distancia = 1.4142 PROF. Os comandos são os mesmos que são usados no Command Window e tem a mesma sintaxe. São. Como mostra o exemplo anterior. Sc.m .ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 5. que admitem parâmetros de entrada. Essas características fazem com que programas escritos nesse formato atuem exatamente como os comandos nativos do MATLAB. O diretório padrão é: bin (versão 5) ou work (versão 6).2 M-Files: criando seus próprios programas e funções 30 A maneira mais simples de se fazer um programa em MATLAB é criar um arquivo texto com a lista de comandos desejados.m. M.y) % Calcula a distancia euclidiana entre os pontos x e y (vetores do Rn) diferenca=x-y. » q=[0 1 0]. para se calcular a distância entre dois pontos p e q em R3 podemos gerar um script com os comandos apropriados e chamá-lo sempre que o cálculo tenha que ser efetuado. 5 >> d=calcula_distancia(p. uma forma de ampliar a linguagem. e é um dos pontos chaves do MATLAB. que é a lista dos diretórios onde o MATLAB procura os arquivos. por exemplo. Para chamálo basta entrar com o nome do arquivo na janela de comandos (Command Window): » p=[1 0 0]. Os arquivos script são úteis quando se deseja efetuar uma seqüência de comandos com muita freqüência. distancia=sqrt(diferenca*transpose(diferenca)). portanto. Por exemplo. JOSÉ DONIZETTI DE LIA . o script acima poderia estar no arquivo distancia_p_q. Exemplo: function distancia=calcula_distancia(x. Um programa escrito assim é chamado script e toda vez que for chamado efetua a lista dos comandos como se eles fossem entrados seqüencialmente via teclado. Exemplo 2 Exemplo 1: distancia=calcula_distancia([3 4]. A palavra função no MATLAB tem um significado diferente daquele que tem na Matemática. Uma alternativa aos arquivos scripts são os arquivos tipo function. temp = (p(1)-q(1))^2 + (p(2)-q(2))^2 + (p(3)-q(3))^2 distancia = sqrt( temp ) Esse arquivo pode ser criado com qualquer editor de texto e deve ter uma extensão . [0 1 0]) d= 1. distancia = >> q=[0 1 0].[0 0]) >> p=[1 0 0].

sem mostrar o seu nome condiciona execução de comandos usado com o comando IF usado com o comando IF usado para terminar a execução dos comandos IF.m. WHILE mostra mensagem e aborta a execução da função cria uma caixa de diálogo de erro executa uma expressão MATLAB definida através de uma string executa uma função especificada por uma string repete comandos por um número de vezes especificado grava dados em arquivo formatado lê dados de arquivo formatado define m-file tipo FUNCTION (função) define variáveis globais (Dica: nunca as use) mostra uma caixa de diálogo de ajuda (HELP) permite requisitar (com prompt) fornecimento de dados pelo teclado suspende a execução de uma rotina e permite que o usuário entre e execute novos comandos pelo teclado. É um teste para múltiplos casos caixa de diálogo para obter o nome de um arquivo existente caixa de diálogo para especificar o nome de um novo arquivo cria uma caixa de diálogo para advertências (warning) repete comandos enquanto condição especificada for verdadeira PROF. M. bem como comandos de programação geral e interfaces com o usuário. é claro). FOR.m e deve ter o mesmo nome usado na definição da função. Só faz sentido dentro de um FOR ou WHILE exibe o nome e o conteúdo de uma variável exibe o conteúdo de uma variável. tem-se uma lista com alguns comandos de programação para o controle de fluxo. O arquivo tipo function também tem que ter extensão . Veja que para executar essa função usamos o Command Window da mesma forma como se executa um comando nativo do MATLAB: A seguir. home clear continue display disp if else elseif end error errordlg eval feval for fprintf fscanf function global helpdlg input keyboard lasterr menu nargchk pause pause(n) questdlg rbbox return sprintf switch e case uigetfile uiputfile warndlg while Interrompe a execução de laços FOR e WHILE equivalente ao BREAK do C limpa a tela (janela de comandos) limpa as variáveis da memória do MATLAB (RAM – read access memory) interrompe o fluxo do programa e recomeça um loop FOR ou WHILE. JOSÉ DONIZETTI DE LIA . a rotina é continuada após o usuário digitar return última mensagem de erro emitida pelo MATLAB gera um menu de escolhas para entrada do usuário verifica número de argumentos de entrada pausa na execução de um programa até ser pressionada uma tecla pausa na execução de um programa de “n” segundos cria uma caixa de diálogo de perguntas caixa (rubberband box) para seleção de região em gráfico causa a saída imediata de uma função grava dados formatados em uma única string equivalente ao CASE em Pascal ou o C. Sc. independente do número de componente dos mesmos (desde que ambos vetores sejam de mesma dimensão.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 31 Salienta-se que essa função determina a distância entre dois vetores quaisquer. no exemplo anterior o nome do arquivo deve ser calcula_distancia. já na iteração seguinte. descrita na primeira linha do arquivo. break clc.

. o MATLAB tem comandos específicos para o controle do fluxo do algoritmo. elseif .. M.. A sintaxe do IF é: if teste . Exemplo 01: Fazer um programa que permita calcular valores para a função:  1 .... elseif x>=-1 & x<=1 a=x ^2. Esses comandos são similares aos encontrados em outras linguagens como C ou Pascal.. se . end O valor de variável recebe o conteúdo de cada coluna de vetor seqüencialmente e. para cada conteúdo que receba.. PROF..... mas o end é.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 5... executa o corpo do FOR. O comando disp executa um display do argumento.. end A sintaxe do FOR é: for variavel = vetor .. Sc... O if (assim como o for e o while) pode ser usado tanto em linhas de comando quanto em textos de programas (onde serão mais úteis de fato). FOR e WHILE. etc.. else .. JOSÉ DONIZETTI DE LIA ... com a variável i assumindo o valor 1 no primeiro loop..... Portanto esse loop simples imprime os 10 primeiros quadrados perfeitos na janela de comandos (Command Window). e sua sintaxe é bastante simples.. se x > 1  function a=program1(x) if x<-1 a=1.1 ≤ x ≤ 1 − x + 2 ... 2 no segundo loop. tais como: IF. i2 no caso.. else a=-x+2.....3 Principais comandos de programação 32 Como qualquer linguagem de programação. se x < -1  f ( x) =  x 2 . Tipicamente o FOR tem o seguinte formato exibido no exemplo a seguir Exemplo 02: for i = 1:10 disp(i*i ) end O loop acima é executado 10 vezes.. 3 no terceiro. end O elseif e o else não são obrigatórios..

01:2 % gerar 401 números n=n+1. end end C=A+B.j)=i+j. end end end disp(A) % mostra o resultado sem mostrar o nome da variável Exemplo 07: Criar um programa que verifique se o número dado é positivo.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 33 É comum construções em que conjuntos de laços for são usados principalmente com matrizes. A(i.1 ≤ x ≤ 1 − x + 2 .2)==0 % se número é positivo e par disp ('O número dado é positivo e par') else disp('O número dado é positivo e ímpar') end PROF. function par_impar(n) if n<0 % se n é negativo disp ('O número dado é negativo') elseif rem(n. x(n)=t. Sc.j)=i-j. B(i. se x > 1  Dica: Use o programa construído no exemplo 01 (program1) function program2 clear n=0.j)=-1. M. se sim determinar se o mesmo é par ou ímpar. com entrada t e saída y(n) end plot(x. se x < -1  f ( x) =  x 2 . se . elseif abs(i-j)==1 A(i. Exemplo 03: for i=1:8 for j=1:8 A(i. JOSÉ DONIZETTI DE LIA .j)=1. y(n)=program1(t). for t=-2:0. as declarações for e if-elseif-else aparecem juntas em um programa Exemplo 06: for i=1:5 for j=1:5 if i==j. disp(C) % mostra o resultado sem mostrar o nome da variável Exemplo 04: Construir um programa que plota o gráfico da função:  1 .%aqui chama-se o programa "program 1". else A(i.y) pause close % fecha a janela gráfica Em geral.j)=0.

end O comando switch executa certas afirmações baseando-se no valor de uma variável ou expressão. clc % limpa a janela de comandos.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB A sintaxe do WHILE é simples: while teste . prod=1.01:(xv+5). % Pergunta se quer plotar um outro gráfico. end 34 Exemplo 08: Usando o comando while determine o fatorial de um número dado function fatorial(n) i=1. É usado quando têm-se opções de escolha..5 < x < xv + 5 function parabola1 clear % limpa variáveis e funções da memória (RAM) clc % limpa a tela aux='s'. xv=-b/2*a... caso contrário continua indefinidamente o loop. c=input('c=')..% definição do domínio y=a*x.. end disp(' ') disp(prod) end Exemplo 09: Plotar o gráfico da função y=a*x. while aux=='s'.. Sua forma básica é: switch expressão case valor1 afirmações case valor2 afirmações . PROF. i=i+1. 's'). Apenas quando for digitado "n" que o programa encerra-se... otherwise afirmações end Obs. n-não)==>' .y).^2+b*x+c.. if n<0 disp( ' ') error('n deve ser não negativo') else while i<=n prod=prod*i. no intervalo xv .. plot(x. b=input('b='). posiciona o cursor no início da tela a=input('a=').. : Se o primeiro caso for verdadeiro os outros casos não são executados. Sc. M.^2+b*x+c. x=(xv-5):0. figure(1) pause clc % limpa a tela close % fecha a figura aux=input('Plotar outro gráfico? (s-sim. JOSÉ DONIZETTI DE LIA .

Exemplo 11: function modifica_matriz A=[1 2 3 4 5. 1 2 3 4 5.j))] x=input('Modifica? (s-sim.3. clc % limpa a tela end if x=='n' j=j+1. -1. 1 2 3 4 5].'num2str(j). para mudar para outra linha end if x=='q' clc break end end end PROF. Sc. if x=='s' A(i. while j<=5 ['A('num2str(i). X='s'. clc end if x=='p' clc break % interrompe o WHILE. for i=1:5 if x=='q' break end j=1. 1 2 3 4 5. 1 2 3 4 5. n-não. M. Esse comando faz com que o laço mais interno seja terminado imediatamente. p-próxima linha.'. q-sair)==>'.j)==>').4} case 0 disp('2 ou 3 ou 4') disp('Zero') case 5 case 1 disp('5') disp('Número positivo') otherwise otherwise disp('outro valor') disp('outro valor') end end O comando break permite uma saída antecipada de um for ou while. 0 ou 1 ==> ').')='num2str(A(i.'s'). j=j+1.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 35 Exemplo 10: % multiplos condicionais em cada caso function ex_switch1 var=input('Entre com um dos valores: function ex_switch2 var=input('Entre com um valor ==> '). switch var switch var case 1 case –1 disp('1') disp('Número negativo') case {2. JOSÉ DONIZETTI DE LIA .j)=input('Entre como novo valor de A(i.

resposta=inputdlg(aviso. apresentaremos os recursos desenvolvimento de interface com usuário. 'FIM .'QUER VER SUA SITUAÇÃO FÍSICA'.PROGRAMA'). .IMC |') disp(' ----------------------------------------------------------') saida=[peso altura indice].2f %17. disp(' **************') disp(' * ÁREA *') disp(' **************') area=larg*comp. comp=str2num(char(resposta(2))). peso=str2num(char(resposta(1))).2f'.linhas).ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 5. larg=str2num(char(resposta(1))).linhas). a qual também permite que se insira dados através do teclado. M.'Entre com o comprimento:'}. ao invés de utilizarmos a função input podemos usar a função inputdlg (entrada de dados com caixa de diálogos). Exemplo 13: function area_retangulo %CALCULO DA ÁREA DE UM RETÂNGULO aviso={'Entre com a largura:' .IMC'.2f %11. ou seja. Por exemplo. Exemplo 11: function imc k=menu('AVALIAÇÃO FÍSICA . Sc. altura=str2num(char(resposta(2))). sem mostrar o seu nome input: requisita uma entrada de dados através do teclado Caixas de diálogos As caixas de diálogos possibilitam a construção de programas com interface mais amigável.saida')) disp(' ') if indice < 20 disp(' ') PROF. JOSÉ DONIZETTI DE LIA . titulo='ÁREA DE UM RETÂNGULO'.'ENTRE COM A SUA ALTURA (m):'}... • • • disponíveis no MATLAB 36 para display: exibe o nome e o conteúdo de uma variável disp: exibe o conteúdo de uma variável. linhas=1. disp(' ----------------------------------------------------------') disp(' |PESO (kg) | ALTURA (m) | ÍNDICE DE MASSA CORPÓREA . format bank indice = peso/(altura*altura). if k==1 dados = {'ENTRE COM O SEU PESO (kg):'. disp(' 'area) MENU: Lista de escolhas que aparece na tela enquanto determinado programa está sendo executado.titulo. disp(sprintf('%10.titulo. resposta=inputdlg(dados. gera um menu de escolhas para entrada do usuário. titulo = 'ÍNDICE DE MASSA CORPÓREA – IMC'. linhas=1.4 Interface com o usuário Neste item.

. OU . M. REDUZIR O PESO ') disp(' ') end if indice >= 30 disp(' ') disp(' REPENSE O SEU MODO DE VIVER. REDUZIR O STRESS..ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB disp(' VOCÊ DEVE ALIMENTAR-SE MELHOR. ENGORDAR ') disp(' ') end if indice >= 20 & indice <=25 disp(' ') disp(' TUDO OK!. Sc.') disp(' ') end pause imc else % sair disp(' disp(' disp(' disp(' disp(' end 37 do programa ') -------------------------') |OBRIGADO POR USAR: IMC |') -------------------------') ') PROF. JOSÉ DONIZETTI DE LIA . MANTENHA A FORMA') disp(' ') end if indice > 25 & indice < 30 disp(' ') disp(' VOCÊ DEVE ALIMENTAR-SE MELHOR.

6. Sc.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB CAPÍTULO VI 6 EXPRESSÕES SIMBÓLICAS 38 Agora.2 Multiplicação literal de polinômios Sintaxe: collect(f) determina o resultado da multiplicação dos polinômios de f Exemplo: f=(x^2+1)*(x^3+2*x) » x=sym('x'). vamos ver como podemos manipular com expressões que além de números e variáveis numéricas. sym: Cria objeto simbólico syms: Atalho para criar múltiplos objetos simbólicos Uma vez definido que a variável x é uma variável simbólica. contém também variáveis simbólicas. M. podemos definir expressões que envolvem esta variável. Exemplo: » x x » y y » z z x= sym('x') = y= sym('y') = z= sym('z') = Ou simplesmente: » syms x y z 6. » f=(x^2+1)*(x^3+2*x) f = (x^2+1)*(x^3+2*x) » produto=collect(f) produto = x^5+3*x^3+2*x » pretty(produto) 5 x + 3 x 3 + 2 x PROF. JOSÉ DONIZETTI DE LIA .1 Definindo variáveis simbólicas Primeiro precisamos dizer ao MATLAB que x é uma variável simbólica. Exemplo: »x=sym('x') x= x »y=x+2*x y= 3*x Ou » syms x » y=x+2*x y = 3*x Para definirmos várias variáveis podemos utilizar as seguintes sintaxes.

» f=(x-1)*(x-2)*(x-3)*(x+1) f = (x-1)*(x-2)*(x-3)*(x+1) » expans=expand(f) expans = x^4-5*x^3+5*x^2+5*x-6 6. Sc.3 Simplificação de expressões simplify(f): simplifica expressões usando identidade simple(f): simplifica expressões e coloca na forma técnica Exemplo 1 » x=sym('x'). » f=sin(x)^2+cos(x)^2 f = sin(x)^2+cos(x)^2 » simplif=simplify(f) simplif = 1 Exemplo 2 » x=sym('x'). Primeiro informamos que x é uma variável simbólica. » f=x^4-5*x^3+5*x^2+5*x-6 f = x^4-5*x^3+5*x^2+5*x-6 » pretty(f) 4 x . M. as funções simplify e simple tem como argumento de entrada uma expressão simbólica e de saída também.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 6.5 Expansão de polinômios expand(f): distribui o produto através de uma soma Exemplo » x=sym('x'). expressando-o como um produto de polinômios Exemplo: » x=sym('x'). 6. » f=x^4-5*x^3+5*x^2+5*x-6 f = x^4-5*x^3+5*x^2+5*x-6 » fator=factor(f) fator = (x-1)*(x-2)*(x-3)*(x+1) 6.4 Fatoração de polinômios factor(f): fatora o polinômio f.6 Exibição de expressões na forma mais legível pretty(f): exibe o conteúdo da expressão f em um formato mais legível » x=sym('x').6 PROF. JOSÉ DONIZETTI DE LIA . depois pedimos para simplificar a expressão que envolve x. » f=(x+1)*(x-1) f = (x+1)*(x-1) » simples=simple(f) simples = x^2-1 39 Os comandos do exemplo 1 mandam o MATLAB simplificar a expressão sen2 x + cos2 x.5 x 3 + 5 x 2 + 5 x . Neste caso.

9 Inversa de funções Sintaxe: finverse(função. variável. b) Exemplo: ∑ (2n − 1) 2 1 n » syms n » soma=symsum(2*n-1. a.'x') resp = x^2-5*x+6 » pretty(resp) 2 x . » f=x^2-5*x+6 f = x^2-5*x+6 » coef=sym2poly(f) coef = 1 -5 6 6.10 Somatória de expressões Sintaxe: symsum(função.7 Conversão da forma numérica para a forma simbólica poly2sym(f.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 6. variável) Exemplo: » syms x » y=2*x-4 y = 2*x-4 » f_inversa=finverse(y) f_inversa = 2+1/2*x » pretty(f_inversa) 2 + 1/2 x 6.5 x + 6 40 6. M.n) soma = (n+1)^2-2*n-1 » expande=expand(soma) expande = n^2 » pretty(expande) 2 n PROF.8 Conversão da forma simbólica para a forma numérica Sintaxe:sym2poly(f): » x=sym('x').1. JOSÉ DONIZETTI DE LIA .'var'): » resp=poly2sym([1 -5 6]. Sc.

» f_x=x+1.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 6.12 Combinação das funções: pretty e expand Exemplo: Determinação do binômio de Newton: (x+2)n » pretty(expand((x+2)^0)) 1 » pretty(expand((x+2)^1)) x + 2 » pretty(expand((x+2)^2)) 2 x » pretty(expand((x+2)^3)) 3 x » pretty(expand((x+2)^4)) 4 x + 8 x 3 + 24 x 2 + 32 x + 16 » pretty(expand((x+2)^5)) 5 4 3 2 x + 10 x + 40 x + 80 x + 80 x + 32 » pretty(expand((x+2)^6)) 6 5 4 3 2 x + 12 x + 60 x + 160 x + 240 x + 192 x + 64 + 6 x 2 + 12 x + 8 + 4 x + 4 Exemplo geral: Dadas duas funções f(x) = 2x2+3x-5 e g(x) = x2-x+7.11 Função composta Sintaxe: compose(função f. Sc.f_x) g_o_f = (x+1)^2 » expandir=expand(g_o_f) expandir = x^2+2*x+1 » pretty(expandir) 2 x + 2 x + 1 41 6. » g_o_f=compose(g_x. função g) ! fog = f(g(x)) Exemplo: Dadas as funções f(x)=x+1 e g(x)=x2 determine: a) fog=f(g(x)) » syms x » f_x=x+1.g_x) f_o_g = x^2+1 » pretty(f_o_g) 2 x + 1 b) gof=g(f(x)) » syms x » g_x=x^2. JOSÉ DONIZETTI DE LIA . M. » g_x=x^2. » f_o_g=compose(f_x. podemos fazer uma série de operações algébricas envolvendo estas funções. tais como: a) f+g b) f-g c) f*g d) expandir (f*g) e)f/g f) expandir(f/g) g) usar o comando pretty para tornar mais fácil a visualização dos resultados h) f3 i) expandir(f3) PROF.

% define a variável x como simbólica >>f=2*x^2+3*x-5.x + 7 >>H=f^3 H = (2*x^2+3*x-5)^3 >>I=expand(H) I= 8*x^6+36*x^5-6*x^4-153*x^3+15*x^2+225*x-125 42 Observe que o MATLAB não faz as simplificações ou expansões automaticamente.x. Por exemplo: >> f=1/(1-x^2). existe o comando simple. A função compose calcula a composição das funções f(x) e g(x) em f(g(x)).2) d = -1/3 PROF.g) a = 1/(1-sin(x)^2) >>b=compose(g. JOSÉ DONIZETTI DE LIA . Além destes. que tenta encontrar a forma mais simples de escrever uma expressão. Além destes. O MATLAB pode realizar operações mais avançadas sobre expressões simbólicas.+ 3 ---------. Sc. M.x + 7 x .. >> a=compose(f. a função finverse encontra a inversa funcional de uma expressão e a função subs substitui uma variável por um número (ou por outra variável) em uma expressão. g=x^2-x+7. g=sin(x). que mostra a expressão de uma forma mais fácil de enxergar. usamos os comandos simplify que simplifica e expand que faz a expansão.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB >>x=sym(‘x’).x + 7 x .---------2 2 2 x . % define as funções f e g >>A=f+g A = 3*x^2+2*x+2 >>B=f-g B = x^2+4*x-12 >>C=f*g C = (2*x^2+3*x-5)*(x^2-x+7) >>D=expand(C) D = 2*x^4+x^3+6*x^2+26*x-35 >>E=f/g E = (2*x^2+3*x-5)/(x^2-x+7) >>F=expand(E) F = 2/(x^2-x+7)*x^2+3/(x^2-x+7)*x-5/(x^2-x+7) >>pretty(F) 2 x x 5 2 ---------. Para isso.f) b = sin(1/(1-x^2)) >>c=finverse(g) c = asin(x) >>d=subs(f. usamos anteriormente também o comando pretty.

»sym x ou » x = sym('x') exemplo 1: » ezplot(sin(x)) exemplo 2: » ezplot(x^2) % define a variável x como simbólicas PROF. para resolver a equação: ax2+bx+c = 0 algebricamente. c d] » DET=det(A) » DET=det(A) DET = DET = i*a*e-a*f*h-i*d*b+d*c*h+g*b*f-g*c*e a*d-b*c É possível plotar o gráfico de uma função matemática. Por exemplo.4 a c) ] --------------------] a ] Um outro exemplo: Cálculo do determinante de uma matriz de ordem 2 e 3 Determinante 2x2 » syms a b c d Determinante 3x3 » syms a b c d e f g h i » A=[a b c. sem definir o domínio da mesma. c e x como simbólicas 43 » raizes=solve(a*x^2+b*x+c) » raizes = [ 1/2/a*(-b+(b^2-4*a*c)^(1/2))] [ 1/2/a*(-b-(b^2-4*a*c)^(1/2))] O MATLAB pode exibir este resultado de uma forma mais fácil de enxergar usando a função pretty. x=sym('x'). b=sym('b').g h i] » A=[a b. b. M. c=sym('c'). podemos usar os comandos: » » » » a=sym('a'). » pretty(raizes) [ [ [1/2 [ [ [ [ [1/2 [ 2 1/2] -b + (b .ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB O MATLAB pode resolver equações literais. Sc. Ou simplismente: » syms a b c x % define as variáveis a.(b .4 a c) ] --------------------] a ] ] 2 1/2] -b . JOSÉ DONIZETTI DE LIA . d e f.

a) syms x y z a b calcula a derivada de f determina a composta f(g(x)) expande uma expressão expr determina a inversa funcional da expressão expr exibe a expressão expr numa forma mais bonita procura encontrar uma forma mais simples de escrever uma expressão expr simplifica a expressão expr acha a(s) solução(es) da equação expr = 0 substitui na expressão expr a variável x por a define as variáveis simbólicas x. 6. y.x. a e b 44 Existem várias outras funções para manipulação de expressões algébricas.valor) % Determina o limite de uma expressão. z.0) exp(1) PROF. M.2) 4 Exercício: x Usar mudança de variável e o MATLAB para provar que: lim1 + 1  = 2.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB Abaixo segue um resumo das funções para manipulação de expressões algébricas: diff(f) compose(f. Sc.g) expand(expr) finverse(expr) pretty(expr) simple simplify(expr) solve(expr) subs(expr. para um valor Exemplos: sen( x) lim 0 x→ x lim x2 − 4 x→2 x − 2 » syms x » limit(sin(x)/x.0) 1 » syms x »limit((x^2-4)/(x-2).71 = e xp(1)   x →∞  x Solução: Fazendo t = » syms t 1 1 ⇒ quando x → ∞. Você pode obter informações sobre elas digitando help symbolic. JOSÉ DONIZETTI DE LIA . Uma função interessante que mostra as capacidades do MATLAB em tratar com funções matemáticas é funtool que é uma calculadora para funções.13 Limites Sintaxe: limit(função. t → 0 ! lim(1 + t )t = t →0 t » limit((1+t)^(1/t).

1) der1_y = 2*y Usando o MATLAB. tem-se: diff(f) derivada de f em relação a x diff(f.x. onde: f: função literal de uma ou mais variáveis var: variável em relação a qual deseja-se derivar ord: ordem da derivada a ser calculada Assim. Sc.2 ---------| 2 | 2 2 2| x + 1 \ x + 1 (x + 1) / 3 PROF. JOSÉ DONIZETTI DE LIA .a ordem da função f(x) = x3 » x=sym('x'). ord). » deriv=diff(x^3. Para determinar as derivadas simbólicas usamos a seguinte sintaxe: diff(f.1) der1_x = 2*x b) Em relação a variável y » syms x y » der1_y=diff(x^2+y^2.s.a ordem da função f(x) = x2 +y2 a) Em relação a variável x » syms x y » der1_x=diff(x^2+y^2. determine as derivadas das seguintes funções:  x3   x3  x 4 + 3x 2 . var..s) derivada de f em relação a s diff(f.2) deriv = 6*x Exemplo 02: Calcular a derivada de 1.2) derivada de f duas vezes em relação a x diff(f. cos 2 Exemplo 03: f (x ) = sen 2  ⇒ f ' ( x) = 2  x + 1   x + 1 ( x + 1) 2   » sym x » a=diff(sin((x^3)/(x^2+1))) a = cos(x^3/(x^2+1))*(3*x^2/(x^2+1)-2*x^4/(x^2+1)^2) » pretty(a) / 2 4 \ x | x x | cos(------) |3 -----.14 Diferenciação (derivadas) 45 Já vimos que a sintaxe polyder (p) determina a derivada numérica do polinômio p. M.x.y.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 6.2) derivada de f em relação a s duas vezes Exemplo 01: Calcular a derivada de 2.

JOSÉ DONIZETTI DE LIA .ln x 3 ⇒ f ' ( x) = 2 sen x. M. cos x.tg ( x) + e 6 x sin(x) » syms x e » d = diff((sec(x))^2)+((e)^(6*x)) d = 2*sec(x)^2*tan(x)+e^(6*x) » pretty(d) 2 2 sec(x) tan(x) + e (6 x) PROF. ln x 3 + . sen 2 x x 46 » sym x » b=diff((sin(x))^2*log(x^3)) b = 2*sin(x)*log(x^3)*cos(x)+3*sin(x)^2/x » pretty(b) 2 sin(x) 2 sin(x) log(x ) cos(x) + 3 ------x 3 Exemplo 05: f ( x ) = cos x − 1 cos 3 x ⇒ f ' ( x) = − sen( x) + cos 2 ( x). sen x = − sen 3 x 3 » sym x » c=diff(cos(x)-(1/3)*(cos(x)^3)) c = -sin(x)+cos(x)^2*sin(x) » pretty(c) 2 -sin(x) + cos(x) Exemplo 06: f ( x ) = sec x + e 6 x ⇒ f ' ( x) = 2 sec 2 ( x). Sc.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 3 Exemplo 04: f ( x ) = sen 2 x .

15 Integração Cálculo numérico da integral definida 47 São dadas três funções para calcular a área sob a curva num intervalo finito.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 6. pelo somatório das áreas dos trapézios • trapz (x.cos(b) + cos(a) » integral=int('x^3/sqrt(1-x)') integral = 2/7*(1-x)^(7/2)-6/5*(1-x)^(5/2)+2*(1-x)^(3/2)-2*(1-x)^(1/2) » pretty(integral) 7/2 5/2 3/2 1/2 2/7 (1 . Além dos métodos anteriores.b) integ_sen = -cos(b)+cos(a) » pretty(integ_sen) .x) .b) é a integral definida da função f em relação à variável s de a até b PROF. determina a integral definida através das funções: • trapz aproxima a integral sobre a função.a. M.0.6/5 (1 . pode ser feita através das funções: • quad Integração numérica usando a regra de Simpson recursiva (baixa ordem).a. a. Sc. A integração numérica usando o processo chamado de quadratura.x) . Método trapezoidal. JOSÉ DONIZETTI DE LIA .a.x) + 2 (1 .variável. • quad8 Integração numérica usando a regra de Newton-Cotes adaptativa (alta ordem).s.s) é a integral indefinida da função f em relação à variável s int(f. Integrais simbólicas Sintaxe: int('função'.1) integral = 32/35 outras sintaxes para a integral literal int(f) é a integral indefinida da função f em relação à variável x int(f. o MATLAB. no MATLAB.b) é a integral definida da função f em relação à variável x de a até b int(f.2 (1 – x) » integral=int('x^3/sqrt(1-x)'. b) ! determina a integral literal ∫ f ( x)dx a b ∫ x3 1− x dx ∫ 0 2 x3 1− x dx » integ_sen=int('sin(x)'.y) dá o valor da integral de y com seu respectivo x usando para isso o método dos trapézios.

O. pode se usar a função dsolve.D.16 Equações diferenciais 48 Para resolver uma Equação Diferencial Ordinária (E. plotando o resultado Resolve eq.'var').y(0)=2'.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 6.D.O.D. M. de 1. dif.'x') sol= tan(x+1/4*pi) 2) Resolver a equação diferencial f'(x)=6x2+x-5 sujeita à condição inicial f(0)=2 » sol=dsolve('Dy=6*x^2+x-5. através de ode23.'y(0)=3'. JOSÉ DONIZETTI DE LIA .y(0)=1'. ode23 ode23p ode45 Resolve equações diferenciais pelo método de Runge-Kutta de 2ª/3ª ordens (baixa ordem) Resolve eq. pelo método de Runge-Kutta-Fehlberg de 4ª/5ª ordens (alta ordem) PROF.a ordem: dy = 1 + y 2 com condição inicial y(0)=1 dt »sol=dsolve('Dy=1+y^2. Sc. cuja sintaxe é dada por: dsolve(f. cond.O.'x') sol = -5*cos(x)+2*sin(x)+8+2*x Outras funções relacionadas com E.'Dy(0)=4'. onde: f : função. utiliza como padrão a variável t como sendo a variável independente. Para alterar. basta informar como um último parâmetro a variável a ser considerada como independente. dif. Exemplos: 1) Resolver a E. cond : são as condições iniciais (ou de contorno) e var: variável Nota: O MATLAB.'x') sol= 2*x^3+1/2*x^2-5*x+2 3) Resolver a equação diferencial iniciais f(0) = 3 e f'(0) = 3 f''(x) = 5cos(x) + 2sen(x) sujeita às condições » sol=dsolve('D2y=5*cos(x)-2*sin(x)'.) no MATLAB.

01:10. JOSÉ DONIZETTI DE LIA . Exemplo: Calcular o valor do seno de 1001 no intervalo [0.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB CAPÍTULO VII 7 TÓPICOS ESPECIAIS OTIMIZANDO A PERFORMANCE DE CÓDIGOS MATLAB 49 Pode-se freqüentemente melhorar a velocidade de execução de um código em MATLAB ao trocar os laços for e while por vetores ou matrizes que são os elementos essenciais do MATLAB. 1] com elementos igualmente espaçados 1) Usando o comando for function performance tic i=0. end pause(1) toc Resultado: elapsed_time = 1. pause(1) toc Resultado: elapsed_time = 1. y=sin(t). M. y(i)=sin(t). for t=0:0.01:10 i=i+1.3200 1) Usando a forma de vetor function performance tic t=0:0.0400 ESTATÍSTICA Função Distribuição Acumulada DISTRIBUIÇÃO Beta Binomial Qui-quadrado Exponencial F de Snedecor Gama Geométrica Hipergeométrica Normal Poisson t de Student Uniforme discreta Uniforme contínua Weibull COMANDO betacdf binocdf chi2cdf expcdf fcdf gamcdf geocdf hygecdf normcdf poisscdf tcdf unicdf unifcdf weibcdf Função Distribuição Acumulada Inversa COMANDO betainv binoinv chi2inv expinv finv gaminv geoinv hygeinv norminv poissinv tinv unidinv unifinv weibinv Função Densidade de Probabilidade COMANDO betapdf binopdf chi2pdf exppdf fpdf gampdf geopdf hygepdf normpdf poisspdf tpdf unipdf unifpdf weibpdf Geração de Amostra Aleatórias COMANDO betarnd binornd chi2rnd exprnd frnd gamrnd geornd hygernd normrnd poissrnd trnd unirnd unifrnd weibrnd PROF. Sc.

M.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB Análise Estatística dos Dados Estatística Descritiva Comando corrcoef cov geomean harmmean kurtosis mean median moment skewness std var Outras funções básicas Declaração max min sort sum prod cumsum cumprod diff length Análise Gráfica Declaração boxplot normplot hist histfit bar barh scatter plot pareto pie. pie3 area Estatística descritiva coeficiente de correlação matriz covariância média geométrica média harmônica coeficiente de curtose média aritmética mediana momento centrado coeficiente de assimetria desvio padrão variância 50 Significado valor máximo valor mínimo ordenar em ordem crescente soma dos elementos produto dos elementos soma acumulada produto acumulado diferença entre elementos número de componentes do vetor Significado boxplot da análise exploratória análise de normalidade histograma histograma ajustado a normal gráfico de barras gráfico de colunas gráfico dispersão dos dados gráfico de linha gráfico de pareto ou curva ABC gráfico em setores (pizza) gráfico de área PROF. JOSÉ DONIZETTI DE LIA . Sc.

»x2=normrnd(15.100.9 9 0 .0 2 0 .0 0 3 -2 0 0 -1 5 0 -1 0 0 -5 0 0 D ata 50 100 150 200 »x=normrnd(70. »x=[x1 x2 x3].0 5 0 .4.1).1 0 0 .1).2.9 0 0 .100. o valor mínimo e a soma total.1.9199 -2.0 1 0 .7 5 0 . Sc.2903 20 18 16 14 12 10 8 6 4 2 0 -3 -2 -1 0 1 2 3 3) Gerar uma amostra normal com 100 elementos.50.50. de média zero e desvio padrão 1.1). »x3=normrnd(20. construir o histograma e determinar: o valor máximo.9 5 0 .100.50. de média 70 e desvio padrão 10 e analisar a normalidade através do comando normplot No rma l Pro b a b ility Plo t 0 .9 9 7 0 . M.7532 -2. »normplot(x) PROF. x=normrnd(0.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB Exemplos 1) Exemplo de boxplot para 3 amostras normais 30 51 »x1=normrnd(10. JOSÉ DONIZETTI DE LIA Pro b a b ility .5 0 0 .5.2 5 0 .1).9 8 0 . »boxplot(x) 25 Value s 20 15 10 5 1 2 Column Numb er 3 2) Gerar uma amostra normal de tamanho 100.1). hist(x) maximo_x=max(x) minimo_x=min(x) soma_x=sum(x) RESULTADOS maximo = minimo = soma = 2.

construindo o histograma ajustado a curva normal.75 desv_peso = 8.00 e) menor_alt = 156. amostra = normrnd(0.30 b) desv_alt = 9.00 a) med_alt = 173.1.21 c) coef_corr = 1.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 4) Dados x = [ 1 2 3 4 5 6 7 8 9 10] e y = [ 8 2 6 0 1 3 6 8 3 5] a) Representar o diagrama de dispersão para x e y plot(x.30 med_peso = 73. com o tamanho n da amostra.00 0.y. JOSÉ DONIZETTI DE LIA .n. M. de média 0 e desvio padrão 1. Sc.94 6) Gerar uma amostra aleatória Normal de tamanho 100.0 0.'o') x=[1 2 3 4 5 6 7 8 9 10] y=[8 2 6 0 1 3 6 8 3 5] plot(x. sendo informado via teclado. calcular: altura(cm) 180 pesos(kg) 80 181 82 170 75 165 68 178 78 156 60 165 63 190 85 175 70 173 72 a) b) c) d) e) A altura média e o peso médio O desvio padrão para a altura e para o peso O coeficiente de correlação A maior altura e o maior peso A menor altura e o menor peso d) maior_alt = 190. »histfit(v) 14 12 10 8 6 4 2 0 -3 -2 -1 0 1 2 3 7) Gerar uma amostra Normal com média 0 e desvio padrão 1.00 menor_peso = 60.1).'o') 52 b) Representar um gráfico de linha plot(x. n ==> ').00 maior_peso = 85.1.y) x=[1 2 3 4 5 6 7 8 9 10] y=[8 2 6 0 1 3 6 8 3 5] plot(x.94 1.y) 5) Para as variáveis alturas e pesos de um grupo de 10 pessoas adultas.100.y. n = input('Entre com o tamanho da amostra. 20 18 16 »v=normrnd(0.1) PROF. dadas pela tabela a seguir.

73% --------->') pause hold on x=-2:0.44% ------>') pause hold on x=-1:0.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 53 8) Gerar o gráfico da função de distribuição normal padronizada univariada (N(0. plot(x. function distr_normal_integral Area_1S=quad('fdp_normal'.4499% MAIS ou MENOS 3 SIGMA = 99.^2))).^2))).68.01:4.^2))).5*(x.'+ ou .2691% MAIS ou MENOS 2 SIGMA = 95.^2))).') %gtext('<-.2)*100.^2))).'+ ou .5*(x.1)*100.'+ ou . ±3σ e ±4σ function y=fdp_normal(x) y=(1/sqrt(2*pi)*exp(-0. plot(x. Sc.3)*100. y=(1/sqrt(2*pi)*exp(-0.'b.-3.-4.y.^2))).y) pause close '%']) '%']) '%']) '%']) sigma'.-2.-1.01:3.3 sigma'.01:2. y=(1/sqrt(2*pi)*exp(-0. ±2σ.95.') grid title('DISTRIBUIÇÃO NORMAL UNIVARIADA') xlabel('eixo X') ylabel('eixo Y') %gtext('<------------.99% ---------------->') pause hold on x=-3:0.99.5*(x.2 pause x=-2:0. y=(1/sqrt(2*pi)*exp(-0.01:2. JOSÉ DONIZETTI DE LIA .') %gtext('<-----.y. Area_3S=quad('fdp_normal'.4)*100. y=(1/sqrt(2*pi)*exp(-0.1): µ = 0 e σ = 1) e determinar os percentuais de ±1σ. Area_4S=quad('fdp_normal'. M. Area_2S=quad('fdp_normal'.1 sigma') >> distr_normal_integral MAIS ou MENOS 1 SIGMA = 68.5*(x.733% MAIS ou MENOS 4 SIGMA = 99. plot(x.y.') %gtext('<--------. area(x.5*(x.y.'y.99. y=(1/sqrt(2*pi)*exp(-0. plot(x.9938% PROF.5*(x.4 sigma'.'g. disp(' ') disp([' MAIS ou MENOS 1 SIGMA = 'num2str(Area_1S) disp(' ') disp([' MAIS ou MENOS 2 SIGMA = 'num2str(Area_2S) disp(' ') disp([' MAIS ou MENOS 3 SIGMA = 'num2str(Area_3S) disp(' ') disp([' MAIS ou MENOS 4 SIGMA = 'num2str(Area_4S) disp(' ') pause x=-4:0.01:1.27% -->') legend('+ ou .'r.

45% MAIS ou MENOS 3 SIGMA = 99. disp(' ') disp('PERCENTUAIS DA DISTRIBUIÇÃO NORMAL ') disp(' ') disp([' MAIS ou MENOS 1 SIGMA = 'num2str(sigma1) disp(' ') disp([' MAIS ou MENOS 2 SIGMA = 'num2str(sigma2) disp(' ') disp([' MAIS ou MENOS 3 SIGMA = 'num2str(sigma3) disp(' ') disp([' MAIS ou MENOS 4 SIGMA = 'num2str(sigma4) Resultados: PERCENTUAIS DA DISTRIBUIÇÃO NORMAL MAIS ou MENOS 1 SIGMA = 68.73% MAIS ou MENOS 4 SIGMA = 99.1))*100. JOSÉ DONIZETTI DE LIA .0. sigma2=(normcdf(2. sigma3=(normcdf(3. sigma4=(normcdf(4.1)-normcdf(-3.y) xlabel ('Eixo x') ylabel ('Eixo y') title ('DISTRIBUIÇÃO NORMAL') grid %grade pause close format bank sigma1=(normcdf(1. y=normpdf(x.1)-normcdf(-2. plot(x.0.1)-normcdf(-1.0. M.1))*100.1))*100.1)-normcdf(-4.1).0.1))*100.2689% MAIS ou MENOS 2 SIGMA = 95.0.0.0.9937% '%']) '%']) '%']) '%']) PROF.0.01:3. Sc.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 54 OUTRA FORMA: Usando a função MATLAB normpdf function normal x=-3:0.0.

^2)*((mean(Y.y) ------------------------------------------------------------------| MODELO DE REGRESSÃO LINEAR SIMPLES: MÉTODO DOS MÍNIMOS QUADRADOS | ------------------------------------------------------------------------------------------------------------------------| FUNÇÃO DE REGRESSÃO ESTIMADA: Y = 26.48.*Y). disp( ' -----------------------------------------------------') disp(' ') disp( ' ------------------') disp([' | R2 = ' num2str(RSQUARE2).'*X |']).mean(X)* mean(Y)).44.24.^2)).*Y)-mean(X)*mean(Y))/(mean(X.32].^2.' + 'num2str(m_est).' % |']).68.46.12.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB REGRESSÃO LINEAR SIMPLES 55 A seguir tem-se alguns exemplos de regressão linear simples através do método dos mínimos quadrados. 9) Tomando-se a produção de milho (Y) e a quantidade de fertilizante (X) necessária. disp(' ') disp(' -------------------------------------------------------------------') disp('| MODELO DE REGRESSÃO LINEAR SIMPLES: MÉTODO DOS MÍNIMOS QUADRADOS |') disp(' -------------------------------------------------------------------') disp(' -----------------------------------------------------------') disp(['|FUNÇÃO DE REGRESSÃO ESTIMADA:Y ='num2str(q_est). » y=[40.^2)).^2)-(mean(X).80].^2)-(mean(Y)).26.18. disp( ' ------------------') disp(' ') Resolução via função implementada no MATLAB: reglin » x=[6. disp( ' -----------------------------------------------------------') disp( ' -----------------------------------------------------') disp([' | COEFICIENTE DE CORRELAÇÃO LINEAR: ' num2str(RSQUARE).22.74.16.4966 % | -----------------------------------------------------------------| R2 = 93. b=(mean(X.Y) % DETERMINAÇÃO DA FUNÇÃO DE REGRESSÃO LINEAR E DO COEFICIENTE DE CORRELAÇÃO e R2 m_est=(mean(X.48. RSQUARE2=(a/b)*100. faça a regressão linear e calcule o coeficiente de correlação. M. q_est=mean(Y)-m_est*mean(X).6597*X | -----------------------------------------------------------------------------------------------------| COEFICIENTE DE CORRELAÇÃO LINEAR: 96. a=(mean(X. RSQUARE=sqrt(a/b)*100. dados pela tabela a seguir.125 + 1. » reglin(x.60.1159 % | ------------------- PROF.52. Fertilizantes (X) Milho (Y) 6 40 10 44 12 46 14 48 16 52 18 48 22 60 24 68 26 74 32 80 function reglinear(X.' % |']). Sc.14. JOSÉ DONIZETTI DE LIA .^2)-(mean(X)).10.

apostila em inglês.5627 + 0. Sc.6177 % | ------------------REGRESSÃO LINEAR MÚLTIPLA Notas: 1) O MATLAB.x. no formato pdf e inclusa no CD de instalação do mesmo.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 56 10) A seguir tem-se os km rodados e os litros gastos. PROF.12739*X | -----------------------------------------------------------------------------------------------------| COEFICIENTE DE CORRELAÇÃO LINEAR: 99. faça a regressão linear e determine o coeficiente de correlação. M.3065 % | -----------------------------------------------------------------| R2 = 98. alpha) 2) O MATLAB possui um toolbox para a área de estatística (stats). Medida 1 2 3 4 5 6 7 8 9 10 11 12 km 3203 3203 2603 3105 1305 804 1604 2706 805 1903 3203 3702 litros 400 400 340 400 150 100 200 300 100 200 400 450 Medida 13 14 15 16 17 18 19 20 21 22 23 km 3203 3203 803 803 1102 3202 1604 1603 3203 3702 3403 litros 400 400 100 100 130 400 150 200 400 450 440 Resolução via função implementada no MATLAB: reglin » reglin(x.y) ------------------------------------------------------------------| MODELO DE REGRESSÃO LINEAR SIMPLES: MÉTODO DOS MÍNIMOS QUADRADOS | ------------------------------------------------------------------------------------------------------------------------| FUNÇÃO DE REGRESSÃO ESTIMADA: Y = -11. possui uma função que determina a solução para o modelo de regressão linear múltiplo é a função regress. assim a respeito das demais funções estatísticas digite nas linhas de comando help stats ou consulte a apostila do próprio MATLAB. A sintaxe mais simples desta função é regress(y. JOSÉ DONIZETTI DE LIA .

disp(' ') disp(' ----------') disp(' |MONTANTE|') disp(' ----------') disp(' ') disp(fv) pause clc % limpa a tela matfin elseif k==2 %CALCULO DA PRESTAÇÃO PELO SISTEMA PRICE clear % limpa as variáveis (lixos) clc % limpa a tela aviso={'ENTRE COM O CAPITAL:'. format bank gasto=(pmt*j).JUROS COMPOSTOS'. . resposta=inputdlg(aviso. resposta=inputdlg(aviso. 'MONTANTE . disp(' -------------') disp(' | PRESTAÇÃO |') disp(' -------------') disp(' ') disp(pmt) % CÁLCULO DA TABELA DE AMORTIZAÇÃO.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB MATEMÁTICA FINANCEIRA 57 A seguir tem-se alguns programas escritos em MATLAB.'ENTRE COM O PERÍODO:'}.M. pause(1) disp(' ---------------------------------------------------------------.. n=str2num(char(resposta(3))). i=str2num(char(resposta(2))).PRICE SaldoDevedor=pv.Sc. 'MONTANTE . pv=str2num(char(resposta(1))). linhas=1. voltados para a área de matemática financeira..matfin'). k=menu('MATEMÁTICA FINANCEIRA . format bank fv=pv*(1 + i/100)^n. linhas=1. % valor da amortização do período SaldoDevedor=SaldoDevedor-Amort.SISTEMA PRICE'. i=str2num(char(resposta(2))). titulo='MONTANTE . JOSÉ DONIZETTI DE LIA .'PRESTAÇÃO .: DONIZETTI'.. pv=str2num(char(resposta(1))).JUROS COMPOSTOS'.') disp(' |PERIODO| |JURO| |AMORTIZAÇÃO| |SALDO_DEVEDOR| |GASTO| ') disp(' ---------------------------------------------------------------.SÉRIE DE PGTO UNIFORMES'. % juros de cada periodo Amort=pmt-Juro... periodo=[J Juro Amort SaldoDevedor gasto].'ENTRE COM A TAXA:'.titulo.. PERÍODO A PERÍODO .JUROS COMPOSTO'. format bank pmt=pv*(i/100*(1+ i/100)^n)/((1+i/100)^n-1). titulo='MONTANTE . M.'ENTRE COM O PERÍODO:'}.'ENTRE COM A TAXA:'. % atualização do saldo devedor J=fix(j). if k==1 %CALCULO DO MONTANTE clear % limpa as variáveis (lixos) clc % limpa a tela aviso={'ENTRE COM O CAPITAL:'.') for j=1:n % número de prestações Juro=SaldoDevedor*(i/100). disp(periodo) pause(1) end PROF.linhas).. n=str2num(char(resposta(3))).PROF..titulo.linhas). 'FIM DO PROGRAMA . Sc.

resposta=inputdlg(aviso. i=str2num(char(resposta(2))). linhas=1.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB pause clc % limpa a tela matfin elseif k==3 %CALCULO DO MONTANTE EM UMA SÉRIE DE PAGAMENTOS UNIFORMES clear % limpa as variáveis (lixos) clc % limpa a tela aviso = {'ENTRE COM A PRESTAÇÃO:'.'ENTRE COM A TAXA:'.JUROS COMPOSTOS'.titulo. n=str2num(char(resposta(3))). Sc. titulo = 'MONTANTE .'ENTRE COM O PERÍODO:'}.linhas). pmt=str2num(char(resposta(1))). M. disp(' ----------') disp(' |MONTANTE|') disp(' ----------') disp(' ') disp(fv) clc % limpa a tela matfin else % sair do programa disp(' ') disp(' ---------------------------') disp(' |OBRIGADO POR USAR: matfin ') disp(' ---------------------------') disp(' ') clc % limpa a tela end 58 PROF. JOSÉ DONIZETTI DE LIA . format bank fv=pmt*((1+i/100)^n-1)/(i/100).

JOSÉ DONIZETTI DE LIA . 'SISTEMA DE AMORTIZAÇÃO CONSTANTE . % juros de cada periodo Amort=pmt-Juro. % valor da amortização do período SaldoDevedor=SaldoDevedor-Amort. 'SISTEMA DE AMORTIZAÇÃO AMERICANA . titulo='SISTEMA PRICE .. linhas=1...Parcelas de amortização do principal assumem valores crescentes SAC . %pause(1) disp(' -----------------------------------------------------------------') disp(' |PERIODO|PRESTAÇÃO| JUROS |AMORTIZAÇÃO|SALDO_DEVEDOR|TOTAL GASTO|') disp(' -----------------------------------------------------------------') prest=0.2f\n'. resposta=inputdlg(aviso.Prestações decrescentes .Amortiza-se apenas na última prestação 59 if K==1 clear clc % SISTEMA PRICE (FRANCÊS) DE AMORTIZAÇÃO % PRICIPAL CARACTERÍSTICA: PRESTAÇÃO CONSTANTE % BASTANTE UTILIZADO NAS COMPRAS COM POUCAS PRESTAÇÕES % CALCULO DA PRESTAÇÃO PELO SISTEMA PRICE disp(' ') aviso={'ENTRE COM O CAPITAL:'. % atualização do saldo devedor gasto=(pmt*p).Sistema de Amortização Americana . % % % % % % % % % % % % % % % % % % % % % % % % RESUMO SOBRE OS SISTEMAS DE AMORTIZAÇÃO Tabela Price .PRICE SaldoDevedor=pv.2f %12.'ENTRE COM A TAXA:'. com excessão da última . periódicas e sucessivas .Amortizações do principal são sempre iguais ou constantes em todo o prazo do financiamento SAA .2f\n'. e na última prestação paga-se os juros somados ao capital emprestado (juros + principal).Sistema de Amortização Francês .0f %10. ju=0...2f %15.. pv=str2num(char(resposta(1))).titulo.PROGRAMA .PRESTAÇÃO CONSTANTE'.2f %12.0f %17. M.Juros incidem sobre o saldo devedor e são decrescentes .M.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB K=menu('SISTEMAS DE AMORTIZAÇÃO . disp(sprintf('%8. as prestações são constantes.Neste sistema paga-se periodicamente apenas os juros.Juros incidem sobre o saldo devedor e são decrescentes . i=str2num(char(resposta(2))). disp(' -----------------------------------------------------------------------') disp(' |VALOR EMPRESTADO | N. com excessão da última .linhas).Sistema de Amortização Constante . .'ENTRE COM O PERÍODO:'}.Prestações sempre iguais. n=str2num(char(resposta(3))).0 DE PRESTAÇÃO | TAXA DE JUROS | VALOR PRESTAÇÃO|') disp(' -----------------------------------------------------------------------') sai=[pv n i pmt].Juros incidem sobre o saldo devedor e são contantes.Sc.2f %9.PROF.2f %17. Sc.sai')) % CÁLCULO DA TABELA DE AMORTIZAÇÃO PERÍODO A PERÍODO . for p=1:n % número de prestações Juro=SaldoDevedor*(i/100).resp')) PROF... disp(sprintf('%13.: DONIZETTI'.SAA'.2f %8. 'FIM . Sendo assim. amt=0. 'SISTEMA PRICE ..SAC'. resp=[p pmt Juro Amort SaldoDevedor gasto]..FRANCÊS'.sisamo'). format bank pmt=pv*(i/100*(1+ i/100)^n)/((1+i/100)^n -1)..

2f %9.titulo.2f %17. resposta=inputdlg(aviso. % pause(1) disp(' ------------------------------------------------------------------') disp(' |PERIODO|AMORTIZAÇÃO| JUROS |PRESTAÇÃO|SALDO_DEVEDOR|TOTAL GASTO|') disp(' ------------------------------------------------------------------') gasto=0. resposta=[p Amort Juro pmt SaldoDevedor gasto].SAC SaldoDevedor=pv. ju=0.resposta')) pause(1) end disp(' ----------------------------------------------') disp(' |AMORTIZAÇÃO TOTAL | JUROS PAGOS |TOTAL PAGO |') disp(' ----------------------------------------------') total=[amt ju gasto]. JOSÉ DONIZETTI DE LIA . titulo = 'SAC . disp(sprintf('%12. % juros de cada periodo pmt=Amort+Juro. amt=amt+Amort.2f %12. pv=str2num(char(resposta(1))). % atualização do saldo devedor gasto=gasto+pmt.'ENTRE COM O PERÍODO:'}.2f %15.2f\n'. for p=1:n % número de prestações Juro=SaldoDevedor*(i/100).ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB pause(1) %prest=prest+pmt.2f %15.2f %12.2f\n'.2f\n'. Sc.2f\n'. ju=ju+Juro.0f %17. amt=0. disp(sprintf('%12.sai')) % CÁLCULO DA TABELA DE AMORTIZAÇÃO PERÍODO A PERÍODO .SAA % PRICIPAL CARACTERÍSTICA: A CADA PERÍODO PAGA-SE APENAS O JUROS. disp(sprintf('%9. disp(' -------------------------------------------------------------------') disp(' |VALOR EMPRESTADO | N. M.'ENTRE COM A TAXA:'. amt=amt+Amort.total')) pause clc % limpa a tela sisamo elseif K==2 clear clc % SISTEMA DE AMORTIZAÇÃO CONSTANTE % PRICIPAL CARACTERÍSTICA: AMORTIZAÇÃO CONSTANTE % CALCULO DO VALOR DA AMORTIZAÇÃO aviso = {'ENTRE COM O CAPITAL:'.2f %9.linhas).2f %15. end disp(' ----------------------------------------------') disp(' |TOTAL PAGO | JUROS PAGOS | AMORTIZAÇÃO TOTAL|') disp(' ----------------------------------------------') total=[gasto ju amt]. 60 PROF.0 DE PRESTAÇÃO | TAXA DE JUROS | AMORTIZAÇÃO|') disp(' -------------------------------------------------------------------') sai=[pv n i Amort].2f %11. i=str2num(char(resposta(2))). linhas=1.AMORTIZAÇÃO CONSTANTE'. ju=ju+Juro.0f %10.total')) pause clc % limpa a tela sisamo elseif K==3 clc clear % SISTEMA DE AMORTIZAÇÃO AMERICANA . % valor da prestação período SaldoDevedor=SaldoDevedor-Amort. disp(sprintf('%15. format bank Amort=pv/n. n=str2num(char(resposta(3))).2f %15.

2f\n'.0f %9.resposta')) pause(1) end p=n.2f %15. disp(sprintf('%12. i=str2num(char(resposta(2))).sai')) % CÁLCULO DA TABELA DE AMORTIZAÇÃO PERÍODO A PERÍODO . amt=pv.2f %10.2f\n'. % juros de cada periodo pmt=Juros+pv.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB % NO ÚLTIMO PERÍODO PAGA-SE O JUROS + O MONTANTE EMPRESTADO % PORTANTO O JUROS É SEMPRE CONSTANTE % CALCULO DO VALOR DO JUROS aviso={'ENTRE COM O CAPITAL:'.2f %11. pv=str2num(char(resposta(1))).2f %12. resposta=[p Juro pmt Amort SaldoDevedor gasto]. amt=0.2f %17. titulo='SAA .'ENTRE COM O PERÍODO:'}. disp(' --------------------------------------------') disp(' |JUROS PAGOS |TOTAL PAGO |AMORTIZAÇÃO TOTAL|') disp(' --------------------------------------------') total=[ju gasto amt].0 DE PRESTAÇÃO | TAXA DE JUROS | JUROS |') disp(' ----------------------------------------------------------------') sai=[pv n i Juro]. for p=1:(n-1) % número de prestações Juros=pv*(i/100).2f %9.2f %13.resposta')) ju=Juros*n. JOSÉ DONIZETTI DE LIA . linhas=1.2f %13.2f\n'. format bank Juro= pv*(i/100). prest=0.2f %10. resposta=[p Juro pmt Amort SaldoDevedor gasto]. % pause(1) disp(' ------------------------------------------------------------------') disp(' |PERIODO| JUROS |PRESTAÇÃO|AMORTIZAÇÃO|SALDO_DEVEDOR|TOTAL GASTO|') disp(' ------------------------------------------------------------------') ju=0. % valor da amortização do período Amort=pv.'ENTRE COM A TAXA:'. Sc. resposta=inputdlg(aviso.total')) pause clc % limpa a tela sisamo else % sair do programa disp(' ') disp(' ----------------------------') disp(' |OBRIGADO POR USAR: sisamo |') disp(' ----------------------------') disp(' ') clc % limpa a tela end 61 PROF.linhas). disp(' ----------------------------------------------------------------') disp(' |VALOR EMPRESTADO | N. % juros de cada periodo pmt=Juros. disp(sprintf('%8.titulo. SaldoDevedor=SaldoDevedor-Amort.2f %13. M.JUROS CONSTANTE'. Juros=pv*(i/100).0f %9. disp(sprintf('%8. % atualização do saldo devedor gasto=Juros*p.SAC SaldoDevedor=pv. disp(sprintf('%12. gasto=0.0f %17. % valor da prestação do período Amort=0. SaldoDevedor=SaldoDevedor-Amort.2f %11.2f %9. % atualização do saldo devedor gasto=Juros*p+ pv.2f\n'. n=str2num(char(resposta(3))).

900 7x1 + 12x2 ≤ 8. JOSÉ DONIZETTI DE LIA . temos 11x1 + 9x2 ≤ 9.400 6x1 + 6x2 ≤ 9.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB PROGRAMAÇÃO LINEAR 62 A Programação Linear (LINEAR PROGRAMMING): é o campo da Matemática cujo objetivo é otimizar a solução de um problema que depende de um conjunto de variáveis sujeito a um conjunto de restrições. Os tempos de execução por unidade. M.600 Obs. Exemplo 01: Considere o seguinte problema Uma indústria produz duas peças A e B que necessitam passar por três operações.900 7x1 + 12x2 ≤ 8.: 60 usado para acerto das unidades Lucro obtido L = 9x1 + 10x2 Como não é possível número negativo de peças acrescentamos as condições de positividade que são: x1 ≥ 0 e x2 ≥ 0 Logo o problema proposto encontrando valores de x1 e x2 ∈ℜ satisfazendo 11x1 + 9x2 ≤ 9. tempo gasto com a operação 11x1 + 9x2 ≤ 165*(60) 7x1 + 12x2 ≤ 140*(60) 6x1 + 6x2 ≤ 160* (60) Assim. as disponibilidades em horas por mês. isto é quais as quantidades de peças A e B que devem ser fabricadas para ter lucro máximo? Resolução: Sejam: x1 = quantidade de peças A a ser produzida por mês. (1) (2) (3) PROF. Sc.600 x1≥ 0 e x2≥0 tal que L = 9x1 + 10x2 represente o lucro máximo.400 6x1 + 6x2 ≤ 9. x2 = quantidade de peças B a ser produzida por mês. e os lucros em reais por unidade são dados pela seguinte tabela: Operação 1 2 3 Lucro (R$ / unidade) Peça A (minutos/unidade) 11 7 6 9 Peça B (minutos/unidade) 9 12 6 10 Disponibilidade (horas/mês) 165 140 160 Pergunta-se em quais condições a industria deve trabalhar mensalmente para obter o maior lucro.

» A=[11 9.0) e (0. x12=[0 1100]. 9600]. Programação Linear (Linear Programming) Min cx Problema: s.y+20. y=minimo(2).'ponto ótimo') 16 00 14 00 12 00 10 00 80 0 60 0 40 0 20 0 0 0 20 0 40 0 60 0 80 0 10 00 12 00 14 00 16 00 11 x1+9x2 =99 00 7x1+1 2x2 =84 00 6x1+6 x2=960 0 po nto ó timo 2) O problema acima é um típico problema de programação linear (P. 1600) A região R descreve todos os pontos (x1. 7 12.'ko') text(x+20.x32) legend('11x1+9x2=9900'. 6 6]. x21=[1200 0]. JOSÉ DONIZETTI DE LIA .400 ! Interesecção com os eixos coordenados (1200. 6 6]. x22=[0 700].900 ! Interesecção com os eixos coordenados (900. x32=[0 1600].'7x1+12 x2=8400'.'6x1+6x2=9600') hold on c=[-9 -10].A.b) » c=[-9 -10]. minimo=lp(c.0) e (0. » b=[9900.0870 334.L. x31=[1600 0]. Sc.A.L.7826 Portanto. x11=[900 0].x12.). Considere as retas 1) 11x1 + 9x2 ≤ 9.b) minimo = 626. plot(x. é caracterizado pelos seguintes pontos: • • Uma função linear para ser otimizada (ser maximizada ou minimizada) As variáveis do problema estão sujeitas à condições de interdependência lineares são equações ou inequações lineares. 700) 3) 6x1 + 6x2 ≤ 9. x2 ∈ℜ que satisfazem as equações acima. 8400. M. plot(x11.0) e (0. 7 12.x31. » minimo=lp(c.y. 9600]. 8400. b=[9900.b) x=minimo(1).A. essas são as quantidades a serem produzidas PROF.x21. a : Ax ≤ b x≥0 Sintaxe: lp(c.x22.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 63 Observações: 1) É possível encontrar graficamente os valores x1. Pode se provar que a solução para o lucro ocorre sempre em algum vértice (não necessariamente em um único) desta região. A=[11 9.600 ! Interesecção com os eixos coordenados (1600. 1100) 2) 7x1 + 12x2 ≤ 8. x2) ∈ ℜ2 que satisfazem as condições do problema. Um problema de P.

A.5000 » resp=lp(c. usando a função lp. M.50] c = 0.0000 7. que apresentam.70 0. por cápsula.0000 % Portanto.0000 » custo=c*resp custo = 7. Ele pode escolher entre os compostos I e II.70 0.50x 2 7x 2 + 4x 2 ≥ 63  Sujeito a 4 x 2 + 5x 2 ≥ 55 x e x ≥ 0 2  2 Segunda etapa: A solução via MATLAB: O padrão da função MATLAB lp(c.b) resp = 5.A. a − 4 x1 − 5x 2 ≤ −55 x e x ≥ 0  1 2 Implementação MATLAB » A=[-7 -4.7000 0. Diariamente precisa de pelo menos 63 unidades de A e no mínimo 55 unidades de C.7x1 − 4x 2 ≤ −63  S .70x1 + 0. é a abreviação de linear programming) é: Min cx Ax ≤ b sujeito a  x ≥ 0 Assim.-4 -5] A = -7 -4 -4 -5 » b=[-63 –55] b = -63 -55 » c=[0.70x 2 + 0.b) (lp. de forma que torne mais fácil a utilização dessa função por parte do usuário final. ficando o mesmo da seguinte forma: Min 0. as características abaixo: Composto I II Vitamina A 7 unidades 4 unidades Vitamina C 4 unidades 5 unidades Valor R$ 0. o custo será de R$ 7.50 Qual o gasto mínimo diário de Eric.50x 2 . em reais. tem-se que adaptar o sistema anterior.00 mínimo diário Exercício 01: Elaborar um aplicativo. Dica: Construa uma interface com o usuário. com os compostos I e II? Resolução: Primeira etapa: O equacionamento: Min 0. JOSÉ DONIZETTI DE LIA . sendo solicitado do mesmo: a matriz A e os vetores c e b PROF. Sc.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 64 Exemplo 02: (Covest-PE) Eric necessita de complementos das vitaminas A e C.

minimo=lp(c. x21=[40 0]. b=[240000. JOSÉ DONIZETTI DE LIA .00 65 b) max 80x1 + 80x2 sujeito a: x1 + 2x2 ≤ 80 3x1 + 2x2 ≤ 120 x1≥ 0 e x2 ≥ 0 x11=[80 0]. 180000 .5 1.0000 30. x22=[0 60].5x1 + 1x2 ≤ 180. no formato pdf e inclusa no CD de instalação do mesmo.000 c=[-0. 1 0]. Sc.56.x12.1. plot(x11.b) x=minimo(1). M. apostila em inglês. A=[1 2. 120].ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB Exercício 02: Resolver os seguintes problemas de programação linear a) min -0.00 90000. 3 2].42x2 sujeito a: 1x1 + 2x2 ≤ 240.d) Nota: O MATLAB possui um toolbox para a área de otimização (help optim).b. PROF.A.C. y=minimo(2).10) a=2. plot(x. 1.5000 qp(A.x21.C.'ro') text(x+1.0000 60 x1 +2 x2 =8 0 3 x1 +2 x2 =1 2 0 0 50 40 30 p o n to ó timo 20 10 0 0 10 20 30 40 50 60 70 80 PROGRAMAÇÃO QUADRÁTICA (quadratic Programming) Min x t Ax + bx + c s. b=[80.b.'3x1+2x2=1200') hold on c=[-80 -80].5x + 6 s.42]. A=[1 2.A.'ponto ótimo') minimo = 20.000 x1 ≤ 110.y.000 1. assim consulte a ajuda online ou a apostila do próprio MATLAB.d) a=qp(2.-5.56x1 -0. a : Cx ≤ b Problema: x≥0 Sintaxe: Exemplo Min 2x2 .b) minimo = 60000.x22) legend('x1+2x2=80'. x12=[0 40].-0.a: x ≤10 qp(A.y+1. minimo=lp(c. 110000].

JOSÉ DONIZETTI DE LIA .9x + 16 = 0 a) x2 + 4 = 0 c) x2 .roteiro) que execute todos os itens pedidos no exercício anterior. versão 5 ou work. calcule:  4 3 7 8  Obs. 3) a) b) c) Criar as seguintes matrizes Identidade de ordem 5 Matriz nula do tipo 3x4 Matriz de elementos 1's do tipo 8x1  x − y − z = −2  3 x − y + z = 6 − x + 3 y + 4 z = 4  4) Resolva os sistemas lineares a) SPD S = { (-6. New.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB LISTA DE EXERCÍCIOS 1 . M-File) ou digitando edit. 10)} 2 x + 3 y + z = 2  23 7  b)  x − y + z = 3 SPD S= ( .− . Dica: Abra um arquivo a partir de (File. -14. nas linhas de comando. M.Comandos Básicos do MATLAB. Digite os comandos necessários e salve o arquivo com o nome de roteiro1. versão 6) ou em seu disquete. Sc.: Usando a janela de comandos (Command Window) do MATLAB a) b) c) d) e) f) g) A+B A'+B' A-B A*B A. logo após digite o nome do arquivo roteiro1.m. Sistemas Lineares e Equações 1 2   5 6 1) Dadas as matrizes: A =  e B=   . no diretório (bin. Para executá-lo a partir do disquete digite o seguinte comando na linha de comandos: addpath a:.*B 2*A+B' det(A) h) i) j) k) l) m) det(B) det(A*B) inv(A) inv(B) inv(A)*A inv(B)*B 66 2) Construa um programa (script .−3)    5 5 x − y + 2z = 0  (1) Use a função inversa (inv(A)) e o formato racional (format rat) (2) Use a função solve e compare com o resultado obtido em (1) (3) Use o programa escrito na apostila e compare com os resultados obtidos em (1) e (2) 5) Resolva as equações: b) x2 .4x + 4 = 0 PROF.

00 8.00 5.00 6.'d+e+f=15'. que estava fora da sala.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 67 6) Em uma sala de aula estão 8 pessoas.: Poderia se resolver este exercício usando o comando solve [a b c d e f g h]=solve('a+b+c=6'. reunidas em uma mesa circular.21. Soma2=9....'b+c+d=9'.'f+g+h=21'. Soma8=11 Resolução: Equacionamento Implementação via MATLAB » A=[1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1]. » x=inv(A)*b Obs.00 4.00 3.9.11]. x = 1.00 7.00 2. Soma6=21. JOSÉ DONIZETTI DE LIA . M.'g+h+a=16'. 'e+f+g=18'. Soma4=15.00 Solução MATLAB a + b + c = soma1 b + c + d = soma 2  c + d + e = soma3  d + e + f = soma4  e + f + g = soma5  f + g + h = soma6   g + h + a = soma7 h + a + b = soma 8  » b=[6.18. Sc. Como você faz para descobrir o número que cada um escolheu? Nota: Considere que as somas sejam: Soma1=6. Passa-se as 8 somas para você. Cada uma escolhe um número aleatório e pega o seu número e soma com os números das pessoas ao lado. a sua direita e esquerda.16. Soma7=16.12.'c+d+e=12'.15. Soma3=12.'h+a+b=11') e = a = 5 1 b = 2 c = 3 d = 4 f = 6 g = 7 h = 8 PROF. Soma5=18.

determinar: a) A parte real do número Z c) O módulo de Z b) A parte imaginária de Z d) O ângulo de Z (em graus) Polinômios 1) Determinar as raízes do polinômio x4 –10x3 +35x2-50x +24 » p=[1 -10 » raizes=roots(p) raizes = 4 3 2 1 35 -50 24]. » qx_1_5=polyval(p. Polinômios e Construções Gráfica Números complexos 1) Dado o número complexo Z= 3 + 4i. x = 3. Sc. JOSÉ DONIZETTI DE LIA . 68 2) Determinar o polinômio cujas raízes são: 1. 2.1:5) qx_1_5 = 6 11 18 27 38 PROF.2500 resto = 0 0.q) quoc = 0.Números complexos.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB LISTA DE EXERCÍCIOS 2 .7500 1. x = 2. x = 4 e x = 5 » q=[4 5 6].1) px_1 = 6 d) Avalie o polinômio q(x) para x = 1.q) = 4 13 28 27 18 b) Os coeficientes do quociente e do resto da divisão de p(x) por q(x) » [quoc resto]=deconv(p. » px_1=polyval(p. M. » p=poly(raizes) p = 1 -10 35 -50 24 3) Dados os polinômios p(x) = x2 + 2x +3 e q(x) = 4x2 + 5x + 6 a) Determine o produto de p(x) por q(x) através de seus coeficientes » » » a p=[1 2 3].5000 c) Calcule o valor numérico do polinômio p(x) para x = 1 » p=[1 2 3]. a=conv(p. q=[4 5 6]. 3 e 4 ambas raízes com multiplicidade 1 (cada elemento é raiz uma única vez) » raizes=[1 2 3 4].

/((x-0.01)+ .Y. xlabel('eixo x') ylabel('eixo y') zlabel('eixo z') com .2995 100 80 60 40 20 0 -20 -2 -1.Z) title('GRÁFICO DA SUPERFÍCIE Z=X. y=1.5 1 1.y.^2-Y. mesh(X. 2) Plotar o gráfico da função humps. M.[1 1.^2'). no intervalo [0.3) 2 + 0. » fzero('humps'. os gráficos das funções: a) sen (x) e sen (x + π) b) cos (x) e cos (x + π) 5) Plotar o gráfico cuja equação é: y = x3 . inserir linha de grade.^2+0. [X Y]=meshgrid(x. usando o comando mesh.01)+ . y e z. sen (2x).9) 2 + 0.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB Construção de Gráficos 69 1) Construa o gráficos das seguintes funções (com titulo ao gráfico. usando o comando plot. sen(4x).3).*exp(-X.[0 0]) % É necessário definir a função function y=humps(x) y=1/((x-0. plot(x.04)-6. 4π] usando o comando subplot.04 no intervalo -2 ≤ x ≤ 2. 1/(x-0.^2).5 0]) ans = -0. Sc.1:2..3)^2+0.9)^2+0. −x2 − y2 6) Plotar o gráfico da função z = x. Fornecer um título ao gráfico. nomes a seus eixos e linhas de grade) a) f(x) = x3 no intervalo [-5. 2π] d) y = sen (x) no intervalo 0 ≤ x ≤ 4π. no intervalo [-2.5 0 0..10] c) f(x) = cos(x) no intervalo [-2π.5]) ans = 1.e x=-2:0. sen (x/2) e sen (x/3)..y).*exp(-X.5 2 3) Construir o gráfico das funções: sen (x).1:2./((x-0.^2-Y. PROF.8x2 +15x.01 ( x − 0.5] b) f(x) = ex no intervalo [-10. 7].[-0. function graf_humps x=-2:0. 1.9). y=-2:0.1:2.04)-6. dada por: f ( x) = 1 1 + −6 ( x − 0. sen (3x). rotular os eixos x . Z=X.5 -1 -0.^2+0.2 ≤ x ≤ 2 e . JOSÉ DONIZETTI DE LIA . 4) Fazer em um mesmo gráfico.[-2 2].1316 » fzero('humps'..2 ≤ y ≤ 2. Em seguida determine as raízes dessa função nesse intervalo.

22x10-16 y1=1.x2. x funç ã o invers a de x 10 8 6 4 2 x1=-5:0. plot(x1./(x2-2). x2=(1+10*eps):0. % eps = 2.[-10 10].1:(0-eps). plot(x1.'g') pause close x2 − 4 x−2 8 7 ( x ≠ 2) .'b') axis([-5 5 -10 10]) grid xlabel('x') ylabel('y = 1 /(x-1) ') title('gráfico da função: 1/(x-1))') hold on plot([0 0].'g'.5 ≤ x ≤ 5 e determine as raízes dessa equação.6.3 ≤ x ≤ 2 e determine as raízes dessa equação.'b'.22x10-16 y2=1. close y = 1/x 0 -2 -4 -6 -8 -10 -5 -4 -3 -2 -1 0 x 1 2 3 4 5 12) Plotar o gráfico cuja equação é: y = 1 .y1.y2.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 70 7) Representar graficamente a parábola de equação y = x2 + x .2x2 .'r') % Assintota pause. x2=(0+eps):0. M. no intervalo [-5. y1=(x1. JOSÉ DONIZETTI DE LIA .'b'./(x1-1).5 x + 6. no intervalo [-5.[-10 10].[0 0].y1./(x1-2). % eps=2. 6].^2-4).'b') axis([-5 5 -10 10]) % Definição da área de plotagem: x=[0 5] e y=[0 10] grid xlabel('x') ylabel('y = 1 / x ') title('função inversa de x') hold on plot([0 0].1:(1-10*eps). no intervalo . plot(x1.^2-4). Sc. 8) Representar graficamente a equação y = x3 . close y = 1 /(x -1) 0 -2 -4 -6 -8 -10 -5 -4 -3 -2 -1 0 x 1 2 3 4 5 PROF.1:(2-10*eps).y2./(x2-1). y2=(x2.'k') plot([-5 5].1:6./x2.y2.22x10-16 y2=1. no intervalo [-2. no intervalo . 5]./x1.x2.'k') plot([1 1]. % eps=2. x −1 grá fic o da funç ã o: 1/ (x -1)) 10 8 6 4 2 x1=-5:0.x2.1:5.'k') % assintota pause. % eps = 2. x2=(2+10*eps):0.[-10 10]. 9) Representar graficamente as duas curvas anteriores simultaneamente no intervalo 3≤ x≤ 4 10) Plotar o gráfico cuja equação é dada por: f ( x) = X1=-2:0. 5].1:5. 6 5 4 3 2 1 0 -2 -1 0 1 2 3 4 5 6 11) Plotar o gráfico cuja equação é: y = 1 .y1.22x10-16 y1=1.

x12=(pi/2+eps):0.[0 0])% cria o eixo das abscissas hold on plot([0 0].[-5 5]) % cria o eixo das ordenadas pause close 3π π ≤x 2 2 PROF.PROGRAMANDO COM O MATLAB 71 1) Criar uma matriz do tipo 3x3 tal que cada elemento aij = i + j.j)=eval(t) end end 4) Construir um programa que determina o gráfico da função tg(x) para − Function graf_tangente % gráfico da função tangente(x) x = [-pi/2 3*pi/2] x11=(-pi/2+eps):0.j)=i+j. for m=1:4 for n=1:3 A(m. end.y. % excluir os valores onde a função é indefinida y=tan(x). Sc. M.m". for i=1:m for j=1:n A(i.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB LISTA DE EXERCÍCIOS 3 .x12']. End End Segunda forma: Usando o comando eval t='1/(i+j-1)'.01:(3*pi/2-eps). usando um duplo FOR n=3. end disp('Matriz A') disp(A) 2) Usando dois comandos for criar uma matriz do tipo 4x3 com todos elementos iguais a 10. end end disp(A) 3) Gerar uma matriz de Hilbert (é uma matriz cujos elementos são iguais a 1 / (i + j . x=[x11'.n)=10. plot(x. Primeira forma: Usando um duplo for For i=1:n For j=1:n A(i. m=3.1) com i e j variando de 1 até n e salvar este arquivo como "hilbert.'r') xlabel('x (radianos)') ylabel('y = tangente(x) ') title('gráfico da função tangente ') grid axis([-pi/2 3*pi/2 -5 5]) hold on plot([-5 5].01:(pi/2-eps). JOSÉ DONIZETTI DE LIA . for i=1:n for j=1:n A(i.j)=1/(i+j-1).

while prod(1:n) < realmax n=n+1. end 7) Elabore um programa que calcula a soma dos quadrados dos n primeiros números naturais não nulos. Dica: Use os comandos: input. end disp(' ') disp(n-1) 9) Escrever um programa para gerar uma matriz identidade de ordem 5. end 6) Elabore um programa que calcula a soma dos n primeiros números naturais não nulos function soma=soma1(n) Soma=0. PROF. while i<=n soma=soma+i. i=i+1. For i=1:n pot=pot*x. while n~=0 soma=soma+n. end Função MATLAB (built in function) sum Exemplo: sum(1:100) function soma=soma3(n) soma=0. For i=1:n soma=soma+i*i.n) Pot=1. i=1. cujos elementos diagonais são os números inteiros positivos nessa ordem. *x (n-vezes)) function pot=potencia(x. end 8) Elaborar uma função que determina o maior número fatorial calculado pelo MATLAB function max_fatorial % Determinar o maior número fatorial calculado pelo MATLAB n=1. function soma=soma_quad(n) Soma=0.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 72 5) Elabore um programa para calcular xn (x inteiro e positivo) sem usar exponenciação ou função predefinida (lembre-se: xn = x* x* . n=n-1.. M. cujos elementos diagonais são iguais a 5 e os demais iguais a10.. end function soma=soma2(n) soma=0. Sc. For i=1:n soma=soma+i. solicitando do usuário a ordem da mesma. for e if 11) Gerar uma matriz triangular inferior. 12) Escrever um programa para gerar uma matriz diagonal. usando os comandos: for e if 10) Escrever um programa para gerar uma matriz identidade de ordem n. JOSÉ DONIZETTI DE LIA .

Passa-se as 8 somas para você... reunidas em uma mesa circular. b e c') disp (' ') disp(' O COEFICIENTE "a" NÃO PODE SER ZERO') disp (' ') disp(' POIS É UMA FUNÇÃO DO SEGUNDO GRAU') disp (' ') a=input(' ENTRE COM O COEFICIENTE. Sc. if delta >=0 x´=(-b-sqrt(delta))/(2*a) x´´=(-b+sqrt(delta))/(2*a) else i=sym ('i'). Como você faz para descobrir o número que cada um escolheu? Elaborar um aplicativo que solicite do usuário as 8 somas e determina os números escolhidos. que estava fora da sala. basta resolver o sistema: x = inv(A)*b  e + f + g = E f + g +h = F  g + h + a = G h + a + b = H  14) Gerar 1000 números aleatórios com distribuição normal e verificar a distribuição dos dados através da função histfit >> a=randn(10000. b = '). H são recebidos do usuário a + b + c = A através da sintaxe: b + c + d = B A = input ('Entre com o valor da primeira soma ==> ')  . M. disp(' ') c=input(' ENTRE COM O COEFICIENTE.. B. disp(' ') disp(' ----------------------------') disp(' RAÍZES (ZEROS) DA PARÁBOLA ') disp(' ----------------------------') delta=b^2-4*a*c. a sua direita e esquerda. c = '). a = '). JOSÉ DONIZETTI DE LIA . disp(' ') b=input(' ENTRE COM O COEFICIENTE. c + d + e = C H = input ('Entre com o valor da oitava soma ==> ')  d +e+ f = D  Assim. . Cada uma escolhe um número aleatório e pega o seu número e soma com os números das pessoas ao lado. Os valores A.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 73 13) Em uma sala de aula estão 8 pessoas.. x´=(-b-sqrt(-delta)*i)/(2*a) x´´=(-b+sqrt(-delta)*i)/(2*a) end disp(' ') disp(' ------------------------------------') disp(' COORDENADAS DO VÉRTICE DA PARÁBOLA ') disp(' ------------------------------------') disp(' ') xv=-b/(2*a) yv=-(b^2-4*a*c)/(4*a) PROF.1). >> histfit 15) Elabore um aplicativo que determine as raízes e o vértice de uma função quadrática function zero_para clear. clc disp(' ENTRE COM OS COEFICIENTES: a...

sendo que o valor máximo não possa ultrapassar R$156.50.. Sc. end disp(' ') disp(prod) end 74 Exercício: Elaborar um aplicativo que solicite do usuário o seu salário bruto e que determine o seu salário líquido. else prod=prod*i.00. disp(' ') for i=1:n. i=i+1.2. .00% para valores de R$ 1. prod=1.00. já descontado o INSS e o IRPF Nota: • Considere que as alíquotas do INSS podem ser: 8%.50% para valores acima de 2.115. 15.. • As alíquotas do IRPF são: 1.'! = ' num2str(fatorial_n)]). PROF.115.057.(n-3). error('n deve ser não negativo') if n<0 end disp( ' ') p=prod(1:n).00. disp([' ' num2str(n).50 até R$ 2.'! = ' num2str(fatorial_n)]). . end while n~=0 disp(' ') prod=prod*n. 11%. disp(' ') else disp(' ') fatorial_n=prod(1:n).1 % Sintaxe: fatorial(n) if n < 0 disp(' ') disp(' Erro: o número deve ser não negativo') disp(' ') elseif n==0 disp(' ') fatorial_n=1. Assim o valor máximo para dedução é de R$ 423. JOSÉ DONIZETTI DE LIA . 27. if (length(n)~=1)|(fix(n)~=n)|(n<0) prod=1. M.057. error('n deve ser não negativo') else while i<=n prod=prod*i. 9%. disp([' ' num2str(n). 10%. 3.00 (valor máximo). 4. isto é.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB 16) Determinação do fatorial de um número dado function fatorial(n) % Determinar o fatorial de um número n dado % n! = n . 2. Isento para valores até R$ 1. disp(prod) n=n-1.3. disp(' ') end function fatorial3(n) function fatorial2(n) if n==0 if n==0 disp(1) disp(' ') else disp('1') prod=1. end end disp(' ') disp(prod) disp(' ') end function p=factorial(n) function fatorial4(n) i=1.(n-1).(n-2).

ed. 15 ZIONTS. Introdução ao MATLAB. A. ed. Sc.. ed. MA: The Math Works. 4. 1998. PROF. 1991. Inc. 2001. 07 MATSUMOTO. 04 MARQUES. 1983 10 SAMPAIO. Natick.. Introdução a Programação Linear. PUC-RJ. MATLAB BÁSICO Curitiba 1999 05 MATLAB for Windows User’s Guide. A. The Math Works Inc. Rio de Janeiro. R. E. E. Applied multivariate statistical analysis. Vol I e II Makron Books São Paulo. MA: The Math Works. User's Guide: version 2. Inc.. N. 08 OPTIMIZATION TOOLBOX: For use with MATLAB. New Jersey.1. Stanley Linear and Integer Programming. 02 JOHNSON. 1994 13 SYMBOLIC MATH TOOLBOX: User's Guide: version 2. R. 2.. RIQUELME. Prentice-Hall. D. MA: The Math Works.. Natick. New Jersey. MATLAB 6 – Fundamentos de programação. W Cálculo com Geometria Analítica. E. UNESP. Natick. 1998. 1998..2 Student. inc. 09 PUCCINI. W. M. J. inc. H. 1997.. 06 MATLAB: The Language of Technical computing – Using MATLAB: Version 5. CATALDO. Campus de Ilha Solteira.. 14 THE STUDENT EDITION OF MATLAB: Version 5 – User's Guide. Laboratório de vibrações. Livros Técnicos e Científicos ed. User's Guide: version 5. Departamento de Engenharia Mecânica. 1. Ed.. M. Aproximando soluções de AX=B com o MATLAB.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB REFERÊNCIAS BIBLIOGRÁFICAS 75 01 Curso de MATLAB for Windows. JOSÉ DONIZETTI DE LIA . New Jersey: Prentice–Hall. Inc. Natick. Érica. de Lima e PIZZOLATTO. MA: The Math Works. R. 03 LECKAR. R. 12 SWOKOWSKI. Inc. 1998. PUC-RJ.. 1997. 11 STATISTICS TOOLBOX: For use with MATLAB. SAMPAIO. Y. 1974. version 5. WICHERN.

: M. Sc. M. JOSÉ DONIZETTI DE LIMA . Sc.ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB Ministério da Educação Centro Federal de Educação Tecnológica do Paraná Unidade de Pato Branco ELEMENTOS BÁSICOS DE PROGRAMAÇÃO EM MATLAB PROF. JOSÉ DONIZETTI DE LIMA PROF.

Sign up to vote on this title
UsefulNot useful