Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Apostila de MATLAB, Notas de estudo de Engenharia Elétrica

Uma apostila sobre o uso do software de cálculo numérico matlab. Apostila aborda tópicos como instalação, ambiente de trabalho, manipulação de variáveis e matrizes, gráficos e controle de fluxo em programas. Além disso, inclui exemplos e exercícios práticos para ilustrar os conceitos apresentados.

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 17/12/2006

hare-kumaichi-9
hare-kumaichi-9 🇧🇷

3.8

(12)

13 documentos

1 / 22

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Apostila de MATLAB
Luis Marcelo de Mattos Zeri
INPE
dezembro/2001
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16

Pré-visualização parcial do texto

Baixe Apostila de MATLAB e outras Notas de estudo em PDF para Engenharia Elétrica, somente na Docsity!

Apostila de MATLAB

Luis Marcelo de Mattos Zeri

INPE

dezembro/

Apresentação

No documento final do I-EPGMET (Encontro dos Alunos de Pós-Graduação em Meteorologia), realizado em 2000, expressa-se claramente que os alunos gostariam de ter cursos introdutórios dos principais softwares e linguagens de programação utilizados pela comunidade de Meteorologia do INPE. Desde então, essa demanda permaneceu presente, mas adormecida. Recentemente, em setembro, com a retomada das discussões sobre a necessidade de cursos, propôs-se a elaboração de apostilas simples, básicas, voltadas para o usuário que nada ou muito pouco conhece do software ou da linguagem de programação. Dessa proposta nasceu o Projeto Apostila.

O Projeto Apostila é composto de 5 grupos. Cada grupo foi responsável pela elaboração de uma apostila sobre um software ou uma linguagem de programação. Os grupos são: Rosane Chaves e Daniel Andres (Grads); Rita Andreoli e João Carlos Carvalho (Fortran); Luis Marcelo de Mattos Zeri (Matlab); Pablo Fernandez e Emanuel Giarolla (Latex); e Hélio Camargo e Marcos Oyama (Unix). Os grupos, durante 2 meses, trabalharam intensamente (sem se descuidar das suas dissertações e teses) para produzir as apostilas. A apostila que você está recebendo é fruto do esforço de um dos grupos.

Gostaríamos de agradecer a todos os colegas que revisaram a versão "0" das apostilas: Alexandra Amaro de Lima, Antônio Marcos Mendonça, Edna Sousa, Elizabeth Reuters, Everson dal Piva, José Francisco de Oliveira Júnior, Marcos Yoshida, Maurício Bolzan, Patrícia Moreno Simões, Paulo Marcelo Tasinaffo, Raimundo Moura, Rodrigo de Souza e Wantuir Aparecido de Freitas. As sugestões, críticas e os comentários apresentados foram de grande valia. Muito obrigado!

Gostaríamos, também, de agradecer a Anísio Moliterno por disponibilizar a área pública da fractal para os arquivos de exemplos das apostilas.

As apostilas não têm o objetivo de competir com os cursos que são oferecidos pelo CPTEC ou INPE, mas complementar. A idéia é que o usuário, após estudar a apostila, possa caminhar sozinho, consultando manuais ou os colegas; ou seja, torne-se independente. A apostila é uma ponte, não o fim. Recomenda-se aos leitores da apostila que façam os cursos oferecidos pelo CPTEC ou INPE: sempre temos algo a aprender! Além disso, no futuro, as apostilas podem servir de base para cursos ministrados por alunos-instrutores.

Espera-se que, no futuro, outros Projetos Apostila sejam realizados, melhorando e atualizando as apostilas existentes. Além disso, outras apostilas (p.ex. Fortran 90), poderão ser elaboradas.

Boa leitura!

S umário

    1. INTRODUÇÃO ......................................................................................
    1. INICIANDO O MATLAB ..........................................................................
    1. DEFINIÇÃO DE VARIÁVEIS ........................................................................
    1. V ETORES E M ATRIZES ............................................................................
    • 4.1 Vetores ......................................................................................
    • 4.2 Matrizes .....................................................................................
    • 4.3 Importando dados .......................................................................
    • 4.4 Operações matemáticas com matrizes ............................................
    1. G RÁFICOS
    1. ESCREVENDO PROGRAMAS NO MATLAB
    • 6.1 Controle de Fluxo num Programa
    • 6.2 Criação de funções pelo usuário
    1. A JUDA ON LINE NO MATLAB E REFERÊNCIAS

