Escolar Documentos
Profissional Documentos
Cultura Documentos
Organização:
VIÇOSA/MG
2010
1
Matlab: Um curso introdutório
1. Introdução
Matlab é um software para modelagem matemática de sistemas, ao contrário
de muitos outros pacotes vendidos, ele não gera arquivos executáveis, assim necessita
que ele esteja instalado no computador para que se possa ―rodar‖ o arquivo de código.
Há dois ambientes básicos o Work Space (Área de trabalho) e o arquivo .m. No
primeiro seu funcionamento é semelhante ao prompt ou linha de
comando . O Windows passou a ser o sistema operacional somente com
a versão 95. A seguir temos uma visão geral dos ambientes de programação do
Matlab(Figura 1).
Primeiramente a versão que se está utilizando nesta apostila é a 7.8.0.347
R2009a, cujas licenças foram adquiridas pela UFV (Universidade Federal de Viçosa) em
novembro de 2009. Há duas três versões: uma estudantil que é caracterizada pelo
prompt de comando edu>, a versão profissional >> e a educacional, esta última para
instituições de ensino. Na figura 1 pode-se ver várias janelas, cada qual com sua função,
mas há 2 delas que pode-se classificar como sendo as principais. Ou seja, as que
apresentam o espaço de trabalho e o arquivo.m.
O objetivo da produção deste material é servir como apoio a um curso de
introdutório de Matlab. Com este o participante poderá rever alguns comandos iniciais e
essências de pacote de programação que tem sido escolhido por várias instituições de
ensino superior do Brasil e do exterior, além de muitas empresas o terem adotado como
software de projetos.
Um dos motivos dessa escolha é sem dúvida a facilidade e simplicidade de
programação, além do leque de funções inclusas e validadas que ele possui. Tudo isso
torna o Matlab uma poderosa ferramenta de trabalho, porque poupa tempo de
programação.
Espera-se que com esse texto e mais o curso, o participante ganhe know-how
para se autodesenvolver e aprofunda na sua área específica, explorando cada vez mais
este software e obtendo resultados com ele.
Área do
arquivo.m
Área de
Trabalho
As outras áreas podem ser suprimidas, mas é interessante deixa-las a mostra para
um maior controle das informações geradas pelo sistema. Na figura 2 é possível observar
mais 3 áreas:
o Current Directory (diretório atual), nesta janela pode-se observar o conteúdo da
pasta atual (ou diretório atual). É sempre um bom procedimento que os arquivos que
estejam sendo vistos nesta janela, sejam os que se pretende utilizar. Caso contrário
o Matlab não reconhecerá os comandos por não estar direcionado ao diretório atual.
Buffer (Workspace), nesta estarão sendo apresentadas as variáveis criadas, seu
tamanho, tipo e conteúdo;
Command History, nesta são registrados todos os comandos entrado no Work
Space;
Buffer
Pasta atual
Histórico
de
comandos
Pode ser observado também, que na parte superior da janela do Matlab já aparece o
Current Directory. Assim, talvez seja dispensável mais uma janela para esse propósito.
No Workspace pode-se entrar com os comandos diretamente. Qualquer comando do
Matlab pode ser inserido neste lugar (Figura 3).
built-in
(C:\MATLAB\R2009a\toolbox\matlab\general\type)
sprintf(‗ mensagema enviar par tela‘) essa porém além de exibir mensagem na tela atribui a
string a variável ans. Caso deseje, poderá executar esse comando da seguinte forma:
mensagem= sprintf(‗ mensagema enviar par tela‘) mostrará na tela e atribuirá a string para
variável mensagem.
Que poderá se usada dentro de qualquer outra função que demande de uma string, por
exemplo o próprio comando disp. disp(mensagem), figura 5.
Mensagem enviada
>>1+2 >>3-2
Ans = Ans=
3 1
Multiplicação Divisão
>>2*3 >>3/2
Ans= Ans
6 1.5
>>2\3
Ans
1.5
Potência Expoente
>>2^3 >>exp(1)
Ans Ans
8 2.7183
>>a+b >>a-b
Ans Ans
579 -3 -3 -3
Multiplicação Divisão
>>a.^2 >>exp(a)
Ans Ans
149 2.7183 7.3891 20.0855
sprintf sscanf
Sprintf
>>b=[2.7100 3.1415]
B=
2.7100 3.1415
>>sprintf(‗Os valores são: %3.2f e
%3.2f\n‘,B(1),B(2))
ans=
Os valores são: 2.71 e 3.14
4. Operadores relacionais
Assim como outras linguagens de programação, há uma série de codificações para
elaborar o funcionamento lógico do programa em desenvolvimento. A figura 6 mostra alguns
operadores relacionais que pode ser usados. O primeiro deles é o < menor que, <=menor
que ou igual, >maio que, maior ou igual, == igual e não igual ou diferente ~=. Deve-se ter
cuidado para não confundir == com =, pois são bem distintos um do outro, o primeiro serve
para comparar e o segundo para atribuir.
Essa estrutura poderá se usada na sua forma mais simples que é o usando o
comando if + a expressão condicionante e o comando, assim como todos em bloco como
esse, devem terminar com a palavra end. A forma completa desta estrutura apresenta uma
primeira verificação, a qual se não for satisfeita passa par a segunda verificação elseif, caso
não seja satisfeita segue para a última que será executada no caso de nenhuma das
anteriores forem satisfeitas.
Outra estrutura é o case, nesta é necessário a entrada verdadeira para que ela seja
executada. Nesta várias condições podem ser relacionadas e executadas conforme a
entrada. São, neste caso, os case’s. A estrutura executa um determinado expressão casa
nenhuma das condições, ou seja dos case’s, não seja satisfeita. Muito utilizada para enviar
uma mensagem de erro para o usuário. Novamente, a estrutura é finalizada com a palavra
end.
Outra estrutura muito comum e a while (figura 10), nela enquanto a expressão lógica
é satisfeita o laço continua executando as operações dentro dela até que o estado dela seja
alterado para sair do laço.
O laço while se repete enquanto o valor da variável eps+1 for menor que 1. Há a
expressão que faz com que o valor da eps vá diminuindo até que a condição não seja mais
satisfeita.
5. Interface gráfica
Embora haja uma linguagem mais apropriada para fazer a interface gráfica com o
usuário chamada de GUI, o Matlab disponibiliza algumas funções muito interessantes que
permite uma aplicação direta e muito prática de algumas dessas interfaces. Com elas,
certamente o leitor se sentirá muito melhor, pois poderá proporcionar programas com uma
interface muito próxima ao que o sistema Windows executa. Assim seguem algumas dessas
funções e a explanação de como elas funcionam.
5.1. Inpudlg
Essa função abre uma caixa de mensagem onde o usuário poderá atribuir valores a
suas variáveis. Ela possibilita que existam valores ―default‖. A sua estrutura segue conforme
a figura 11.
A função inputdlg funciona como a função input, porém há apenas alguns parâmetros
a mais que devem ser observados e preparados. Primeiramente haverá necessidade de
mensagens dizendo em qual caixa colocar uma informação específica, no exemplo as
mensagens estão armazenadas na variável prompt. Nesta o texto de cada caixa foi inserido,
como: Entre com a dimensão da matriz(Entre matrix size) e entre com o nome do mapa de
cores (Enter colormap name). Também há a necessidade de dar um título para essa caixa
de comando, nocaso a variável usada foi dlg_title, para qual foi atribuído nesse exemplo
Entrada para funções de picos (Input for peaks function). Outra variável, a def, foram
atribuídos os valores default. E finalmente a num_lines ou número de linhas,foi atribuído o
valor de 1 linha. Cada caixa pode possuir várias linhas, normalmente uma só basta.
É importante observar que os valores que retornam após a entrada com esse
comando são strings e, portanto, devem ser convertido para outro formado, exemplo se for
números de entrada.
Para fazer essa conversão por exemplo de caracteres para número use o seguinte
comando:
str2num(variável string)
5.2. msgbox
Há a possibilidade de enviar uma mensagem para o usuário, Para isso pode-se
utilizar a função msgbox. Cada caixa de mensagem ainda pode ter um ícone que destaca
que tipo de mensagem o programa está enviando, por exemplo: erro, alerta e ajuda.
Observe a sintaxe dessa função, primeiro vai a mensagem que se quer mandar para
o usuário, em seguida o título da caixa de mensagem e depois o tipo de ícone (figura 12).
5.3. Questdlg
A próxima função é a caixa de pergunta, onde alguma situações são questionadas e
o usuário deverá clicar no botão para escolher entre elas. Ajusta-se uma destas escolhas
como a default.
Para configurar a função é necessário definir a pergunta a ser mostrada para o usuário, o
título da caixa de mensagem, as opções, no máximo 4 e a opção default. A figura 14 mostra
a sintaxe da estrutura desta função.
6. Gráficos
Nesse tópico são apresentados alguns tipos de gráficos. Eles poderão ser
implementados em qualquer aplicação, no entanto deve-se ter cuidado para não perder o
foco e principalmente a utilidade dos mesmos. Caindo assim, numa situação de poluição
visual e o propósito de se utilizar gráficos seja perdido.
6.1. Plot
É sem dúvida a função mais simples e sua implementação segue o mesmo grau de
dificuldade. O comando plot é então ilustrado abaixo na figura 18.
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
zlabe(‗Nome do eixo Z‘) coloca o nome do eixo Z. No caso do gráfico ser em 3D.
Exemplo: plot(x,y,‘b+‘,x,-y,‘go‘)
0.8
0.6
0.4
Nome do eixo Y
0.2
-0.2
-0.4
-0.6
-0.8
-1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Nome do eixo X
Uma função interessante que podemos inserir agora é a ginput, ela permite que o
usuário aponte um ou mais pontos no gráfico aberto e retorna as coordenadas do ponto ou
pontos selecionados.
Exemplo:
Este cursor ficará aberto até que a entrada feita com o mouse seja realizada, isso
acontecerá o número de vezes que for inserido no comando ginput.
A figura mostra os dois pontos, a partir destes será desenhada uma reta interligando
os mesmos. Na figura 23, também mais uma função é introduzida, a text(a(1),b(1),’Ponto 1’),
onde a e b são tem os valores das coordenadas tomadas pela função ginput e é colocado o
texto Ponto 1 e Ponto 2 na extremidade da reta, conforme a figura 23.
0.8
0.6
Ponto 1
0.4
Nome do eixo Y
0.2
-0.2
-0.4
-0.6 Ponto 2
-0.8
-1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Nome do eixo X
6.2. Subplot
Muitas vezes é necessário colocar as funções, devido a sua natureza, em gráficos
distintos. Isso é possível no Matlab utilizando a função subplot. As funções utilizadas no
exemplo anterior serão aqui novamente reutilizadas para exemplificar esse comando.
A seguir a figura 24 exibe a função subplot com 4 gráficos na mesma figura. É
possível colocar mais, porém, por motivos de poluição visual e para que os resultados dos
gráficos fiquem legíveis, é importante manter esse número em torno de 6×6 ou no máximo
8×8.
1 1
0.5 0.5
0 0
-0.5 -0.5
-1 -1
0 0.5 1 0 0.5 1
1 1
0.5 0.5
0 0
-0.5 -0.5
-1 -1
0 0.5 1 0 0.5 1
Uma tabela 4 foi construída para ilustrar a questão das posições. Perceba que não
importa o tamanho da matriz, a numeração segue conforme a linha vermelha da tabela
indica.
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36
6.3 Compass
Outra função que deverá dispertar interesse no leito é a compass. Com ela
poderemos colocar em um sistema semelhante a uma bússula, vetores. Todos os vetores
criados parte do centro com a extremidade definida. São setas que apontam para direções
determinadas. A figura 25 ilustra esse comando.
90 1.5
120 60
150 30
0.5
180 0
210 330
240 300
270
Título
90 1.5
120 60
150 30
0.5
Imaginário
180 0
210 330
240 300
270
Real
A figura 27 mostra essas opções. Há, com certeza, outras que poderão ser.
Título
90 1.5
120 60
150 30
0.5
Imaginário
180 Linha 0
210 330
240 300
270
Real
250
200
150
100
50
0
-4 -3 -2 -1 0 1 2 3 4
0
1 2 3 4 5 6 7 8 9
1
1 2 3 4 5 6 7 8 9
0
1 2 3 4 5 6 7 8 9
7. Programa Exercício
Neste tópico será acompanharemos um programa que utilizar vários dos comandos
vistos até o momento. O projeto consta de trabalhar com uma equação de 2º.grau, mas que
muito bem poderia ser qualquer outro tipo de modelo matemático, mostrar os resultados em
um gráfico. Neste, pode-se renomear os eixos e o título, possibilita que salvemos os
resultados em um arquivo com um nome escolhido e depois o recuperamos. Note que o
arquivo aqui é do tipo texto, ou seja, podemos salvá-lo com ou sem exteção txt, doc, m ou
qualquer outra desse gênero.
Além dos recursos gráficos, utilizou-se uma estratégia de programação bastante
interessante, na qual foi o script da codificação foi construída ao redor de um programa
principal chamado main.m. Outros arquivos então foram criados para quebrado, ou melhor,
distribuído nos arquivos: arquivo.m, abre.m, dadosinf.m, grafi.m e solucao.m.
É preciso observar que os arquivos criados deverão estar no mesmo diretório ou
pasta do caminho corrente do Matlab. Pois, se isso não acontecer, o Matlab não
reconhecerá e enviará uma mensagem como mostrada na figura 32.
Caso não haja interesse em renomear essas informações, então pode-se pressionar o
botão Não editar, então os nomes predefinidos serão usados. No exemplo dados de -5 até
5 foram usados para criar os dados, o passo foi de 0,001. O gráfico é mostrado na figura 38,
os respectivos dados criados estão na figura 37.
Prof. Paulo Cezar Büchner
25
Matlab: Um curso introdutório
8. Código fonte:
Neste tópico é apresentado o código de programação propriamente dito. Nele estão
os comentário em cada linha. Mais comentário que se fizerem necessário estarão entre
linhas.
9. while aux1=='s' %faz a verificação para entrar no laço while que será executado enquanto
essa variável não for alterada.
10. clc
11. aux=menu('Escolha sua opçao',...
12. 'Teclado','Banco Dados','Plotar','Visualizar',...
13. 'Salvar','Sair','Abrir'); %cria a janela contendo o menu principal, observe
que o primeiro strin é a pergunta feia ao usuário para tomar a sua decisão, em seguida o
nome dos botões: Teclado, Banco Dados, Plotar, Visualizar, Salvar, Sair e Abrir. Cada botão
está numa posição, isto é 1, 2, 3, 4, 5, 6 e 7 respectivamente.
14.
15. switch aux %iniciar o laço switch que entra com a opção feita no menu. O valor de retorno é
um número, portanto a variável aux tem um valor inteiro.
16. case 1 % Entrada pelo teclado
17.
18. prompt={'a:','b:','c:'};
19. def={'1','4','20'};
20. dlgTitulo='Entre com os parametros:';
21. numLine=1;
22. resp=inputdlg(prompt,dlgTitulo,numLine,def); %cria o menu que pede para o
usuário entrar com dados na janela, figura 16. Para compor essa função inputdl é necessário
o título de cada campo de entrada, especificar qual será o valor default, no caso foram os
número 1, 4 e 20, mas poderia ser vazio e assim ‘’, ‘’ e ‘’. Em seguida declara a string para o
título, o número de linhas, normalmente 1. Esse comando retorna conteúdos de células, que
são strings. Por isso devem ser convertidos para números, se esse for o caso.
23. a=str2num(cell2mat(resp(1))); % o comando cell2mat, converte a célula para string, em
seguida usa-se outro comando para converter string em número, é o str2num. Finalmente
tem-se número nas variáveis ‘a’. Repete-se este comando para as outras variáveis como
segue.
24. b=str2num(cell2mat(resp(2)));
25. c=str2num(cell2mat(resp(3)));
26.
27. solucao
28.
29. case 2 % Abre os dados do arquivo
30. disp('Entrou aqui de alegre!!!')
31. if or(exist('a'),exist('b'))==0
32. dadosinf %chama o arquivo dadosinf.m
33. else
34. aux=1;
35. end
36.
37. case 3 %Plota o grafico
38.
39. if or(exist('a'),exist('b'))~=0
40. solução %chama o arquivo solucao.m
41. grafi %chama o arquivo grafi.m
42. else
43. aux=1;
44. msgbox('Declarar variavel','Aviso') %comando que coloca uma caixa de mensagem na
tela. Necessita de uma string que dá a mensagem para o usuário, e o tipo do ícone que irá
aparecer. Botões ok são exibidos para o usuário pressionar.
45. end
46.
47.
48. case 4 %Ver o conteudo do arquivo dadostxt.txt
49.
50. fid=fopen('c:/matlabR12/work/dadostxt.txt','r') %comando para abertura ou
criação de arquivo, aqui inclusive é colocado o caminho aonde este arquivo, no caso
dadostxt.txt, está. O parâmetro ‘r’, significa que será feita a verificação somente de leitura.
51. if fid<0
52. disp('Nao ha dados no arquivo') %Se não existir o arquivo a função fopen retorna um
número negativo, então é enviada uma mensagem que o arquivo não existe e não pode ser
aberto por isso.
53. else
54. dadosinf %Caso ele exista então o arquivo dadosinf.m é executado.
55. solucao %O arquivo solução é executado
56. clc
57. type dadostxt.txt%O conteúdo do arquivo dadostxt.txt é visualizado.
58. pause
59. end
60. fclose(fid);%o fluxo é fechado
61. case 5 %Salva os dados no arquivo dadostxt.txt
62.
63. if or(exist('a'),exist('b'))==0
64. msgbox('Declarar variavel','Aviso')
65. aux=1;
66. else
67. Solucao %o arquivo solucao.m é aberto
68. Arquivo %o arquivo arquivo.m é aberto
69. end
70.
71. case 6
72. aux1='sair';
73. case 7
74. abre
75. otherwise
76.
77. clc
78. disp('Erro!!!!')
79. pause
80. for i=0:10
81. fprintf('Vou desligar %d\n',10-i)
82. end
83. disp('Sair')
84.
85. end
86. clc
87. end
2.
3. arqfile=input('Entre com o nome do arquivo:','s');
4. caminho=sprintf('C:/matlabR12/work/%s',arqfile);
5. fid3=fopen(caminho,'r');
6. if fid3>=0
7. g=fscanf(fid3,'%f')
8. fprintf('Dados do arquivo < %s >',arqfile);
9. pause
10. fclose(fid3)
11. else
12. msgbox('Nao existe o arquivo','Aviso')
13. end
Arquivo dadosinf.m:
9.Conclusão
Finalizamos esta apostila com o sentimento de ter colocado o conteúdo que achamos
ser essencial para um curso introdutório. Como as turmas são sempre muito heterogêneas é
bastante complicado atender as especificidades. É notória a necessidade de um curso
avançado para este fim. Se o conteúdo aqui apresentado tiver sido assimilado pelo leitor, e
ele não deixá-lo cair no esquecimento, terá grandes chances de sucesso no uso deste
software maravilhoso.
O leitor facilmente poderá se tornar uma autodidata e pode aprofundar-se cada vez
mais, explorando os comandos e as funções aplicadas na sua área de especialização. Por
isso aproveito essa oportunidade para colocar a disposição as formas de contado, pelas
quais podem ser enviar dúvidas, críticas e sugestões. Todas serão muito bem vindas e
reconhecidas.
As formas mais eficientes são através do endereço eletrônico: paulo.buchner@ufv.br
ou pelo telefone +55(31) 3899 4097.