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 Matlab, Notas de estudo de Engenharia Elétrica

Apostila usada no IFMG

Tipologia: Notas de estudo

2012

Compartilhado em 05/04/2012

pcarvalhoresende1
pcarvalhoresende1 🇧🇷

5

(1)

4 documentos

1 / 31

Toggle sidebar

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

Não perca as partes importantes!

bg1
Apostila de Matlab
Campus Formiga
Professor: Carlos Bernardes Rosa Junior
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f

Pré-visualização parcial do texto

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

Apostila de Matlab

Campus Formiga

Professor: Carlos Bernardes Rosa Junior

Índice

  • Introdução ............................................................................................................................................
    1. Uma breve apresentação do Matlab .............................................................................................
    1. Noções Elementares.....................................................................................................................
    • 2.1. Operadores aritméticos ........................................................................................................
    • 2.2. Operadores Relacionais........................................................................................................
    • 2.3. Operadores Lógicos .............................................................................................................
    • 2.4. Constantes e Variáveis .........................................................................................................
    • 2.4.1. Informações na área de trabalho ......................................................................................
    • 2.5. Algumas Observações Iniciais .............................................................................................
    1. Programando com o Matlab.........................................................................................................
    • 3.1. Arquivos de Comandos........................................................................................................
    • 3.2. Programação Básica...........................................................................................................
    • 3.2.1. Desvio Condicional........................................................................................................
    • 3.2.2. Laço de Repetição for (Para) .........................................................................................
    • 3.2.3. Laço de Repetição while (Enquanto) .............................................................................
    • 3.2.4. A função sprintf .............................................................................................................
    • 3.3. Ambiente de Programação (Arquivos M)..........................................................................
    • 3.3.1. Usando o comando help.................................................................................................
    • 3.3.2. Funções do usuário.........................................................................................................
    1. Um pouco de matemática...........................................................................................................
    • 4.1. Trabalhando com vetores ...................................................................................................
    • 4.2. Matrizes..............................................................................................................................
    • 4.2.1. Adição ............................................................................................................................
    • 4.2.2. Multiplicação de escalar por uma matriz .......................................................................
    • 4.2.3. Multiplicação de matrizes ..............................................................................................
    • 4.2.4. Números complexos.......................................................................................................
    1. Trabalhando com persistência de dados.....................................................................................
    • 5.1. Salvando e carregando dados (de forma simples)..............................................................
    • 5.2. Lendo dados em formato definido .....................................................................................

Já com o uso do Matlab, em sua forma mais simples, pode ser feita:

ans = 80

Como pode ser observado, o Matlab não se importa com espaços em branco e reconhece a ordem de

precedência das operações matemáticas primitivas, facilitando a escrita do problema. Outra coisa

importante é que o Matlab responde a tecla mostrando o resultado, quando solicitado, e

atribuindo o mesmo a variável ans (abreviação de answer (resposta)).

Veja que a solução dada anteriormente, basicamente seria a mesma dada em uma calculadora

científica. Porém, pode-se usar variáveis para isso, permitindo que os valores possam ser

reutilizados para uma segunda etapa, caso necessário. Veja:

>>Nota1= Nota1 = 20 >> Nota2= Nota2 = 18 >> Nota3= Nota3 = 21 >> Peso1= Peso1 = 1 >> Peso2= Peso2 = 1 >> Peso3= Peso3 = 2 >> Notafinal=Nota1Peso1+Nota2Peso2+Nota3*Peso Notafinal = 80

Na solução acima criamos seis variáveis, representando notas e pesos envolvidos no exemplo. Veja

que ao final, a variável Notafinal recebe o resultado do equacionamento proposto da média

ponderada das notas. Assim, pode-se usar Notafinal em outros cálculos, ou mesmo imprimir

formatadamente o resultado.

2.1. Operadores aritméticos

Na tabela a seguir, os operadores matemáticos do Matlab podem ser observados:

Tabela 2.1-1 - Operadores aritméticos

Operação Símbolo Exemplo

Adição + 5 + 6

Subtração - 5 – 6

Multiplicação * 5 * 6

Divisão / ou \ 5 / 6 ou 5 \ 6

Potenciação ^ 5 ^ 6

Veja que, a ordem de precedência do cálculo é observada pelo Matlab. Assim, as operações

matemáticas ocorrem na ordem correta. Porém, a indicação de precedência pode ser feita através de

parênteses, quando necessário. Por exemplo:

x =^ +