1. Introdução

O MATLAB é tanto uma linguagem de programação quanto um ambiente de computação técnica que possibilita a análise e visualização de dados, cálculos matemáticos e desenvolvimento de algoritmos, entre outras aplicações. Sua primeira versão foi escrita no final da década de 70 nas Universidades do Novo México e Stanford visando fornecer suporte a cursos de teoria matricial, álgebra linear e análise numérica.

2. Iniciando o MATLAB

O espaço de trabalho do MATLAB é iniciado ao se digitar no prompt do terminal o comando matlab. Feito isso é iniciado o ambiente de trabalho. Nesse ambiente é possível usar comandos de gerenciamento de arquivos, como delete arquivo e edit arquivo , e comandos de movimentação entre diretórios, comuns aos usuários de DOS e shell (UNIX), como dir , ls e cd diretório. Para sair do ambiente basta digitar exit ou quit.

3. Definição de variáveis

No MATLAB é possível definir variáveis que serão usadas na sessão de trabalho, como no exemplo abaixo:

» a= a= 10

Pressionando a tecla ENTER, o MATLAB confirma na tela o valor inserido a menos que seja colocado um sinal de ponto e vírgula (;) após o fim da linha:

» b=20; »

Essa opção é interessante para a definição de variáveis extensas, evitando que todos os seus valores sejam exibidos na tela.

Uma variável complexa é definida especificando-se suas partes real e a imaginária:

»c=1 + 2i c = 1.0000 + 2.0000i »

Definidas as variáveis é possível então efetuar operações matemáticas com elas. As operações básicas são listadas abaixo

Operação Símbolo adição, a+b + subtração, a-b - multiplicação, a·b * Divisão, a÷b / potenciação ^

e alguns exemplos são dados a seguir:

4. Vetores e Matrizes

4.1 Vetores

Um vetor no MATLAB é uma matriz linha (vetor linha) ou uma matriz coluna (vetor coluna). Um vetor linha pode ser definido separando os valores entre colchetes por espaços ou vírgulas. A separação dos valores por ; produz um vetor coluna.

»pares=[2 4 6 8 10]; »primos=[2; 3; 5; 7; 11]; »

Pode-se então invocar essas variáveis a qualquer momento:

» pares pares = 2 4 6 8 10

Os valores de um vetor linha ou coluna podem ser acessados usando-se índices que identificam a posição do elemento no vetor, como nos exemplos abaixo:

» pares(3) ans = 6 »x=pares(4) x= 8 »ans+x ans= 14

Intervalos de valores podem ser selecionados dentro de um vetor. No exemplo abaixo é definido um novo vetor contendo apenas os elementos da segunda à quinta linha do vetor primos :

» impares=primos(2:5) impares= 3 5 7 11

O comando whos agora produz o seguinte resultado:

» whos Name Size Bytes Class

ans 1x1 8 double array impares 4x1 32 double array pares 1x5 40 double array primos 5x1 40 double array x 1x1 8 double array

Grand total is 16 elements using 128 bytes »clear all

»whos »

Acima vemos as dimensões dos vetores definidos e também que o vetor impares tem apenas 4 linhas devido ao intervalo especificado na sua definição. Após a visualização todas as variáveis foram apagadas com o comando clear all , o que resultou numa saída vazia para comando whos digitado em seguida.

Os vetores definidos acima tiveram seus elementos definidos um-a-um. No entanto vetores podem ser construídos especificando-se valores iniciais, finais e incrementos:

» a=1:5, b=1:2: a= 1 2 3 4 5 b= 1 3 5 7 9 »

(No exemplo acima a definição dos dois vetores foi encadeada numa única linha, separando as duas definições por vírgula. Diferentes comandos podem ser definidos de uma só vez, desde que separados por vírgula ou ponto-e-vírgula. O espaço entre a vírgula e o próximo comando é opcional_._ ) Foi definido um vetor a variando de 1 a 5 (de um em um) e outro indo de 1 a 9, mas de dois em dois.

O comando linspace(i,f,n) fornece um vetor linha de n elementos entres os valores i e f. O vetor a do exemplo anterior pode ser redefinido da seguinte forma:

» a=linspace(1,5,5) a= 1 2 3 4 5 »

O comando linspace sem o último argumento fornece um vetor de 100 elementos como padrão. O tamanho de um vetor pode ser verificado com o comando length , como no exemplo abaixo:

