UNIVERSIDADE FEDERAL DE ITAJUBÁ APOSTILA DESTINADA AO CURSO DE EXTENSÃO FUNDAMENTOS DE MATLAB Autores: Francisco Galvão Junior Marcel Fernando da Costa Parentoni Itajubá, Maio de 2007
Índice 1 O Matlab...3 2 Ambiente Matlab...3 2.1 Workspace...3 2.2 Abertura de arquivos...4 3 Desenvolvimento de Programas (*.m)...5 3.1 Ambiente de Programação:...5 3.1.1 Programação do tipo Script (Roteiro)...5 3.1.2 Programação do tipo Function (Função)...6 3.1.3 Exemplos de Aplicação...7 3.2 Vetores e Matrizes...7 3.2.1 Acesso aos Elementos e Determinação da dimensão de Matrizes...9 3.2.2 Exemplo de Programação Utilizando Matrizes...9 3.3 Leitura e Gravação de Arquivos...11 3.3.1 Leitura de Arquivos...11 3.3.2 Gravação de Arquivos...12 3.3.3 Aplicação...13 4 Simulink...14 4.1 Ambiente do Simulink e Manipulação de Blocos...14 4.1.1 Construção de um modelo no Simulink...15 4.1.2 Programação por diagrama de blocos no Simulink:...16 4.2 Utilização do SimPowerSystem...17 4.2.1 Montando Circuitos Elétricos...17 4.2.2 Modelando os circuitos elétricos...18 4.2.3 Interação Matlab-Simulink...19 5 Introdução ao GUIDE...20 6 Visão Geral de Toolboxes do Matlab...24 6.1 Symbolic...24 6.2 Data Acquisistion...25 6.3 Signal Processing...25 6.4 Statistics...26
1 O Matlab O Matlab (Matrix Laboratory) é um software interativo de alta performance voltado para o cálculo numérico e científico. Ele integra análise numérica, cálculo com matrizes, processamento de sinais e construção de gráficos em ambiente fácil de usar onde problemas e soluções podem ser expressos como eles são escritos na matemática ou na forma de uma linguagem de programação. O Matlab é uma ferramenta profissional utilizada mundialmente, principalmente por engenheiros. Sua utilização em larga escala se deve à facilidade e praticidade de seu uso, bem como a aplicabilidade e flexibilidade no auxílio à solução de problemas. O objetivo desta apostila não é apenas introduzir os principais conceitos acerca do Matlab, mas principalmente possibilitar ao aluno a independência na utilização Matlab, de tal maneira que se torne capaz de utilizá-lo como ferramenta para solução dos mais diversos problemas existentes na engenharia. 2 Ambiente Matlab A figura abaixo retrata o ambiente de utilização do Matlab. Pode-se visualizar ao mesmo tempo a janela de comando, o workspace, o diretório atual, e o histórico de comandos digitados. Criar Programa Abrir Simulink 2.1 Workspace O workspace é o local onde todas as variáveis criadas ficam armazenadas, como pode ser observado pela figura a seguir.
Variáveis Ao se observar a figura anterior, pode-se notar que os procedimentos executados na janela de comando (Command Window) são armazenados temporariamente no workspace na forma de variáveis, de modo que ao fechar o Matlab ou ao digitar o comando clear todos os dados serão perdidos. 2.2 Abertura de arquivos Arquivos de Programa (*.m) Seleção de Diretórios Simulink (*.mdl) Arquivos de Dados (*.mat) Através da análise da figura anterior, pode-se observar que os arquivos disponíveis correspondem àqueles existentes no diretório selecionado.
3 Desenvolvimento de Programas (*.m) O Matlab é um interpretador de programas, ou seja, os programas desenvolvidos somente podem ser executados em seu ambiente. O Matlab é incapaz de converter o código fonte em linguagem de máquina. Em comparação a um compilador, um interpretador tem por vantagens a facilidade e praticidade de implementação do código, porém tem por desvantagens a lentidão de execução e a incapacidade de criar programas executáveis. Para suprir estas desvantagens, o Matlab possui um toolbox denomidado Matlab Compiler, através do qual é possível compilar programas apenas do tipo Function. Inicialmente, para o desenvolvimento de uma rotina de programação é necessário conhecer o ambiente de programação e os comando básicos associados. 3.1 Ambiente de Programação: Abrindo-se um novo arquivo é mostrada a seguinte janela: Abrir Novo Arquivo Mostrar Funções Rodar Programa A programação via Matlab pode ser de dois tipos, Script e Function, cada qual com suas particularidades e funcionalidades. 3.1.1 Programação do tipo Script (Roteiro) Um programa do tipo Script é um arquivo (M-File) que contém uma seqüência de comandos do Matlab. Não necessitam de declarações ou delimitadores de começo e fim. É o tipo de programação mais simples. São muito úteis para automatização de comandos, como códigos que necessitam ser executados repetidamente. Scripts são capazes de utilizar
dados existentes no workspace, bem como criar novos dados. Qualquer variável utilizada é gravada no workspace, possibilitando utilizações futuras. Um exemplo prático, no qual o resultado é a soma quadrática de duas variáveis, é mostrado a seguir: ********************** x=3; y=5; Resultado=x^2+y^2 ********************** Ao se executar o programa, o Matlab exibe a seguinte resposta na janela de comando: Resultado = 34 3.1.2 Programação do tipo Function (Função) As variáveis criadas por este tipo de programa são locais e não ficam gravadas no workspace após a execução do programa. Esta é uma vantagem no que diz respeito à ocupação de memória. Através deste tipo de programação o usuário é capaz de criar qualquer função desejada, fato que auxilia na programação de códigos extensos. O mesmo exemplo mostrado no item 3.1.1 é realizado através da criação de uma função denominada soma_quad. Inicialmente é necessária a programação de um M-File com nome idêntico ao da função a ser criada, como mostrado a seguir: ************************ function soma_quad(x,y) x^2+y^2 ************************ A função é acessada através do seguinte comando: >> Reultado=soma_quad(3,5) O Matlab entrega ao usuário a seguinte resposta: Resultado = 34
3.1.3 Exemplos de Aplicação Neste item da apostila serão apresentados alguns exemplos de rotinas de programação, dando ênfase à manipulação de vetores e matrizes, bem como a implementação de lógicas utilizado os seguintes comandos: for, if e outros. Utilização de for ************************ clear all n=input( Digite o número de elementos: ) for x=1:1:n y(x)=x^2; end y ************************ Utilização de if ************************ clear all n=input( Digite o número de elementos: ) for x=1:1:n y(x)=x^2; if y(x)>50 disp('y maior que 50') else disp('y menor que 50') end end y ************************ 3.2 Vetores e Matrizes A próxima figura mostra como criar um vetor ou uma matriz, utilizando um arquivo (*.m), salvado-os em suas respectivas variáveis.
Ao se rodar o programa, as variáveis V, M e M1 estarão salvas no Workspace, conforme mostrado a seguir: Observações: Para não mostrar no workspace as variáveis criadas, coloque ; ao terminar de criar a mesma; Para apagar as variáveis existentes no workspace digite clear no command window.
3.2.1 Acesso aos Elementos e Determinação da dimensão de Matrizes Uma vez apresentada a maneira de se criar vetores e matrizes, é de fundamental importância determinar a sua dimensão e acessar um determinado elemento de interesse. Deste modo, a próxima figura apresenta os respectivos comandos para tais finalidades. Acesso ao elemento Comando 3.2.2 Exemplo de Programação Utilizando Matrizes - Aplicação da Regra de Cramer (Solução de Sistemas) Neste exemplo, serão abordados alguns cálculos matemáticos utilizando matrizes e vetores. Com o objetivo de apresentar uma aplicação prática, a metodologia de Crammer, será utilizada para determinar as tensões V1 e V2 do seguinte circuito, o qual foi resolvido pelo método nodal.
V1 V2 2 ohm 6 ohm 10 ohm 8 V DC DC 1 V 4 ohm 3 ohm Verificar os seguintes resultados salvos no workspace: A = 0.9167-0.1667-0.1667 0.6000 b = 4.0000-0.1000 v1 = 4.5638 v2 = 1.1011
- Cálculo da Potencia Média: Sinais Contínuos Definição do Incremento Somatório Ponto a ponto dos vetores 3.3 Leitura e Gravação de Arquivos O Matlab possibilita a leitura e gravação de arquivos em diversos formatos, como por exemplo, texto, separado por vírgulas, separado por delimitadores, planilha do Excel, entre outros. Os itens subseqüentes demonstram aplicações dos principais comandos de leitura e gravação. 3.3.1 Leitura de Arquivos - Leitura de arquivos *.mat load( nome_do_arquivo ) % Lê todos os objetos do arquivo load( nome_do_arquivo, objeto1, objeto2,...) % Lê apenas os objetos especificados
- Leitura de arquivos *.txt textread('nome_do_arquivo.txt') % Lê arquivos *.txt dlmread('nome_do_arquivo.txt', delimitador) % Lê arquivos *.txt utilizando um delimitador csvread('nome_do_arquivo.txt') % Lê arquivos *.txt utilizando vírgulas como delimitadores Dica: Procurar no Help do Matlab as variações de cada comando, observando a flexibilidade de cada um. Exemplo: Crie um arquivo texto da seguinte maneira: 1 2 3 4 5 6 7 8 Salve o arquivo com o nome de arq1.txt Leia o arquivo através do Matlab, utilizando cada um dos comandos descritos acima. - Leitura de arquivos *.xls (planilhas do Excel) xlsread('nome_do_arquivo.xls') Dica: Procurar no Help do Matlab as variações deste comando. 3.3.2 Gravação de Arquivos - Gravação de arquivos *.mat save( nome_do_arquivo ) % Grava todos os objetos em um arquivo save( nome_do_arquivo, objeto1, objeto2,...) % Grava apenas os objetos especificados Dica: Procurar no Help do Matlab a funcionalidade do comando saveas
- Gravação de arquivos *.txt dlmwrite('nome_do_arquivo.txt', objeto, delimitador) delimitador % Grava arquivos *.txt utilizando um csvwrite('nome_do_arquivo.txt', objeto) delimitadores % Grava arquivos *.txt utilizando vírgulas como Dica: Procurar no Help do Matlab as variações de cada comando, observando a flexibilidade de cada um. Exemplo: Crie a seguinte matriz no Matlab: M= [10 20 30; 40 50 60]; Grave o objeto M em arquivos texto, através do Matlab, utilizando os comandos descritos acima. - Gravação de arquivos *.xls (planilhas do Excel) xlswrite('nome_do_arquivo.xls', objeto) Dica: Procurar no Help do Matlab as variações deste comando. 3.3.3 Aplicação Crie um programa (*.m) em Matlab que leia uma tabela de valores de tensão e corrente e posteriormente calcule, dependendo da vontade do usuário, ou a potência ou a impedância. Por fim, grave outro arquivo texto contendo uma tabela com os resultados desejados pelo usuário.
4 Simulink O aplicativo Simulink contém todos os blocos que o usuário precisa para construir um modelo. Os blocos contidos nas bibliotecas do Simulink permitem a realização de operações matemáticas, simulação de chaves e conectores de circuitos elétricos, simulação de elementos de controle e etc. Devido à vasta quantidade de bibliotecas presentes no Simulink, este curso irá abordar, além da própria Simulink, a biblioteca SimPowerSystems. A escolha desta biblioteca está relacionada a sua maior aplicabilidade para estudantes de Engenharia Elétrica, os quais irão certamente utilizar as simulações para resolver problemas de engenharia. 4.1 Ambiente do Simulink e Manipulação de Blocos Para iniciar o aplicativo digite Simulink na área de trabalho, ou clique no ícone comando irá acionar um conjunto de bibliotecas, da seguinte forma:. Este Por exemplo, abra a biblioteca denominada Simulink e posteriormente abra a subbiblioteca Math Operations. Confira estes passos com as figuras abaixo. Clique duas vezes Observe rapidamente todas as sub-bibliotecas dentro da biblioteca Simulink.
4.1.1 Construção de um modelo no Simulink Crie um novo modelo, de acordo com a figura abaixo: Clique aqui para iniciar a construção de um novo modelo. Construa o seguinte modelo e apresente os resultados: 1 1 1 1 1 saida = sen(2π60) + sen(2π180) + sen(2π300) + sen(2π420) + sen(2π540) + sen(2π 660) 3 5 7 9 11 Para executar uma simulação, primeiramente deve-se ajustar os parâmetros de simulação no menu Simulation, item Simulation Parameters.
Após estes ajustes deve-se executar a simulação, ou pelo menu Simulation, item Start, ou pelo atalho mostrado abaixo: 4.1.2 Programação por diagrama de blocos no Simulink: A biblioteca Simulink permite que se utilize a técnica de programação por diagramas de blocos. Como exemplo, abaixo está mostrada a equação e a implementação de um bloco para o cálculo do valor eficaz de um sinal. VRMS 1 T = v T 0 2
Para implementar esta técnica, pode-se criar também, um bloco que calcule potência ativa, potência reativa, potência aparente e fator de potência, como mostram as expressões abaixo: 1 T P= v i dt T 0 v1 i1+ v2 i2 + + vn i P = n n v i 1 90 1 v i 2 90 2 v + + + i n 90 Q = n n S = V I = P + Q RMS RMS 2 2 FP = P S De acordo com as expressões matemáticas pode-se implementar os blocos para obter os resultados desejados. Atenção: Estes dois blocos criados serão utilizados posteriormente, quando da medição das grandezas elétricas, referentes ao circuito a ser modelado no item seguinte. Estes resultados poderão ser comparados com os dos blocos já existentes no Simulink. 4.2 Utilização do SimPowerSystem 4.2.1 Montando Circuitos Elétricos Clique duas vezes Esta biblioteca disponibiliza ao usuário os elementos básicos para a construção de um modelo de circuito elétrico. Há também os blocos de medições de grandezas elétricas, os quais efetuam os cálculos de corrente, tensão, potência e etc. Para a visualização dos resultados das grandezas deve-se utilizar os Displays, e para visualizar as formas de onda a pode-se utilizar o Scope. O bloco To Workspace exporta os valores instantâneos das variáveis. Pode-se montar o seguinte modelo, como exemplo de aplicação:
4.2.2 Modelando os circuitos elétricos Implemente os seguintes valores: R = 0.05; L=0; C=inf; P=1000; QL=0; QC=0; Peak Amplitude = 100; Feito isto, disponha os medidores de tensão e corrente, de forma a obter as formas de onda destas grandezas. Medidores: Acesso aos medidores: Visualização dos resultados:
Implemente também no circuito, o bloco de cálculo dos valores eficazes de tensão e corrente, e o display que permite a visualização destes resultados. Bloco de cálculo do valor eficaz: Bloco de Display: Simule o sistema modelado e obtenha os resultados medidos. Compare os resultados obtidos pelos blocos implementados no item 4.1.2 com os dos blocos fornecido pelo próprio Simulink. 4.2.3 Interação Matlab-Simulink Para se montar um modelo com uma maior flexibilidade, pode-se lançar mão da manipulação de variáveis presentes no Workspace e aplicação do Bloco To workspace no circuito modelado, para tanto: Coloque variáveis nos parâmetros (R, L, C, P, QL, QC e Peak Amplitude) presentes no modelo; Crie um arquivo *.m definindo valores para as variáveis do modelo; Simule o modelo, através da utilização do comando sim no arquivo *.m; Obtenha a formas de onda da tensão e da corrente utilizando o comando plot, ainda no arquivo *.m. Esta interação entre Matlab e Simulink é de extrema importância, entre outros casos, para situações de modelagem mais complexas e simulações repetitivas.
5 Introdução ao GUIDE Esta ferramenta do Matlab tem por finalidade auxiliar o desenvolvimento de interfaces gráficas, de modo que a relação entre o programa desenvolvido e o respectivo usuário se torne amigável. A seguir, serão apresentados os procedimentos para criar uma interface, onde o usuário entra com os valores de algumas variáveis e posteriormente pode visualizar os resultados provenientes de uma determinada rotina de programação implementada. - Ambiente de Desenvolvimento: Acessórios - Para entrar com uma determinada variável: EDIT Identificação da variável
O bloco de Edit Text pode servir para entrada de uma variável, bem como para visualizar algum valor de interesse, por exemplo, um resultado de uma conta feita em um programa. Para isto, segue os seguintes comandos: Entrar com a variável digitada na interface: Comando: V=str2num(get(handles.variavel1,'string')) ; Converte uma string em um número Tag Mostrar um determinado valor no Edit Text: Comando: set(handles.valor,'string',x) Tag Variavel Para chamar a rotina de programação correspondente a interface em questão, pode-se utilizar o bloco push button, conforme apresentado no exemplo a seguir: A rotina de programação (*.m) correspondente é a seguinte:
Funções Chamando a Função Calcular: Assim, tem-se o seguinte programa teste:
Outra importante aplicação da interface gráfica consiste em controlar os parâmetros de um determinado circuito elétrico (modelado no simulink), bem como capturar e visualizar os resultados obtidos no mesmo. Exemplo de uma interface criada para o controle dos parâmetros de um circuito elétrico modelado no simulink.
6 Visão Geral de Toolboxes do Matlab 6.1 Symbolic Este toolbox possibilita ao usuário do Matlab realizar operações literais, ou seja, obter resultados através de expressões simbólicas. Ele é capaz de realizar operações de cálculo, como derivadas e integrais, operações de álgebra linear, simplificações, soluções de equações, operações aritméticas, conversões, transformadas, etc. Para exemplificar a utilização deste toolbox, pode-se lançar mão de um cálculo bem simples, de acordo com a rotina abaixo: ***************************************************************************************************************** clear clc syms x y=x^2 comp=y*x+2*y+sqrt(x)-y^3 derivada=diff(y) integral=int(y) derivada_comp=diff(comp) integral_comp=int(comp) ***************************************************************************************************************** Exercício: Faça o Jacobiano em relação às duas variáveis que determinam as expressões encontradas na seguinte matriz: 2 2 t + u 3t + 2u 3 M = 5t+ u 2t 3 2 5 6t + u u Sugestão: procure no Help informações sobre o comando jacob.
6.2 Data Acquisistion O Data Acquisition Toolbox permite ao usuário operar placas de aquisição de dados. Em outras palavras, controla os processos de conversão AD e DA. Uma aquisição deve seguir os seguintes passos: Identificação do Hardware o ai = analoginput('winsound'); Adição de canais o addchannel(ai,1:2); Configuração dos parâmetros de aquisição o set(ai,'samplerate',10000) o set(ai,'samplespertrigger',1000) Aquisição de dados o start(ai) o data = getdata(ai); o plot(data) 6.3 Signal Processing Este toolbox fornece ao usuário uma série de comandos que realizam vários tipos de técnicas de tratamento de sinais. Uma das mais comuns é a utilização de filtros. A título de exemplo, pode-se implementar um filtro digital IIR (Infinite Impulse Response) no Matlab da seguinte forma: ***************************************************************************************************************** t=linspace(0,0.1,1000); sinal=100*sin(2*pi*60*t)+10*sin(2*pi*1500*t); figure subplot(2,1,1) plot(t,sinal) fs=10000; fc=1000; [B,A]=butter(4,(fc/(fs/2)),'low'); saida=filter(b,a,sinal); subplot(2,1,2) plot(t,saida) ***************************************************************************************************************** Existe uma grande gama de opções de utilização deste toolbox. Dentre as opções encontradas pode-se destacar, além dos filtros, a aplicação de transformadas, regressões lineares, modulação e demodulação, codificação e decodificação, entre outras. Um assistente de muita utilidade que este toolbox possui, é o assistente de projeto de filtros, que pode ser acessado através do comando fdatool.
6.4 Statistics O Statistics Toolbox é uma ferramenta muito versátil e completa. Através dela é possível, por exemplo: Especificar funções para cada tipo de distribuição; Realizar plotagens estatísticas, como histogramas; Fazer regressões não-lineares; Testes de hipóteses; Modelos de Markov; Etc. Este toolbox permite a geração de números aleatório, por exemplo, pode-se digitar o comando rand na área de trabalho. Como exemplo, pode-se traçar um histograma de uma variável aleatória. A pequena rotina abaixo, realiza este procedimento: ***************************************************************************************************************** x1=rand(1,100000); figure hist(x1) ***************************************************************************************************************** O comando rand realiza sorteios seguindo uma distribuição uniforme, ou seja, não há nenhuma tendência quando da ocorrência do sorteio. Pode-se utilizar uma distribuição normal ao invés da uniforme, substituindo o comando rand pelo comando randn. Executando o programa novamente, pode-se perceber pelo histograma a formação de uma gaussiana, ou seja, o sorteio passa a seguir uma tendência pré-definida. Outra grande utilidade deste toolbox é a simulação Monte Carlo. Em termos simples, este tipo de simulação consiste na realização de um número elevado de sorteios. Teoricamente, se o número de sorteios for infinito, a probabilidade calculada será correta. Praticamente, pode-se elevar o número de sorteios até o limite de cada máquina. Crie uma simulação Monte Carlo que calcule a probabilidade de se obter coroa quando do lançamento de uma moeda. Considere que a moeda não é viciada, ou seja, utilize a distribuição uniforme. Aumente gradativamente o número de sorteios, até alcançar um erro desprezível, em relação à probabilidade teórica. Ainda, através deste toolbox, pode-se acessar alguns assistentes, por exemplo, utilizando o comando randtool. Este assistente permite a geração de números aleatórios de variadas formas.