Um programador distraído faria assim: x= 5 + 6 / 2 + 3. Veja que o valor encontrado é 11 e não

2,2. Isso ocorreu porque a expressão que representa o exemplo dado seria: x=(5+6) / (2+3), uma vez

que o Matlab dividiu 6 por 2, para só, então, somar os demais. Assim, é necessário utilizar os

parênteses para representar a prioridade como o cálculo deverá ser realizado pelo Matlab.

2.2. Operadores Relacionais

Operadores relacionais são aqueles utilizados com o intuito de analisar se uma condição é, ou não,

verdadeira. Assim, em laços de repetição ou mesmo desvios condicionais, pode-se tratar algum tipo

de expressão verificando “verdadeiro” ou “falso” para as mesmas.

Tabela 2.2-1- Operadores relacionais

Operador Descrição

< Menor que

<= Menor ou igual

> Maior que

>= Maior ou igual

== Igual a

~= Diferente de

Assim, pode-se usar a constante pi para calcular alguma coisa que envolva as devidas relações

matemáticas, sem se preocupar em atribuir o valor deste para uma variável.

2.4.1. Informações na área de trabalho

Você pode visualizar variáveis e/ou constantes utilizadas (carregadas em memória) pelo MatLab.

>> a=1;b=2.5;c=3.5;d=4; >> who Your variables are: a b c d

Informações mais detalhadas podem ser solicitadas, através do comando whos. Veja:

>> whos Name Size Bytes Class a 1x1 8 double array b 1x1 8 double array c 1x1 8 double array d 1x1 8 double array

Grand total is 4 elements using 32 bytes

Para verificar apenas o conteúdo de uma variável, basta escrever o nome da mesma.

>> a a = 1

2.5. Algumas Observações Iniciais

Ao longo do código você pode (e deve) incluir comentários que permitam contextualizar o que

aquele pedacinho do código realmente faz. Lembre-se de que o que está muito claro para você, pode

ser um pesadelo para quem vai dar uma futura manutenção. Além disso, até mesmo você pode

esquecer do se trata aquele código, trazendo maior demanda de tempo para uma atividade que

poderia ser muito simples. O caractere % permite que você faça esses comentários. Ou seja, a partir

da inserção do caractere, tudo o que estiver a sua frente será, automaticamente, desprezado pelo

Matlab. Aproveitando o ensejo, vamos criar algumas linhas de código e explicar o que significa

cada um dos comandos.

% Abaixo encontraremos alguns comandos e suas funcionalidades Clear all % Apaga da memória todas as variáveis já armazenadas. A substituição % da palavra reservada “all” pelo nome de uma variável, permite que apenas esta % seja apagada da memória clc % limpa a tela

x=pi; % atribui a variável x a constante pi (3.1416). Além disso, usamos o % caractere “;”, avisando ao Matlab que o processamento envolvido nessa linha, % não deve ser mostrado ao usuário. y=pi % Veja que nessa linha não usamos o “;” clear x % apaga da memória a variável x x % solicita ao Matlab que ele imprima o valor de x na tela

Veja como o código é apresentado no console pelo Matlab:

y =

>> x ??? Undefined function or variable 'x'.

Observe que, onde foi usado o caractere “;” , o Matlab suprimiu a impressão de tela, diferentemente

da variável y , onde a atribuição gerou uma impressão.

Como o comando “clear x” foi usado antes da impressão da variável x, um erro foi gerado pelo

Matlab (“função ou variável ‘x’ indefinida”), que não encontrou nenhuma referência para a mesma.

3. Programando com o Matlab

Observando a tela do Matlab e as respostas dadas por ele até esse momento, pelo menos uma

pergunta você deve ter a fazer: “Onde é que eu escrevo o código fonte?” Porém, antes disso, uma

visão da tela principal se faz necessária, uma vez que você pode (e irá) precisar dela em algum

momento.

Figura 2 – Tela do editor de código do Matlab

3.2. Programação Básica

Na tabela a seguir encontram-se alguns comandos básicos do Matlab. Pretende-se com essa

informação inicial, permitir a implementação de rotinas simples. Porém, como tudo começa do

início, vale a pena uma leitura. Uma observação importante é que os comandos também são case-

sensitive.

Comando Sintaxe Observações

input N=input(‘Digite^ um^ texto’)^ O valor entrado pelo teclado será

atribuído a variável N, por exemplo.

beep Beep^ O computador emite um bip