»b=linspace(1,5); »length(b) ans= 100 »

De maneira similar o comando logspace(i,j,n) fornece n elementos entre 10 i^ e 10 j. A ausência do terceiro argumento, n , fornece 50 elementos entre 10 i^ e 10 j.

Um vetor pode ser transposto usando-se o operador de transposição ' , o apóstrofo. Para vetores

complexos é realizada a transposição do complexo conjugado. Para a operação apenas de

transposição usa-se a transposição pontuada, ou seja, o operador de transposição ' precedido de um

ponto. Abaixo é mostrada a transposição do vetor a definido anteriormente:

» a=a.' a = 1

No exemplo acima foi atribuída à coluna 3 a matriz nula, resultando numa nova matriz m. É possível também montar grandes matrizes através de outras pequenas, como:

» a=[1 1;1 1];b=[2 2;2 2];c=[a b;b a] c = 1 1 2 2 1 1 2 2 2 2 1 1 2 2 1 1

4.3 Importando dados

Dados importados para o espaço de trabalho do MATLAB são tratados como matrizes. O comando usado para carregar um arquivo contendo dados é o load nome_do_arquivo****. Esse comando é utilizado para dados no formato ASCII. Arquivos contendo dados binários não serão tratados nessa apostila. Para maiores informações consulte a ajuda do MATLAB sobre o comando fread (digite help fread ). Abaixo é visto um exemplo.

»cd \dados »dir

. .. temp.dat »load temp.dat »whos Name Size Bytes Class temp 3600x1 28800 double array

Grand total is 3600 elements using 28800 bytes »temp(1:10) ans =

»

No exemplo acima, após ter entrado e visualizado o conteúdo da pasta dados, o arquivo temp.dat é carregado. O comando whos mostra as dimensões da variável associada ao arquivo: 3600 linhas e 1 coluna. Após isso as dez primeiras linhas do arquivo carregado são exibidas. Note que a variável resultante do carregamento do arquivo possui o mesmo nome deste, exceto pela extensão. O gráfico da variável temp pode então ser feito.

»plot(temp(1:1000))

O comando plot utilizado será descrito em detalhes em outra seção. Destaca-se aqui que apenas as 1000 primeiras linhas da variável foram impressas no gráfico.

4.4 Operações matemáticas com matrizes^1

Operações matemáticas simples (adição, subtração, divisão e multiplicação) envolvendo escalares e matrizes seguem a mesma interpretação natural.

» m=[8 1 6;3 5 7;4 9 2]; » 3*m ans = 24 3 18 9 15 21 12 27 6

»m+ ans = 108 101 106 103 105 107 104 109 102 »

Nas operações entre matrizes devem ser respeitadas as regras usuais da matemática quanto ao número de linhas e colunas que duas matrizes devem ter para serem somadas, multiplicadas, etc. No entanto existem operações especiais. Sendo A=[a 1 a 2 ... a (^) n ] e B=[b 1 b2 ... bn ] duas matrizes, então:

  • A./B = [a 1 /b 1 a 2 /b 2 ... a (^) n /bn ];
  • A.*B = [a 1 ·b1 a 2 ·b2 ... a (^) n ·bn ];
  • A.^B = [a 1 ^b 1 a 2 ^b 2 ... a (^) n ^b (^) n ];

A multiplicação de um vetor de m linhas e 1 coluna ( m X 1) por um de 1 linha e m colunas ( 1 X m ) resulta numa matriz de m linhas e m colunas. Já a operação de multiplicação pontuada entre dois vetores de mesma dimensão, A m X 1 X B m X 1 , por exemplo, produz um terceiro vetor de mesma dimensão cujos elementos são resultado da multiplicação elemento-a-elemento entre os dois vetores iniciais.

(^1) Para evitar redundâncias, vetores (linha ou coluna) serão tratados como matrizes.

19

5. Gráficos

O comando utilizado para fazer gráficos bidimensionais no MATLAB é o plot. Esse comando tem a seguinte forma: plot(x1, y1, S1, x2, y2, S2, ...) , onde (xn,yn) são conjuntos de dados e Sn são seqüências de caracteres que especificam cor, símbolos utilizados e estilos de linha.

» x=linspace(0,2*pi,30); y=sin(x); plot(x,y)

Pode-se traçar dois gráficos simultaneamente:

» z=cos(x); plot(x,y,x,z)

