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 ............................................................................................................................................
- Uma breve apresentação do Matlab .............................................................................................
- 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 .............................................................................................
- 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.........................................................................................................
- 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.......................................................................................................
- 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: -