pause pause^ ou^ pause(n)^ O computador fica aguardando

indefinidamente para a omissão do

parâmetro n, ou ainda aguarda n

segundos para seguir a execução do

código.

disp disp(variável)^ A simples escrita do nome da

variável permite a impressão do

conteúdo da mesma. Porém, o

Matlab mostra o nome da variável

antes de exibir o conteúdo. Já com o

uso do comando disp, o nome da

variável é omitido, o que,

normalmente, pode ser bastante útil.

, X1=3,^ X2=4,^ X3=10^ Separa comandos em uma mesma

linha

; X1=3;^ X2=4;^ X3=10^ Tem a mesma funcionalidade do

comando anterior. Porém, também

suprime a impressão de tela.

... X=A^ +^ B^ +^ C^ ...

+ D + E

Permite fazer uma quebra de linha

sem, entretanto, perder a

continuidade da linha anterior.

clc clc^ Limpa a tela.

3.2.1. Desvio Condicional

O Matlab também prevê o uso de desvios na execução do código escrito. Assim, a adequação de

condições verdadeiras e falsas permite o controle do fluxo. Veja a sintaxe:

if comandos... elseif comandos... else comandos... end

Como exemplo, pode-se utilizar o código a seguir:

>> x=10;

if x < 0 % para x menor que zero fprintf('\n O valor de x é menor que zero \n') elseif x == 0 % Para x igual a zero fprintf('\n O valor de x é igual a zero \n') elseif x > 0 % % Para x maior que zero fprintf('\n O valor de x é maior que zero \n ') end

O valor de x é maior que zero >>

Veja que a variável x recebeu o valor 10 inicialmente. Assim, a condição verdadeira é a terceira

end s

Já a execução retornará:

s= 15 >>

Uma vez que o somatório indicado como exemplo tem esse resultado. Caso o somatório, agora,

proposto seja (^) ∑

20 i 5 i

n , o código deve ser escrito:

s=0; for i=5: s=s + i; end s

Apresentando o resultado:

s= 200 >>

Nos exemplos acima não foi usado nenhum passo. A omissão atribui automaticamente passo=1.

Porém, caso necessário pode-se atribuir qualquer valor. Veja:

for i=5:2: i end

No exemplo anterior, o laço começa com 5 e termina também com 20. Porém, o valor de i varia de

2 em dois, como a execução abaixo mostra:

i = 5 i = 7

i = 9 i = 11 i = 13 i = 15 i = 17 i = 19 >>

Veja que o laço for possui uma condição predeterminada para execução. Essa característica limita

o uso deste e em alguns momentos pode torná-lo inapropriado.

3.2.3. Laço de Repetição while (Enquanto)

Como visto no laço for, o uso de um loop pode ser imprescindível para algumas rotinas. O while

permite a delimitação de um bloco para execução repetitiva de uma parte do código. Veja que a

sintaxe permite não definir quando parar. Ou seja, o próprio fluxo das informações, mediante uma

expressão lógica, permite iniciar e terminar a execução contínua de um bloco. A sintaxe do

comando while é assim definida:

while comandos... end

Como exemplo, pode-se usar o mesmo somatório proposto para o laço for:

cont=5; s=0; while cont<= s=s + cont; cont=cont + 1; end s

O resultado apresentado não poderia ser outro:

3.2.4. A função sprintf

A função sprintf merece um espaço especial, uma vez que ela permite imprimir mensagens

formatadas na tela. O uso da mesma se torna essencial quando o assunto é fornecer informações

para o usuário. Veja a sintaxe:

sprintf(‘ mensagem de texto’) ou ainda sprintf(‘mensagem de texto’, variavel)

A função sprintf permite formatar o resultado de acordo com o tipo de resposta que você quer

apresentar. A seguir, como exemplo, podemos mostrar alguns detalhes. Assuma que

x=0.0820574587.

Tabela 3.2.4-1 - Parâmetros da função sprintf

Comando Resultado

sprintf('\n O valor de x é : %.0f \n',x) 0 sprintf('O valor de x é : %.3f \n',x) 0. sprintf('O valor de x é : %.10f \n',x) 0. sprintf('O valor de x é : %.2e \n',x) 8.21e- sprintf('O valor de x é : %.3e \n',x) 8.206e- sprintf('O valor de x é : %.0g \n',x) 0. sprintf('O valor de x é : %.3g \n',x) 0. sprintf('O valor de x é : %.5g \n',x) 0.