Note que o gráfico anterior foi apagado e substituído pelo novo. Abaixo será mostrado um comando a respeito disso. A seqüência de caracteres que contém a formatação da linha, dos símbolos e das cores usadas nos gráficos pode conter os seguintes símbolos:

Símbolo Cor Símbolo Marcador Símbolo Tipo de Linha b azul. ponto - linha contínua g verde o círculo : linha pontilhada r vermelho^ x x^ -.^ traços e pontos c ciano^ + +^ --^ linha tracejada m magenta^ * estrela y amarelo^ s quadrado k black^ d losango w branco v triângulo p/ baixo ^ triângulo p/ cima < triângulo p/ esquerda

triângulo p/ direita p pentagrama h hexagrama

Abaixo vê-se um exemplo de utilização dos caracteres

» plot(x,y,'b:p',x,z,'r+-') , grid on, legend('sen(x)','cos(x)')

No gráfico acima foram utilizadas duas outras opções: grid on e legend. O primeiro adiciona linhas de grade ao gráfico e o segundo cria uma caixa de legenda no canto superior direito do gráfico. A legenda pode ser movida com o mouse após o gráfico ser desenhado.

Os valores máximos e mínimos dos eixos são controlados com o comando axis ([ xmin xmax ymin ymax]). No gráfico acima esse comando teria o seguinte efeito:

» axis([1 6.5 -1 -0.5]);

Um novo comando de gráfico, por padrão, tem a sua saída direcionada para a figura já aberta, limpando-a (apagando os gráficos já desenhados) e desenhando o novo. Para que os gráficos anteriores sejam mantidos faz-se uso do comando hold on.

» hold on, plot(x,sin(x-pi/2),'kd-'),legend('sen(x)','cos(x)','sen(x-pi/2)') » ylabel('Variáveis Y, Z e sin(x-pi/2)')

No gráfico acima os comandos legend e ylabel foram re-aplicados para que fizessem referência à nova curva.

Para que a figura atual seja mantida e a saída dos comandos gráficos seja direcionada para outra janela, utiliza-se o comando figure. Tendo várias figuras abertas, a saída dos comandos gráficos é especificada fazendo-se: figure(n) , onde n é o número da figura para a qual os comandos digitados devem ser direcionados. No final desse capítulo serão vistos exemplos da utilização desse comando.

É possível que vários gráficos sejam desenhados na mesma janela, mas com conjunto de eixos separados, através do comando subplot(abc). O parâmetro a é o número de linhas desejado; b especifica o número de colunas e c é o índice que indica a posição nessa "matriz" para onde a saída do gráfico será direcionada, a contar da esquerda para a direita e de cima para baixo.

» figure,subplot(311),plot(x,y),grid on,title('Seno') » subplot(312),plot(x,z),grid on,title('Co-seno') » subplot(313),plot(x,sin(x-pi/2)),grid on,title('sen(x-pi/2)')

Gráficos com outras escalas podem ser criados através dos comandos loglog , semilogx , semilogy e plotyy. Existem também outros tipos de gráficos no MATLAB. São eles: area , pie , pareto , polar , bar , stairs , hist , stem , errorbar , compass , feather , rose , fill e plotmatrix. Para maiores informações sobre cada um deles e também sobre gráficos com outras escalas consulte a ajuda via comando help : help hist , help pie , help loglog , help semilogx , etc. Todos esses gráficos são bidimensionais, mas o MATLAB também faz gráficos tridimensionais. Para isso consulte a ajuda referente aos comandos plot3 , contour , pcolor e colormap entre outros.

Feito um gráfico pode-se salvar a figura em diversos formatos ou imprimi-la. O comando usado para essa finalidade é o print. Digitando-se help print vê-se todos os formatos e opções disponíveis, como eps, epsc, tiff, jpg, etc. Vejamos um exemplo:

» figure(1), print –depsc curvas1.epsc » figure(2), print –dtiff curvas2.tiff

Na primeira linha de comandos acima o foco dos comandos é direcionado para a figura 1 através do comando figure(1). Após isso ela é salva no formato epsc (eps Color) e –d é o operador que deve preceder a abreviação para o formato escolhido. Logo após a opção de formato é especificado o nome do arquivo a ser criado. Para a segunda figura o formato escolhido foi o tiff.

6. Escrevendo programas no MATLAB

Seqüências de comandos podem ser armazenadas em arquivos e executadas no espaço de trabalho do MATLAB. Para isso basta que o arquivo seja salvo com a extensão "m". Os comandos do exemplo acima poderiam ser guardados num arquivo:

x=linspace(0,2*pi,30); y=sin(x); z=cos(x);

plot(x,y,'b:p',x,z,'r+-')

grid on legend('sen(x)','cos(x)') axis tight title('Curvas do seno e co-seno')

O comando input pode ser configurado para receber uma seqüência de caracteres como entrada. Essa seqüência pode ser, por exemplo, o nome do arquivo a ser carregado e processado. Veja as linhas abaixo que executam essa tarefa:

arquivo=input('Digite o nome do arquivo: ','s'); load(arquivo)

A opção 's' faz com que a entrada seja interpretada como uma seqüência de caracteres. O comando load deve ser usado nessa forma ( load(nome_do_arquivo) ) quando o seu argumento for uma seqüência de caracteres. Veja no exemplo:

arquivo=input('Digite o nome do arquivo: ','s'); load(arquivo) eval(['T=' arquivo(1:length(arquivo)-4) ';'])

Para o caso do nome do arquivo ser temp.dat a variável arquivo conteria 8 caracteres, incluindo aí o ponto que separa o nome da extensão. Após o carregamento do arquivo uma variável é criada pelo comando load com o mesmo nome do arquivo menos a extensão dele. Nesse caso essa variável seria chamada temp. Até esse ponto o programa em questão "não sabe" que existe essa variável temp , é preciso defini-la no programa. A função eval permite que o nome do arquivo contido na variável chamada arquivo , menos a sua extensão, seja usado nessa definição.

Os colchetes foram usados para concatenar horizontalmente várias seqüências de caracteres. A primeira delas é T= , a segunda é arquivo(1: length(arquivo)-4) , que tem como resultado temp e a terceira é ;. Com esse comando foi dada a seguinte ordem ao MATLAB: "crie uma variável chamada T que seja igual a variável cujo nome se encontra na variável arquivo menos os quatro últimos caracteres, de maneira a evitar a extensão e o ponto, ou seja, faça isso: T=temp; ". Verificamos o resultado disso na listagem abaixo:

» whos Name Size Bytes Class

T 3600x1 28800 double array arquivo 1x8 16 char array temp 3600x1 28800 double array

Grand total is 7208 elements using 57616 bytes »

Sem o uso da função eval , ou seja, se fizéssemos apenas T= arquivo(1: length(arquivo)-4); criaríamos uma nova variável chamada T, mas que conteria apenas um nome, uma seqüência de caracteres, que no caso seria a palavra temp.

Como o conteúdo do arquivo agora foi associado a uma nova variável, a variável associada ao nome do arquivo ( temp ) pode ser apagada, para liberar espaço na memória. Para isso usa-se novamente o comando eval , adicionando-se uma linha ao programa anterior:

arquivo=input('Digite o nome do arquivo: ','s'); load(arquivo) eval(['T=' arquivo(1: length(arquivo)-4) ';']) eval(['clear ' arquivo(1: length(arquivo)-4)])

» whos Name Size Bytes Class

T 3600x1 28800 double array arquivo 1x8 16 char array

Grand total is 3608 elements using 28816 bytes »

Note que a variável arquivo ainda permanece no espaço de trabalho. Para apagá-la usa-se apenas o comando clear arquivo.

O programa acima poderia então continuar com comandos matemáticos e/ou gráficos.

arquivo=input('Digite o nome do arquivo: ','s'); load(arquivo) eval(['T=' arquivo(1: length(arquivo)-4) ';']) eval(['clear ' arquivo(1: length(arquivo)-4)]) media=mean(T); plot(T-media),grid on,zoom on,xlabel('Tempo (s)'),ylabel(['T- ' num2str(media)]) title('Desvio da média para temperatura') disp(media)

O último comando do programa acima tem quase o mesmo efeito da ausência do ponto-e-vírgula na definição de uma variável: ele exibe na tela o valor da variável mas não exibe o seu nome.

»teste Digite o nome do arquivo: temp.dat

»

Na definição do título do eixo y foi usado um novo comando, o num2str. Esse comando converte um número em uma seqüência de caracteres que pode ser usada num comando de título, por exemplo. Os colchetes foram novamente usados para concatenar as seqüências ' T ' e a resultante do comando num2str. Pode-se também fazer o contrário, converter uma seqüência de caracteres em um número, usando-se para isso o comando str2num. Abaixo vê-se o resultado do comando num2str no título do eixo y.