





































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Este documento fornece uma introdução à criação e uso de funções definidas pelo usuário no ambiente de computação numérica matlab, cobrindo conceitos como argumentos de entrada e saída, corpo da função e chamada de função. Além disso, é apresentado um exemplo de cálculo da área de um círculo.
Tipologia: Resumos
1 / 45
Esta página não é visível na pré-visualização
Não perca as partes importantes!






































programa de computador scripts algoritmo programa modular projeto de cima para baixo arquivo externo dispositivo de entrada padrão prompting dispositivo de saída padrão executar um script linguagens de alto nível linguagem de máquina executável compilador código fonte código objeto interpretador
documentação comentários comentário de bloco blocos de comentário entrada/saída (E/S) usuário string vazia mensagem de erro formatação string de formato marcador de espaço caracteres de conversão caractere nova linha largura de campo espaços em branco na frente zeros à direita símbolos de plotagem marcadores tipos de linha alternadores
modos escrevendo num arquivo acrescentando num arquivo lendo de um arquivo funções definidas pelo usuário chamada de função argumento controle valor de retorno cabeçalho da função argumento de saída argumentos de entrada corpo da função definição de função variáveis locais escopo de variáveis espaço de trabalho base
3.1 Algoritmos .......... 1 3.2 Scripts do MATLAB ............................ 2 3.3 Entrada e Saída .. 6 3.4 Scripts com Entrada e Saída 14 3.5 Scripts para Produzir e Personalizar Plotagens Simples .......................... 15 3.6 Introdução à Entrada/Saída de Arquivos (Carregar e Salvar) ........... 22 3.7 Funções Definidas pelo Usuário que Retornam um Único Valor ...... 27 3.8 Comandos e Funções ............ 36
Nós usamos até agora o produto MATLAB® interativamente na Janela de Comandos. Isso é suficiente quando tudo que se precisa é um cálculo simples. No entanto, em muitos casos, são necessários alguns passos antes que o resultado final possa ser obtido. Nesses casos, é mais conveniente agrupar instruções no que é chamado de programa de computador.
Neste capítulo, apresentaremos os programas mais simples do MATLAB, chamados de scripts. Exemplos de scripts que personalizam o traçado de gráficos simples ilustram o conceito. A entrada será introduzida, tanto a partir de arquivos como pelo usuário. Saída para arquivos e para a tela também serão apresentadas. Finalmente, serão descritas funções definidas pelo usuário que calculam e retornam um único valor. Estes tópicos servem como uma introdução à programação, que será expandida em Capítulo 6.
Antes de escrever qualquer programa de computador, é útil descrever primeiro as etapas que serão necessárias. Um algoritmo é a sequência de passos necessárias para resolver um problema. Em uma abordagem modular para a programação, a solução do problema é dividida em passos separados e, em seguida, cada passo é refinado até que os passos resultantes sejam pequenos o suficiente para serem transformadas em instruções executáveis. Isso é chamado de abordagem de top-down design ( projeto de cima para baixo – da solução mais geral para a mais detalhada).
Como um exemplo simples, considere o problema de calcular a área de um círculo. Primeiro, é necessário determinar quais informações são necessárias para resolver o problema, que, nesse caso, é o raio do círculo. Em seguida, dado o raio do círculo, a área do círculo poderia ser calculada. Finalmente, uma vez que a área tenha sido calculada, ela deve ser exibida de alguma forma. O algoritmo básico é então composto por três passos:
obter o dado de entrada – o raio calcular o resultado – a área exibir a saída.
Mesmo com um algoritmo tão simples, é possível refinar cada uma das etapas. Quando um programa é escrito para implementar esse algoritmo, os passos seriam os seguintes.
De onde vem a entrada? Duas escolhas seriam possíveis: de um arquivo externo ou do usuário (a pessoa que está executando o programa) que entra com o número, digitando-o no teclado. Para cada sistema, um deles será o dispositivo padrão de entrada (o que significa que, se não especificado de outra forma, é de onde vem a entrada!). Se o usuário deve entrar com o raio, o usuário deve ser instruído a digitar o raio (e em qual unidade). Dizer ao usuário o que digitar é chamado de prompting (solicitação de digitação). Assim, a etapa de entrada realmente se torna dois passos: avisar o usuário para inserir um raio e depois lê-lo para o programa. Para calcular a área, a fórmula é necessária. Neste caso, a área do círculo é π multiplicado pelo quadrado do raio. Então, isso significa que o valor da constante para π é necessário ao programa. Para onde vai a saída? São duas possibilidades: (1) para um arquivo externo ou (2) para a tela. Dependendo do sistema, um deles será o dispositivo de saída padrão. Ao exibir a saída do programa, ela deve ser sempre informativa quanto possível. Em outras palavras, em vez de só imprimir a área (apenas o número), ela deve ser impressa em um formato de frase bonito. Além disso, para tornar a saída ainda mais clara, a entrada deve ser impressa. Por exemplo, a saída pode ser a frase “Para um círculo com um raio de 1 centímetro, a área é 3,1416 centímetros quadrados”.
Para a maioria dos programas, o algoritmo básico consiste nas três etapas descritas:
Como pode ser visto aqui, mesmo as soluções de problemas mais simples podem ser refinadas posteriormente. Este é o projeto top-down.
Uma vez que um problema tenha sido analisado e o algoritmo para sua solução tenha sido escrito e refinado, a solução para o problema é então escrita em uma linguagem de programação específica. Um programa de computador é uma sequência de instruções, em uma determinada linguagem, que diz ao computador como realizar uma determinada tarefa. Executar um programa é fazer com que o computador siga realmente estas instruções sequencialmente.
Linguagens de alto nível têm comandos e funções semelhantes ao inglês, como “print this” (“imprima isso”) ou “if x < 5 do something” (“se x < 5 faça alguma coisa”). O computador, no
FIGURA 3.1 Barra de ferramentas e editor
Neste texto, os scripts serão exibidos em uma caixa com o nome do arquivo-M no topo.
script1.m
raio = 5 area = pi * (raio^2)
Há duas formas de visualizar um script depois de escrito: abra a Janela do Editor para visualizá- lo ou use o comando type , conforme mostrado aqui, para exibi-lo na Janela de Comandos. O comando type mostra o conteúdo do arquivo chamado 𝑠𝑐𝑟𝑖𝑝𝑡1. 𝑚; observe que o. 𝑚 não está incluído:
type script raio = 5 area = pi * (raio^2)
Para efetivamente executar ou executar o script a partir da Janela de Comandos, o nome do arquivo é inserido no prompt (novamente, sem o. 𝑚). Quando executado, os resultados das duas instruções de atribuição são exibidos, pois a saída não foi suprimida para nenhuma das instruções.
script raio = 5 area =
Depois que o script for executado, você poderá descobrir que deseja fazer alterações nele (especialmente se houver erros!). Para editar um arquivo existente, existem vários métodos para abri-lo. Os mais fáceis são:
dentro da janela da “Current Folder”, clique duas vezes no nome do arquivo na lista de arquivos
escolher a seta para baixo “Open” (Abrir) mostrará uma lista “Recent Files” (Arquivos Recentes).
É muito importante que todos os scripts sejam bem documentados , para que as pessoas possam entender o que o script faz e como ele realiza sua tarefa. Uma maneira de documentar um script é colocar comentários nele. No MATLAB, um comentário é qualquer coisa, a partir do % até o final dessa linha em particular. Comentários são completamente ignorados quando o script é executado. Para colocar um comentário, basta digitar o símbolo % no início de uma linha, ou selecionar as linhas de comentário e depois clicar na seta para baixo “Edit” e clicar no símbolo %, e o editor colocará os símbolos % no início dessas linhas para os comentários.
Por exemplo, o script anterior para calcular a área de um círculo pode ser modificado para ter comentários:
scriptcirculo.m
% Este script calcula a área de um círculo
% Primeiro o raio é atribuído raio = 5 % A área é calculada com base no raio area = pi * (raio^2)
O primeiro comentário no início do script descreve ser o que o script faz; isso às vezes é chamado de comentário de bloco. Em seguida, durante todo o script , os comentários descrevem as diferentes partes do script (não habitualmente um comentário para cada linha, no entanto!). Os comentários não afetam o que um script faz, portanto, a saída desse script seria a mesma da versão anterior.
O comando help no MATLAB trabalha com scripts , bem como com funções internas. Os primeiros comentários de bloco (definidos como linhas contíguas no início) serão exibidos. Por exemplo, para o 𝑠𝑐𝑟𝑖𝑝𝑡𝑐𝑖𝑟𝑐𝑢𝑙𝑜:
help scriptcirculo Este script calcula a área de um círculo
A razão pela qual uma linha em branco foi inserida no script entre os dois primeiros comentários é que, de outra forma, ambos teriam sido interpretados como comentários contíguos e ambas as linhas teriam sido exibidas com help. A primeira linha de comentário é chamada de "linha H1"; esta linha é onde a função lookfor procura.
Escreva um script para calcular a circunferência de um círculo (C = 2 π r). Comente o script.
Comentários mais longos, chamados de blocos de comentários , consistem em tudo entre %{ e %}, que deve estar sozinho em linhas separadas. Por exemplo:
Embora normalmente os apóstrofos não sejam mostrados em torno de um caractere ou string, neste caso elas são mostradas para demonstrar que não há nada dentro da string.
No entanto, se espaços em branco forem inseridos antes de outros caracteres, eles serão incluídos na sequência. No próximo exemplo, o usuário pressionou a barra de espaço quatro vezes antes de entrar com “ir”. A função length retorna o número de caracteres da string.
minhacadeia = input('Digite uma string: ', 's') Digite uma string: ir minhacadeia = ir length(minhacadeia) ans = 6
Qual seria o resultado se o usuário inserir espaços em branco depois de outros caracteres? Por exemplo, o usuário aqui inseriu "xyz" seguido de quatro espaços em branco:
meuscarac = input('Inserir caracteres: ', 's') Inserir caracteres: xyz meuscarac = xyz
Os caracteres de espaço seriam armazenados na variável string. É difícil ver acima, mas fica claro a partir do comprimento da string.
length(meuscarac) ans = 7
O comprimento pode ser visto na Janela de Comandos usando o mouse para destacar o valor da variável; o xyz e quatro espaços serão destacados.
Também é possível que o usuário digite apóstrofos delimitando a string, em vez de incluir o segundo argumento 's' na chamada para a função de entrada.
nome = input ('Digite seu nome: ') Digite seu nome: 'Maria'
nome = Maria
No entanto, isso pressupõe que o usuário saberia fazer isso, portanto, é melhor indicar que é desejada a entrada de caracteres, na própria função input. Além disso, se o 's' for especificado e o usuário inserir apóstrofos, eles se tornarão parte da sequência.
nome = input('Digite seu nome: ', 's') Digite seu nome: 'Maria' nome = 'Maria' length(nome) ans = 7
Observe o que acontece se a entrada da cadeia de caracteres (string) não tiver sido especificada, mas o usuário inserir uma letra em vez de um número.
num = input('Digite um número: ') Digite um numero: t Error using input Undefined function ou variabble 't'.
Digite um numero: 3 num = 3
MATLAB deu uma mensagem de erro e repetiu o prompt. No entanto, se 𝑡 for o nome de uma variável, o MATLAB assumirá seu valor como entrada.
t = 11; num = input('Digite um numero: ') Digite um numero: t num = 11
Instruções input separadas são necessárias se mais de uma entrada for desejada. Por exemplo,
x = input('Digite a coordenada x: '); y = input('Digite a coordenada y: ');
Normalmente, em um script , os resultados das instruções input são suprimidos se um ponto e vírgula é digitado no final das instruções de atribuição.
Crie um script que solicite do usuário um comprimento e, em seguida, use "p" para pés ou "m" para metros e armazene as duas entradas em variáveis. Por exemplo, quando executado, ficaria assim (assumindo que o usuário digita 12.3 e depois m):
O que você acha que aconteceria se o caractere nova linha fosse omitido do final de uma instrução fprintf?
Sem ele, o próximo prompt terminaria na mesma linha da saída. Ainda é um prompt , e assim uma expressão pode ser inserida, mas parece confusa como mostrado aqui.
fprintf('O valor é %d, com certeza!',... 4^3) O valor é 64, com certeza!>> 5 + 3 ans = 8
Note que com a função disp , no entanto, o prompt sempre aparecerá na próxima linha:
disp('Oi') Oi
Além disso, observe que as reticências podem ser usadas após uma string, mas não no meio.
Como você pode obter uma linha em branco na saída?
Tendo dois caracteres de nova linha em uma linha.
fprintf('O valor é %d,\n\nOK!\n', 4^3) O valor é 64,
OK!
Isso também indica que o caractere de nova linha pode estar em qualquer lugar da string; quando é impresso, a saída desce para a próxima linha.
Observe que o caractere de nova linha também pode ser usado no prompt da instrução de entrada; por exemplo:
x = input('Digite a coordenada \nx:'); Digite a coordenada x: 4
No entanto, esse é o único caractere de formatação permitido no prompt da função input.
Para imprimir dois valores, deveria haver dois marcadores de posição na cadeia de formatação e duas expressões depois da cadeia de formatação. As expressões preenchem os marcadores de lugar, em sequência.
fprintf ('O int é %d e o char é %c\n',... 33-2, 'x') O int é 31 e o char é x
Uma largura de campo também pode ser incluída no espaço reservado em fprintf , que especifica quantos caracteres serão usados na impressão. Por exemplo, %5d indicaria uma largura de campo de 5 para imprimir um inteiro e %10s indicaria uma largura de campo de 10 para uma cadeia. Para um 𝑓𝑙𝑜𝑎𝑡, o número de casas decimais também pode ser especificado;
casas decimais) com duas casas decimais. Para um 𝑓𝑙𝑜𝑎𝑡, apenas o número de casas decimais também pode ser especificado; por exemplo, %.3f indica três casas decimais, independentemente da largura do campo.
fprintf('O int é %3d e o float é %6.2f\n', 5, 4.9) O int é 5 e o float é 4.
Se a largura do campo for maior que o necessário, os espaços em branco iniciais serão impressos e, se casas decimais são especificadas mais do que o necessário, zeros à direita são impressos.
O que você acha que aconteceria se você tentasse imprimir 1234.5678 em uma largura de campo de 3 com 2 casas decimais?
fprintf('%3.2f\n', 1234.5678)
Ele imprimiria toda a parte inteira 1234 , mas arredondaria as casas decimais para duas casas, ou seja,
Se a largura do campo não for grande o suficiente para imprimir o número, a largura do campo será aumentada. Basicamente, cortar o número daria um resultado enganoso, mas arredondar as casas decimais não altera muito o número.
Sem o caractere nova linha, ele seria impresso em uma linha, mas o próximo prompt apareceria na mesma linha:
fprintf('%d', vet) 2345 >>
No entanto, em um script , um caractere de nova linha separado pode ser impresso para evitar esse problema. Também é muito melhor separar os números com espaços.
imprimevet.m
% Isso demonstra a impressão de um vetor
vet = 2:5; fprintf('%d ', vet) fprintf('\n')
imprimevet 2 3 4 5
Se o número de elementos no vetor for conhecido, muitos caracteres de conversão poderão ser especificados e, em seguida, a nova linha:
fprintf ('%d %d %d %d\n', vet) 2 3 4 5
Isto não é muito geral e, portanto, não é preferível.
Para matrizes, o MATLAB “desenrola” a matriz coluna por coluna. Por exemplo, considere a seguinte matriz 2 𝑥 3 :
mat = [5 9 8; 4 1 10] mat = 5 9 8 4 1 10
Especificar um caractere de conversão e, em seguida, o caractere nova linha imprimirá os elementos da matriz em uma coluna. Os primeiros valores impressos são da primeira coluna, depois da segunda coluna e assim por diante.
fprintf('%d\n', mat) 5 4 9 1 8 10
Se três dos caracteres de conversão %𝑑 forem especificados, a fprintf imprimirá três números em cada linha de saída, mas novamente a matriz é desenrolada coluna por coluna. Novamente, ele imprime primeiro os dois números da primeira coluna (na primeira linha da saída), depois o primeiro valor da segunda coluna e assim por diante.
fprintf('%d %d %d\n', mat) 5 4 9 1 8 10
Se a transposição da matriz for impressa, no entanto, usando os três caracteres de conversão %𝑑, a matriz é impressa como aparece quando criada.
fprintf('%d %d %d\n', mat') % Observe a transposição 5 9 8 4 1 10
Para vetores e matrizes, embora a formatação não possa ser especificada, a função disp pode ser mais fácil de usar em geral do que a fprintf , pois exibe o resultado de maneira direta. Por exemplo,
mat = [15 11 14; 7 10 13] mat = 15 11 14 7 10 13 disp(mat) 15 11 14 7 10 13 vet = 2: vet = 2 3 4 5 disp(vet) 2 3 4 5
Observe que quando loops (laços) forem abordados no Capítulo 5, a formatação da saída de matrizes será mais fácil. Por enquanto, no entanto, disp funciona bem.
Juntando tudo isso agora, podemos implementar o algoritmo usado desde o começo deste capítulo. O script a seguir calcula e imprime a área de um círculo. Ele primeiro solicita ao usuário um raio, lê o raio e depois calcula e imprime a área do círculo com base nesse raio.
circuloES.m
% Este script calcula a área de um círculo % Ele solicita ao usuário o raio
% Solicita ao usuário o raio e calcula % a área com base nesse raio fprintf('Nota: as unidades serão em centímetros.\n') raio = input('Por favor digite o raio: '); area = pi * (raio^2); % Imprime todas as variáveis em um formato de sentença fprintf('Para um círculo com um raio de %.2f centímetros,\n', raio) fprintf ('a área é de %.2f centímetros quadrados\n', area)
A execução do script produz a seguinte saída:
plotaumponto.m
% Esta é uma plotagem muito simples de apenas um ponto!
% Cria variáveis das coordenadas e traça um '' vermelho x = 11; y = 48; plot(x, y, 'r') % Altera e rotula os eixos axis([9 12 35 55]) xlabel('Hora') ylabel('Temperatura') % Coloca um título na plotagem title('Hora e Temperatura')
Na chamada para a função axis , um vetor é passado. Os dois primeiros valores são o mínimo e o máximo para o eixo 𝑥, e os dois últimos são o mínimo e o máximo para o eixo 𝑦. Executar este script traz uma Janela de Figura com o gráfico (veja a Figura 3.2).
Para ser mais geral, o script poderia solicitar ao usuário o tempo e a temperatura, em vez de apenas atribuir valores. Em seguida, a função de axis pode ser usada com base em quaisquer valores de 𝑥 e 𝑦, como no exemplo a seguir:
axis([x-2 x+2 y-10 y+10])
Além disso, embora sejam as coordenadas 𝑥 e 𝑦 de um ponto, as variáveis nomeadas tempo e temperatura podem ser mais simbólicascas do que 𝑥 e 𝑦.
FIGURA 3.2 Plotagem de um ponto de dado
Modifique o ponto de plotagem do script para solicitar ao usuário a hora e a temperatura e defina os eixos com base nesses valores.
Para plotar mais de um ponto, os vetores 𝑥 e 𝑦 são criados para armazenar os valores dos pontos (x, y). Por exemplo, para traçar os pontos
(1, 1) (2, 5) (3, 3) (4, 9) (5, 11) (6, 8)
primeiro, é criado um vetor 𝑥 que possui os valores de x (como eles variam de 1 a 6 em passos de 1 , o operador de dois pontos pode ser usado) e então um vetor 𝑦 é criado com os valores de y. Os itens a seguir criarão (na Janela de Comandos) os vetores 𝑥 e 𝑦 e, em seguida, plotarão os pontos (veja a Figura 3.3).
x = 1: 6; y = [1 5 3 9 11 8]; plot(x, y)
Note que os pontos são traçados com linhas retas desenhadas no meio. Além disso, os eixos são configurados de acordo com os dados; por exemplo, os valores de x variam de 1 a 6 e os valores de y de 1 a 11 , assim é como os eixos são configurados.
Além disso, observe que, nesse caso, os valores x são os índices do vetor y (o vetor y tem seis valores, portanto os índices são repetidos de 1 a 6). Quando este é o caso, não é necessário criar o vetor 𝑥. Por exemplo,
plot(y)
irá traçar exatamente a mesma figura sem usar um vetor 𝑥.
FIGURA 3.3 Plotagem dos pontos dos dados de vetores
Outras funções que são úteis na personalização de gráficos incluem clf , figure , hold , legend e grid. Descrições breves dessas funções são dadas aqui; use help para descobrir mais sobre elas.
clf limpa a Janela de Figura removendo tudo dela.
figure cria uma nova Janela de Figura vazia quando chamada sem quaisquer argumentos. Chamando-a como figura(n) , onde 𝑛 é um número inteiro, é uma maneira de criar e manter várias Janelas de Figura e de referenciar cada individualmente.
hold é uma função alternadora que congela o gráfico atual na Janela de Figura, para que novos gráficos sejam sobrepostos no atual. Apenas hold por si só já é uma alternadora, por isso, chamar esta função uma vez, a ativa, e então, da próxima vez, a desliga. Alternativamente, os comandos hold on e hold off podem ser usados.
legend exibe numa caixa de legenda na Janela de Figura, strings passadas para ela na ordem das plotagens na Janela de Figura.
grid exibe linhas de grade em um gráfico. Chamada por si só, é uma função alternadora que liga (exibe) e desliga (apaga) as linhas de grade. Alternativamente, os comandos grid on e grid off podem ser usados.
Além disso, existem muitos tipos de plotagem. Veremos mais no Capítulo 11, mas outro tipo de plotagem simples é um gráfico de barras.
Por exemplo, o script a seguir cria duas janelas separadas. Primeiro, limpa a Janela de Figura. Em seguida, cria um vetor 𝑥 e dois vetores y diferentes (𝑦 1 e 𝑦 2 ). Na primeira Janela de Figura, os valores 𝑦 1 são plotados usando um gráfico de barras. Na segunda Janela de Figura, ele plota os valores de 𝑦 1 como linhas pretas, coloca hold on para que o próximo gráfico seja sobreposto e plota os valores de 𝑦 2 com círculos pretos. Ele também coloca uma legenda nesse gráfico e usa uma grade. Rótulos e títulos são omitidos neste caso, pois são dados genéricos.
A execução do script seguinte produzirá duas janelas separadas. Se não houver nenhuma outra Janela de Figura ativa, a primeira, que é o gráfico de barras, estará na que está intitulada “Figure 1” no MATLAB. O segundo será na “Figure 2”. Veja a Figura 3.4 para ambos os gráficos.
plota2figuras.m
% Esse cria 2 plotagens diferentes, em 2 diferentes Janelas % de Figura, para demonstrar alguns recursos de plotagem
clf x = 1:5; % Não é necessário y1 = [2 11 6 9 3]; y2 = [4 5 8 6 2]; % Coloca um gráfico de barras na Figura 1 figure(1) bar(x, y1) % Coloca plotagens usando diferentes valores y em um gráfico % com uma legenda figure(2) plot(x, y1, 'k') hold on plot(x, y2, 'ko') grid on legend('y1', 'y2')
FIGURA 3.4 (a) Gráfico de barras produzido pelo script. (b) Plotagem produzida pelo script , com grade e legenda.
Observe que o primeiro e o último pontos estão nos eixos, o que dificulta a visão. É por isso que a função axis é usada com freqüência, pois cria espaço ao redor dos pontos para que todos sejam visíveis.
Modifique o script 𝑝𝑙𝑜𝑡𝑎 2 𝑓𝑖𝑔𝑢𝑟𝑎𝑠 usando a função axis para que todos os pontos sejam facilmente vistos.