http://octave.di.uminho.pt/api.php?action=feedcontributions&user=Carla&feedformat=atomGNU Octave - Contribuições do utilizador [pt]2024-03-28T10:08:53ZContribuições do utilizadorMediaWiki 1.25.2http://octave.di.uminho.pt/index.php?title=Manipula%C3%A7%C3%A3o_de_vetores&diff=107Manipulação de vetores2012-11-19T03:26:09Z<p>Carla: /* Grandes vetores */</p>
<hr />
<div>Existem muitas formas de manipular vetores no Octave.<br />
<br />
=== Constantes ===<br />
<br />
A forma mais simples de definir um vetor em Octave é listando os valores do mesmo entre '[' e ']'. Pode separar cada um dos elementos com vírgulas ou com espaços.<br />
<br />
<syntaxhighlight><br />
octave:1> vel = [ 50 50 70 90 120 ]<br />
vel =<br />
50 50 70 90 120<br />
octave:2> peso = [ 82.4, 82.7, 82.5]<br />
peso =<br />
82.400 82.700 82.500<br />
</syntaxhighlight><br />
<br />
=== Operações ===<br />
<br />
Se aplicar um operador normal, como a multiplicação, a um argumento do tipo vetor, o mesmo é aplicado a todos os elementos do vetor.<br />
<br />
<syntaxhighlight><br />
octave:13> val = [1 2 3 4 5]<br />
val =<br />
1 2 3 4 5<br />
octave:14> val*2<br />
ans =<br />
2 4 6 8 10<br />
</syntaxhighlight><br />
<br />
Da mesma forma, pode aplicar uma função a todos os elementos de um vetor.<br />
<br />
<syntaxhighlight><br />
octave:15> valores = [0 pi/2 pi]<br />
valores =<br />
0.00000 1.57080 3.14159<br />
octave:16> sin(valores)<br />
ans =<br />
0.00000 1.00000 0.00000<br />
</syntaxhighlight><br />
<br />
Operadores unários<br />
<br />
<syntaxhighlight><br />
octave:32> x = 4:8<br />
x =<br />
4 5 6 7 8<br />
octave:33> x^2<br />
error: for A^b, A must be square<br />
octave:33> x.^2<br />
ans =<br />
<br />
16 25 36 49 64<br />
</syntaxhighlight><br />
<br />
=== Geração de vetores ===<br />
<br />
Existe um operador específico para gerar vetores utilizando um valor inicial, um incremento e um limite. O operador usa-se da seguinte forma:<br />
<br />
''valor inicial: incremento: limite''<br />
<br />
<syntaxhighlight><br />
octave:30> 1:1/3:3<br />
ans =<br />
1.0000 1.3333 1.6667 2.0000 2.3333 2.6667 3.0000<br />
</syntaxhighlight><br />
<br />
Desta forma é muito fácil, por exemplo, calcular os valores da função y = 2 * x - 3 para os valores de 1 a 10.<br />
<br />
<syntaxhighlight><br />
octave:34> x = 1:1:10<br />
x =<br />
1 2 3 4 5 6 7 8 9 10<br />
octave:35> y = 2*x-3<br />
y =<br />
-1 1 3 5 7 9 11 13 15 17<br />
</syntaxhighlight><br />
<br />
Pode ser abreviado para ''valor inicial: limite'' assumindo-se que o incremento é 1. Pode-se fazer, por exemplo:<br />
<br />
<syntaxhighlight><br />
octave:1> 15:20<br />
ans =<br />
<br />
15 16 17 18 19 20<br />
</syntaxhighlight><br />
<br />
=== Exercícios ===<br />
<br />
# Crie um vetor com todos os múltiplos de 3, entre 1 e 100.<br />
# Seja x = [1 2 3 4 5].<br />
## Calcule os valores da função y = -3x^2 +4x -1, para os valores de x.<br />
## Calcule o máximo valor de y (no domínio definido por x).<br />
## Calcule o máximo valor de y (no domínio definido por x).<br />
# Considere os seguintes dados. Tem 3 artigos diferentes, cada um com o seu preço unitário, e quer adquirir determinadas quantidades de cada um desses artigos.<br />
#* Seja preco = [ 2.45, 3.95, 8]<br />
#* Seja quantidade = [2 6 3]<br />
## Calcule o preço a pagar por cada um dos artigos, atendendo à quantidade.<br />
## Calcule valor total, isto é o valor apagar por todos os artigos multiplicados pelas respectivas quantidades.<br />
<br />
{| class="collapsible collapsed wikitable"<br />
|-<br />
! Soluções dos exercícios<br />
! Resumo<br />
! Resposta<br />
|-<br />
| 1<br />
| Múltiplos de 3<br />
| <syntaxhighlight>3:3:100</syntaxhighlight><br />
|-<br />
| 2<br />
| Dados do problema<br />
| <syntaxhighlight>x = [1 2 3 4 5]</syntaxhighlight><br />
|-<br />
| 2.1<br />
| Calcular os valores da função y<br />
| <syntaxhighlight>y = -3*x.^2 + 4*x -1<br />
y =<br />
0 -5 -16 -33 -56<br />
</syntaxhighlight><br />
|-<br />
| 2.2<br />
| Máximo de y<br />
| <syntaxhighlight>max(y)<br />
ans = 0<br />
</syntaxhighlight><br />
|-<br />
| 3<br />
| Dados do problema<br />
| <syntaxhighlight>preco = [ 2.45, 3.95, 8 ]<br />
quantidade = [2 6 3]<br />
</syntaxhighlight><br />
|-<br />
| 3.1<br />
| Valor a pagar por cada artigo (preço x quantidade)<br />
| <syntaxhighlight>preco .* quantidade<br />
ans =<br />
4.9000 23.7000 24.0000<br />
</syntaxhighlight><br />
|-<br />
|rowspan="3"|3.2<br />
| Valor total a pagar<br />
| <syntaxhighlight>sum(preco .* quantidade)<br />
ans = 52.600<br />
</syntaxhighlight><br />
|-<br />
| Valor total a pagar<br />
| <syntaxhighlight>preco * quantidade'<br />
ans = 52.600<br />
</syntaxhighlight><br />
|-<br />
| Valor total a pagar<br />
| <syntaxhighlight>dot(preco,quantidade)<br />
ans = 52.600<br />
</syntaxhighlight><br />
|}<br />
<br />
=== Grandes vetores ===<br />
No Octave pode-se guardar uma ou mais variáveis num arquivo para posterior utilização. No arquivo heartrate.m, disponível em http://octave.di.uminho.pt/images/files/ tem a definição de um vetor chamado bpm.<br />
Descarregue o arquivo, e depois leia o vetor bpm do arquivo heartrate.m, com o comando:<br />
<syntaxhighlight><br />
octave:1> load heartrate.m bpm<br />
<br />
octave:1> load "C:/Users/jgr/Downloads/heartrate.m"<br />
octave:2> who<br />
Variables in the current scope:<br />
ans bpm<br />
octave:3> bpm<br />
</syntaxhighlight><br />
<br />
Neste vetor estão registados os batimentos cardíacos (batimentos por minuto) registados com intervalos de 5 segundos. O registo começou às 08:40:19 do dia 2012-10-03.<br />
<br />
i) Diga quantos valores (comprimento) tem o vetor bpm.<br />
<br />
ii) Diga qual o valor mínimo do vetor.<br />
<br />
ii) Diga qual o valor máximo do vetor.<br />
<br />
iii) Diga quantas vezes se registaram batimentos acima dos 160.<br />
<br />
iv) Diga qual a média dos batimentos cardíacos.<br />
<br />
<syntaxhighlight><br />
mean(bpm)<br />
</syntaxhighlight><br />
ou<br />
<syntaxhighlight><br />
sum(bpm)/length(bpm)<br />
</syntaxhighlight><br />
<br />
v) Mostre apenas os primeiros 5 elementos do vetor bpm</div>Carlahttp://octave.di.uminho.pt/index.php?title=Programas&diff=106Programas2012-11-19T01:58:41Z<p>Carla: /* Exemplo */</p>
<hr />
<div>Para resolver problemas mais ou menos complexos, em vez de se escreverem os comandos no prompt do Octave, podemos escrever os mesmos numa ''script''. Chama-se script a esta sequência de comandos guardados. Estão prontos a serem executados a qualquer momento e podem-se enviar para outros colegas, para executarem a mesma script. Os comandos são guardados num documento com a extensão ''.m''. Tudo o que se escreve no prompt, pode-se escrever numa script.<br />
<br />
Portanto, sempre que haja necessidade de repetir diversas vezes as mesmas operações, torna-se mais interessante juntar essas operações numa script.<br />
<br />
Uma script é invocada pelo seu nome, sem a extensão ''.m''. Ao ser invocada, todas as instruções são processadas, como se tivessem sido lançadas no prompt do Octave.<br />
<br />
==== Exemplo ====<br />
<br />
A primeira script que vamos escrever sistematiza o cálculo da área de um retângulo. Obviamente é um cálculo muito simples, mas a ideia é começar com uma script muito pequena.<br />
<br />
<syntaxhighlight><br />
# minha primeira script em octave<br />
# para executar a script, basta fazer no prompt do octave:<br />
# arearetangulo<br />
#<br />
largura = input("Largura?\n");<br />
comprimento = input("Comprimento?\n");<br />
area = largura * comprimento;<br />
printf("A área é: %g\n", area);<br />
</syntaxhighlight><br />
<br />
Em primeiro lugar, é preciso escrever as instruções apresentadas num editor de texto qualquer. Qualquer editor serve, desde que guarde o documento em formato de texto. TEM QUE FICAR GUARDADO COM O NOME '''arearetangulo.m''' e obrigatoriamente na pasta onde está a executar o Octave.<br />
<br />
Depois de guardada a script na pasta atual do Octave (reveja a forma de [[Gestão de ficheiros | saber e mudar a pasta atual]]) inicia-se a mesma utilizando o nome (sem a extensão). Exemplo:<br />
<br />
<syntaxhighlight><br />
octave:2> arearetangulo<br />
Largura?<br />
90<br />
Comprimento?<br />
120<br />
A área é: 10800<br />
</syntaxhighlight><br />
<br />
=== Edição de scripts (em Windows) ===<br />
<br />
Para editar as scripts, use um editor simples como o Notepad em Windows. Confirme que as script estão a ser gravadas com a extensão .m. Confirme sempre, dentro do Octave que as scripts existem, fazendo:<br />
<syntaxhighlight><br />
dir *.m<br />
</syntaxhighlight><br />
<br />
Se quiser investir um pouco de tempo, explore a GUI (interface gráfica) existente para Windows. Em vez de arrancar o Octave com o atalho ''Octave 3.6.2'', escolha no menu iniciar, dentro de ''Todos os Programas'', e depois dentro de ''GNU Octave (3.6.2)'' a programa ''Octave 3.6.2 (Graphical User-Interface)''.<br />
<br />
É uma interface ainda pouco robusta, mas que inclui um editor. Esse editor é sensível à sintaxe do Octave. Na imagem seguinte, mostra-se esta GUI, com o editor de scripts aberto.<br />
<br />
[[Ficheiro:Octave gui com editor.png]]<br />
<br />
=== Edição de scripts (em Linux) ===<br />
<br />
No Linux, sugere-se a utilização do QtOctave.<br />
<br />
=== Exercícios ===<br />
<br />
# Escreva uma script para calcular a velocidade de um veículo, dada a distância percorrida em Km e o tempo em minutos.<br />
# Escreva uma script que calcula a idade de uma pessoa, sabendo o ano de nascimento<br />
# Dado o valor em Fahreneit, calcule a correspondente temperatura em Celcius, escrevendo uma script para o efeito.<br />
<br />
=== Âmbito das variáveis ===<br />
<br />
Na seguinte script <syntaxhighlight enclose="none">idade.m</syntaxhighlight>, utiliza-se uma variável <syntaxhighlight enclose="none">idade</syntaxhighlight> que tem o mesmo nome que a script. ''Neste caso, temos uma sobreposição que é vivamente desaconselhada.'' No caso concreto, depois de correr a script, a mesma não poderá ser novamente executada, porque <syntaxhighlight enclose="none">idade</syntaxhighlight> passa a ser uma referência para a variável e não para a script.<br />
<br />
<syntaxhighlight><br />
# idade.m<br />
# script octave<br />
# calcular a idade de uma pessoa<br />
#<br />
# ESTA SCRIPT TEM UM ERRO.<br />
# Esta script usa uma variável global 'idade' que é igual ao nome da script 'idade.m'.<br />
# Não se deve usar variáveis em scripts iguais aos nomes das scripts.<br />
#<br />
# Desta forma, só se consegue chamar a script uma vez<br />
# Depois disso, 'idade' passa a ser uma referência para a variável e não para a script.<br />
ano = input("Ano de nascimento?\n");<br />
idade = 2012 - ano;<br />
printf("Você tem %d anos de idade\n", idade);<br />
</syntaxhighlight></div>Carla