Vous êtes sur la page 1sur 17

Introdução a Programação Usando MATLAB

* Os principais comandos de programação do MATLAB que serão usados na disciplina


MENOTI são:

1) iteração (repetição): for e while;

2) decisão (seleção): if;

3) leitura (entrada) e impressão (saída) de dados em arquivos: textread;

4) geração de gráficos (visualização de resultados via saída gráfica).

* Além disso, é necessário também importante saber como subdividir um programa em


unidades menores (módulos). No MATLAB isto é realizado usando o comando
function para criar funções definidas pelo usuário.

*Estas funções são análogas às funções da linguagem C/C++ e as subrotinas da linguagem


FORTRAN.

16/3/2011 Métodos Numéricos e Otimização 1


* O comando while repete um bloco de declarações indefinidamente enquanto uma
condição de saída são for satisfeita.

* A forma geral do comando while é a seguinte:


while expressão
Declaração #1
Declaração #2
⋅⋅⋅
⋅⋅⋅
⋅⋅⋅
Declaração #n
end

* Os seguintes comandos mostram a utilização do comando while para obter o fatorial


de um número
n = input('entre com o numero: ');
i=1;
fat=1;
while i<=n
fat=fat*i;
i=i+1;
end
fprintf('Fatorial de %d e igual a %d',n,fat);

16/3/2011 Métodos Numéricos e Otimização 2


* O comando input é usado para leitura de variáveis a partir do teclado

* O comando fprintf é usado para imprimir uma saída formatada na tela. Este
comando é similar a função fscanf da linguagem C

* Uma execução do script (arquivo contendo um conjunto de instruções) contento os


comandos acima é mostrada abaixo:

>> fat_while
entre com o numero: 4
Fatorial de 4 e igual a 24
>>

* Um script é executado digitando o nome do seu arquivo associado no prompt de


comando do MATLAB. No exemplo do while, o script é denominado fat_while.m
* comando for executa

16/3/2011 Métodos Numéricos e Otimização 3


* O comando for executa um bloco de declarações durante um número especificado de
vezes. O comando for tem a seguinte forma
for índice = expressão
Declaração #1
Declaração #2
⋅⋅⋅
⋅⋅⋅
⋅⋅⋅
Declaração #n
end

* Os seguintes comandos mostram a utilização do comando for para obter o fatorial de


um número
n = input('entre com o numero: ');
fat=1;
for i=1:n
fat=fat*i;
end
fprintf('Fatorial de %d e igual a %d',n,fat);

* O comando i=1:n cria uma lista de valores de 1 até n com passo unitário, isto é: 1, 2,
3,...,n-1,n. Desta forma, cada iteração do laço é executada com um valor diferente de i.

16/3/2011 Métodos Numéricos e Otimização 4


* O comando if é usado para selecionar e executar seções específicas de um programa. A
forma geral mais simples de um comando if é mostrada abaixo:

if expressão de controle
Declaração #1
Declaração #2
... Bloco #1
Declaração #n
else
Delaração #1
Delaração #2
... Bloco #2
Delaração #n
end

* A expressão de controle é verdadeira, então os comandos do bloco #1 são executados.


Caso contrário, os comandos do bloco #2 são executados.

* O uso do comando if para calcular as raízes reais de uma equação do segundo grau é
ilustrado abaixo:

16/3/2011 Métodos Numéricos e Otimização 5


a=input('entre com o valor de a: ');
b=input('entre com o valor de b: ');
c=input('entre com o valor de c: ');
%Calcula o discriminante (delta)
delta = b^2 - 4*a*c;
if delta >= 0.0
x1 = (-b + sqrt(delta))/(2*a);
x2 = (-b - sqrt(delta))/(2*a);
fprintf('x1 = %10.4f\n',x1);
fprintf('x2 = %10.4f\n',x2);
else
fprintf('A equacao possui raizes complexas!\n');
end

* Duas execuções do script acima são mostradas abaixo:

1) Solução da equação x 2 + 5 x + 6 = 0

>> solv_eq2
entre com o valor de a: 1
entre com o valor de b: 5
entre com o valor de c: 6
x1 = -2.0000
x2 = -3.0000

16/3/2011 Métodos Numéricos e Otimização 6


2) Solução da equação x 2 + 2 x + 5 = 0
>> solv_eq2
entre com o valor de a: 1
entre com o valor de b: 2
entre com o valor de c: 5
A equacao possui raizes complexas!
>>

* O comando textread é projetado para ler arquivos formatados em colunas de dados


em cada coluna pode ter um tipo diferente (double, char, int)

* A forma geral do comando textread é mostrada abaixo


[a,b,c,...] = textread(arquivo,formato,n)
Onde:
arquivo é o nome do arquivo que será aberto
formato é uma cadeia de caracteres que contém uma descrição dos tipos de dados em
cada coluna. Por exemplo, ‘%d %f %s’ lê um arquivo no qual os dados da 1ª, 2ª e 3ª
colunas são dos tipos inteiro, ponto flutuante e caractere.
n é o número de linhas que serão lidas. Se n não é fornecido, o comando textread lê o
arquivo até o fim.

16/3/2011 Métodos Numéricos e Otimização 7


* O uso do comando textread será ilustrado na leitura de um arquivo que contém a curva
de carga semanal (24×7 = 168 pontos) de uma empresa de energia elétrica. O formato dos
dados neste arquivo é mostrado
1ª coluna: dia (1-segunda, 2-terça,...,6-sábado,7-domingo);
2ª coluna: hora (0,...,24);
3ª coluna: carga MW (Mega Watts).

