Você está na página 1de 9

Material de Apoio – Helon David de Macêdo Braz

Melhorando a entrada de dados dos scripts Matlab®

Junho de 2014
Material de Apoio
Helon David de Macêdo Braz 2

Sumário

MOTIVAÇÃO 3
OBJETIVO 3
O PROBLEMA 3
ENTRADA DE DADOS VIA ARQUIVO DO MATLAB® 4
ENTRADA DE DADOS VIA ARQUIVO DE TEXTO 6
ENTRADA DE DADOS VIA PLANILHA DO EXCEL® 7
UM PASSO A FRENTE: LENDO VÁRIAS PLANILHAS NO MESMO ARQUIVO DO EXCEL® 8
Material de Apoio
Helon David de Macêdo Braz 3

Motivação

Scripts do Matlab® são como programas e, portanto, possuem usualmente operações de


entrada e saída de dados. Se o montante de dados a serem lidos cresce, a operação de entrada
manual usando rotinas como input passa a ser cansativa e improdutiva para os usuários. Como
regra prática, uma entrada de ao menos dez valores justifica a adoção de um arquivo de
entrada. Esse arquivo é criado externamente ao script, de modo que de maneira alguma haja
dependência entre script e arquivo de entrada.

Objetivo

O objetivo desse material é mostrar três opções para dotar seus scripts Matlab® da opção de
entrada via arquivos:

1. Entrada de Dados via Arquivo do Próprio Matlab®;


2. Entrada de Dados via Arquivo em formato de Texto; e
3. Entrada de Dados via Planilha do Excel®.

A numeração adotada reflete uma ordem de prioridades, sendo considerada como alternativa
mais desejável, a leitura dos dados de entrada via planilha do Excel®.

O problema

Para exemplificar as três alternativas de entrada de dados listadas como objetivo desse
material, o primeiro problema prático da seção de LTs do material da disciplina Análise de
Sistemas Elétricos foi escolhido. O problema consiste em:

Escrever rotina em Matlab® que calcule a indutância dos condutores de uma LT Monofásica
bem como sua indutância total em H/m, supondo que são fornecidas tabelas com os dados
dos condutores de ida e de retorno da corrente listando suas posições em um eixo de
coordenadas (X,Y), seus raios e respectivos RMG (raio médio geométrico).

Para exemplificar: considere uma LT Monofásica com três condutores de ida e dois de retorno.
A entrada a ser lida seria algo como:

Condutor de Ida (distâncias em metros):

Condutor de Retorno (distâncias em metros):


Material de Apoio
Helon David de Macêdo Braz 4

Alternativamente, poderia haver uma única tabela com uma coluna que identificasse se o
condutor é de ida (1) ou retorno (2):

Nas seções a seguir são mostrados exemplos em que esses dados são lidos. Não desejamos
aqui resolver o problema apresentado, apenas demonstrar como a entrada de dados poderia
ser feita.

Entrada de Dados via Arquivo do Matlab®

Essa é a opção mais simples. As etapas realizadas são as seguintes:

- O script abre uma janela de seleção de arquivo usando a função uigetfile e sugerindo o
formato (*.m) próprio do Matlab®;
- O usuário seleciona o arquivo desejado navegando na estrutura de diretórios de sua máquina
de modo que o nome do arquivo e o caminho até ele são retornados por uigetfile nas
variáveis filename e pathname;
- Após conhecer o nome e caminho do arquivo a ser lido, o script executa os comandos que
constam no arquivo de entrada utilizando a função run, obtendo as variáveis X e Y.
- Nesse processo, run recebe o texto gerado pela concatenação do caminho para o arquivo
com seu nome propriamente dito: strcat.

O código descrito é mostrado a seguir:

O arquivo de exemplo seria algo como:


Material de Apoio
Helon David de Macêdo Braz 5

Adotando a segunda opção de entrada, em que há uma única tabela, passa a existir uma etapa
a mais do que havia com duas matrizes independentes: a separação da matriz lida em X e Y. O
código para essa situação é do tipo:

Em que, o arquivo de entrada é do tipo mostrado:

Nesse caso, observe que a matriz lida na entrada de dados se chama temp e após sua
obtenção extraímos X e Y por meio dos comandos:

X = temp(temp(:,1)==1,2:end);
Y = temp(temp(:,1)==2,2:end);

Tomando como base essas linhas de código, alguns comentários podem ser feitos:

- temp é uma matriz de 5x5 (5 linhas e 5 colunas). De forma genérica, para n condutores
temp tem n linhas e 5 colunas;
- O Matlab® permite extrair um elemento da matriz temp fornecendo índices para linha
e coluna, sendo a primeira linha ou coluna identificadas por 1. Assim: temp(2,3) é
igual a 6;
Material de Apoio
Helon David de Macêdo Braz 6