A tabela anterior mostra alguns tipos de formatação possíveis. Veja que o formato e traz uma

notação exponencial, f significa ponto fixo e g o uso de e ou f, observando-se o que for mais curto.

Para os formatos e e f, o número a esquerda indica quantas casas a direita da vírgula deverão ser

mostrados. Já no formato g o mesmo número significa a quantidade total de dígitos a serem

apresentados.

O valor atribuído a x anteriormente é chamado de Constante dos Gases Ideais ou Perfeitos, uma

idealização para estudos do comportamento de um gás.

3.3. Ambiente de Programação (Arquivos M)

No matlab os arquivos executados através da Janela de Comandos (command window) têm extensão

.m. Esses arquivos podem ser editados através do editor próprio do Matlab ou mesmo no Bloco de

Notas do Windows. Porém, o editor do Matlab, como dito anteriormente, oferece funcionalidades

inerentes a linguagem do Matlab, grafando cores para palavras reservadas, identação automática,

dentre outros. Além disso, através da interface do editor você pode executar rotinas, sem a

necessidade de “chamar” a rotina na Janela de Comandos, onde a rotina deve ser chamada pelo

nome do arquivo m. Assim, uma rotina que tenha como nome teste.m pode ser chamada apenas de

teste.

3.3.1. Usando o comando help

O Matlab dispõe do comando help para que informações sejam retornadas ao usuário. Veja:

>>help for

FOR Repeat statements a specific number of times. The general form of a FOR statement is:

FOR variable = expr, statement, ..., statement END

The columns of the expression are stored one at a time in the variable and then the following statements, up to the END, are executed. The expression is often of the form X:Y, in which case its columns are simply scalars. Some examples (assume N has already been assigned a value).

for R = 1:N for C = 1:N A(R,C) = 1/(R+C-1); end end

Step S with increments of -0. for S = 1.0: -0.1: 0.0, do_some_task(S), end

Set E to the unit N-vectors

% Exemplo: % % x=fatorial(4) % x receberá o valor do fatorial de 4

function [fatNro]=fatorial(Nro) fatNro=1; for i=1:Nro fatNro=fatNro * i; end

Veja que a rotina de cálculo, propriamente dita, não aparece no help da função. Isso permite ocultar

o código fonte, bem como facilitar o entendimento do uso da função.

Usando a função fatorial escrita anteriormente:

>> x=fatorial(3) x = 6

A variável x recebe o valor retornado pela função fatorial. Como o parâmetro de entrada é 3, o

fatorial de 3 é apresentado.

3.3.2. Funções do usuário

Conforme visto anteriormente, é possível criar suas funções usando o Matlab. O tutorial do item

anterior mostra como criar uma função e seu respectivo help. Porém, alguns detalhes são muito

importantes.

1º) O nome da função tem que ser idêntico ao nome do arquivo .m;

2º) A criação dos nomes deve obedecer a mesma regra para nomes de variáveis (nunca usar

caracteres especiais, ç, acento, etc);

3º) Como já visto, letras maiúsculas e minúsculas são diferentes;

4º) A primeira linha de código executável (sem comentários) deve ser a declaração da função;

5º) Todas as linhas são executadas, excluindo as de fluxo desviado (if), até atingir o final do arquivo

.m, ou seja encontrado o comando return.

Veja o exemplo a seguir:

function [SomaNro]=soma(N1, N2, N3) % são três parâmetros de entrada

SomaNro=N1+N2+N3;

end

Chamando a função na janela command:

soma(2,3,4) ans = 9

Observe que a resposta é somatório dos números passados (como deveria ser).

4. Um pouco de matemática

Como exemplo inicial, podemos trabalhar com a nossa velha e conhecida amiga equação

quadrática. Da formulação geral temos:

ax^2 + bx + c (3.3.2-1)

Como exemplo didático podemos, a partir da geral estabelecer:

x^2 + 4x + 3 (3.3.2-2)

Criaremos agora um programa que permita encontrar as raízes da equação:

clear all clc

a=1; b=4; c=3;

delta=b^2 - 4ac; % calculando o valor de delta

r1= (-b + delta^(1/2))/(2a); % calculando a raiz r r2= (-b - delta^(1/2))/(2a); % calculando a raiz r

sprintf('\n Raiz 1: %g \n',r1) sprintf('\n Raiz 2: %g \n',r2)

Agora veja a resposta no console do Matlab:

ans = Raiz 1: - ans = Raiz 2: -