* As dez primeiras linhas deste arquivo de dados são mostradas abaixo:


1 0 1775.8350
1 1 1669.8150
1 2 1590.3000
1 3 1563.7950
1 4 1563.7950
1 5 1590.3000
1 6 1961.3700
1 7 2279.4300
1 8 2517.9750
1 9 2544.4800
1 10 2544.4800

• Consequentemente, pode-se usar os seguintes comandos para ler os dados da curva de


carga:

16/3/2011 Métodos Numéricos e Otimização 8


clear all;
file_name=input('entre com o nome do arquivo: ','s');
[load_day,load_hour,load_mw]=textread(file_name,'%d %d %f');
fprintf('Numero de pontos da curva de carga: %d\n',length(load_day));

* Comentários:
1) O comando clear all limpa todas as variáveis e funções da memória;
2) input('entre com o nome do arquivo: ','s'); lê o nome do arquivo onde os dados
da curva de carga estão armazenados;
3) Os dados da curva de carga são armazenados nos seguintes vetores:
3.1) load_day: dia da semana;
3.2) load_hour: hora associada com um patamar da curva de carga;
3.3) load_mw: valor do patamar da curva de carga em MW.
4) O comando length(load_day) é usado para determinar o comprimento do vetor
load_day

* A saída gerada pela execução do script contendo os comandos acima (ana_load.m) é


mostrada abaixo:
>> ana_load
entre com o nome do arquivo: ldcrv.dat
Numero de pontos da curva de carga: 168

16/3/2011 Métodos Numéricos e Otimização 9


* Um recurso muito importante disponível no MATLAB é a sua capacidade para gerar gráficos.
* O gráfico da função sin(x) no intervalo [0,2π] é gerado pelos seguintes comandos:

>> x=[0:0.01:2*pi];
>> y=sin(x);
>> plot(x,y);
title('Gráfico da função Sen(x)');
xlabel('ângulo [rad]');
ylabel('y = Sen(x)');

* Comentários:
1) o comando x=[0:0.01:2*pi] gera um vetor cujos elementos vão de 0.0 até 2π com um passo
de 0.01 rad;
2) o comando y=sin(x) calcula o seno dos elementos do vetor x;
3) o comando plot(x,y)gera o gráfico com a variável x no eixo das abscissas e a variável y no
eixo das ordenadas;
3) o comando title('Gráfico da função Sen(x)') insere o título no gráfico;
4) os comandos xlabel('ângulo [rad]') e ylabel('y = Sen(x)')inserem os nomes dos
eixos abscissas e das ordenadas, respectivamente.

16/3/2011 Métodos Numéricos e Otimização 10


* Estes comandos geram o seguinte gráfico:

16/3/2011 Métodos Numéricos e Otimização 11


* Finalmente, é importante entender como novas funções definidas pelo usuário podem ser
adicionadas ao MATLAB.

* A criação de funções definidas pelo usuário será ilustrada através da criação de uma
função para calcular as seguintes estatísticas associadas com uma curva de carga:

1) Carga média;

2) Carga máxima (pico de carga) e mínima;

3) Fator de carga (razão entre a carga média e o pico de carga).

* Esta nova função será testada nos das da curva de carga semanal usados no exemplo do
comando textread.

* A definição da função que calcula as estatísticas especificadas acima (load_stat) é


mostrada a seguir:

16/3/2011 Métodos Numéricos e Otimização 12


16/3/2011 Métodos Numéricos e Otimização 13
* A chamada da função load_stat a partir do script ana_load.m é mostrada abaixo:

16/3/2011 Métodos Numéricos e Otimização 14


* Comentários:
1) A chamada da função load_stat é realizada através do seguinte comando:
[load_min,load_max,load_mean,load_fac] = load_stat(load_mw);

2) A declaração:
load_fid=fopen('output.dat','w');
É usada para abrir um arquivo de saída denominado output.dat no qual é permitido somente
imprimir dados (‘w’). Este arquivo é referenciado pelo identificador load_fid.

3) O comando fclose(load_fid) fecha o arquivo output.dat

4) A impressão de dados no arquivo é realizada por declarações tais como:


fprintf(load_fid,'Fator de Carga : %10.4f\n',load_fac);
Ou seja, o identificador de arquivo é adicionado ao comando fprintf

5) O comando hold on é usado para mostrar vários gráficos em uma mesma janela;

6) A declaração legend('Carga Horária','Média') insere legendas em um gráfico.

* As saídas geradas pelo programa ana_load são mostradas a seguir:

16/3/2011 Métodos Numéricos e Otimização 15


1) Visualização da curva de carga
Curva de Carga Semanal
3000
Carga Horária
Média
2800

2600

2400

2200
Carga [MW]

2000

1800

1600

1400

1200
0 20 40 60 80 100 120 140 160 180
Tempo [horas]

16/3/2011 Métodos Numéricos e Otimização 16


2) Arquivo output.dat

Numero de pontos da curva de carga: 168


Carga Mínima (MW): 1368.0000
Carga Média (MW): 2138.8300
Carga Máxima (MW): 2850.0000
Fator de Carga : 0.7505

* Os mesmos resultados gerados pela função stat_load são obtidos com as funções nativas do
MATLAB

>> fprintf('%10.4f\n',mean(load_mw))
2138.8300

>> fprintf('%10.4f\n',max(load_mw))
2850.0000

>> fprintf('%10.4f\n',min(load_mw))
1368.0000
>>

* Onde as funções mean, max e min calculam a média, o máximo e o mínimo dos
elementos de um vetor/matriz.

16/3/2011 Métodos Numéricos e Otimização 17

Vous aimerez peut-être aussi