- O Matlab® permite extrair submatrizes de temp fornecendo índices para as linhas de


interesse e igualmente colunas de interesse. Logo: temp([1 2],[1 2 3]) é uma
matriz de 2x3 formada pelas linhas 1 e 2, bem como colunas 1, 2 e 3 de temp;

1 0 12
൥1 0 6 ൩
1 0 0

- Para fornecer linhas ou colunas de interesse, é possível usar uma notação própria do
Matlab® que é especialmente útil para estabelecer intervalos. Por exemplo: no lugar
de [1 2 3] para selecionar as colunas 1, 2 e 3 de temp, é possível simplesmente
fornecer 1:3;
- Na escolha de intervalos, é possível usar palavras reservadas que indicam o início, final
ou mesmo a totalidade do conjunto possível. Por exemplo: end significa o último valor
possível, enquanto “:” quando aparece sozinho significa todos os valores possíveis;
- Por fim, é possível usar os próprios valores da matriz para determinar as linhas ou
colunas de interesse. Por exemplo: temp(:,1)==1 será verdadeiro para toda linha de
temp cujo valor da 1° coluna é igual a 1.

A expressão usada para inicializar a matriz X pode ser descrita como: X recebe uma submatriz
de temp formada pelas linhas em que o valor da 1° coluna é igual a 1 e pelas colunas de 2 até o
final. De forma semelhante, Y recebe uma submatriz de temp formada pelas linhas em que o
valor da 1° coluna é igual a 2 e pelas colunas de 2 até o final.

Entrada de Dados via Arquivo de Texto

Essa é a opção mais comum nos programas comerciais, pois permite boa flexibilidade ao
usuário a um custo relativamente pequeno de manipular arquivos de texto. A sequência é a
mesma utilizada antes, sendo a opção de entrada escolhida aquela em que havia uma única
tabela:

- O script abre uma janela de seleção de arquivo sugerindo o formato (*.txt) usando a função
uigetfile;
- O usuário seleciona o arquivo desejado navegando na estrutura de diretórios de sua máquina
de modo que o nome do arquivo e o caminho até ele são retornados por uigetfile;
- O script efetivamente lê os dados fornecidos utilizando a função dlmread que recebe 4
parâmetros de entrada: nome completo do arquivo a ser lido (caminho+nome), caractere a ser
usado como separador dos campos, linha inicial e coluna inicial. Em que, linha inicial e coluna
inicial são contadores que começam em 0;
- Após a rotina dlmread, a variável temp está carregada na memória e basta separar X e Y
como feito anteriormente.

O código que implementa os passos descritos e o exemplo do arquivo de entrada são


apresentados a seguir. observe que a linha inicial fornecida foi 1, logo a primeira linha do
arquivo será considerada como cabeçalho.
Material de Apoio
Helon David de Macêdo Braz 7

Entrada de Dados via planilha do Excel®

Essa é a opção mais cômoda para o usuário, pois permite ter como arquivo de entrada uma
tabela já com formatação e apresentação adequadas. Por conta dessa facilidade do ponto de
vista do usuário, ela poderia ser a mais complicada para o programador. Porém, o Matlab®
possui a função xlsread que torna a leitura simples de ser implementada. A sequência é a
mesma utilizada antes e mais uma vez a opção de entrada escolhida foi aquela em que há uma
única tabela:

- O script abre uma janela de seleção de arquivo sugerindo o formato (*.xlsx) usando a função
uigetfile;
- O usuário seleciona o arquivo desejado navegando na estrutura de diretórios de sua máquina
de modo que o nome do arquivo e o caminho até ele são retornados por uigetfile;
- O script efetivamente lê os dados fornecidos utilizando a função xlsread que recebe apenas
o nome completo do arquivo a ser lido (caminho+nome);
- Após a rotina xlsread, a variável temp está carregada na memória e basta separar X e Y
como feito anteriormente.

O código que implementa os passos descritos e o exemplo do arquivo de entrada são


apresentados a seguir:
Material de Apoio
Helon David de Macêdo Braz 8

Um passo à frente: Lendo várias planilhas no mesmo arquivo do Excel®

A função xlsread permite ao usuário especificar a planilha em que a leitura deve ser feita.
Basta fornecer o índice identificador da respectiva planilha ou seu nome como um segundo
parâmetro. Nesse caso, vamos atualizar o código apresentado antes para ler duas planilhas do
arquivo de entrada, sendo uma relativa aos dados dos condutores de ida e outra associada aos
dados dos condutores de retorno. O seguinte arquivo de entrada deve ser lido:
Material de Apoio
Helon David de Macêdo Braz 9

O código toma a forma apresentada a seguir, sendo o resultado idêntico:

Você também pode gostar