Diferenças entre edições de "Manipulação de vetores"
(→Mais sobre a gestão de ficheiros no Octave) |
(→Exercícios) |
||
(Há 19 revisões intermédias de 3 utilizadores que não estão a ser apresentadas) | |||
Linha 1: | Linha 1: | ||
Existem muitas formas de manipular vetores no Octave. | Existem muitas formas de manipular vetores no Octave. | ||
− | === | + | === Definição de um vetor === |
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. | 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. | ||
<syntaxhighlight> | <syntaxhighlight> | ||
− | + | >> vel = [ 50 50 70 90 120 ] | |
vel = | vel = | ||
50 50 70 90 120 | 50 50 70 90 120 | ||
− | + | >> peso = [ 82.4, 82.7, 82.5] | |
peso = | peso = | ||
82.400 82.700 82.500 | 82.400 82.700 82.500 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | === | + | ===== Notação (formato dos números apresentados) ===== |
− | + | Lembre-se que os números podem ser apresentados de forma ligeiramente diferente, usando comandos como: | |
<syntaxhighlight> | <syntaxhighlight> | ||
− | + | >> format long | |
− | + | >> format long g | |
− | + | >> format short | |
− | + | >> format free | |
− | + | ||
− | + | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | pode alterar a forma de apresentação dos números. Para experimentar os comandos anteriores, deverá indicar o formato e depois mostrar o vetor. | |
+ | |||
+ | Exemplo: | ||
<syntaxhighlight> | <syntaxhighlight> | ||
− | + | >> format long g | |
− | + | >> peso = [82.4, 82.7, 82.5] | |
− | + | peso = | |
− | + | 82.4 82.7 82.5 | |
− | + | >> | |
− | + | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Outro exemplo: | |
<syntaxhighlight> | <syntaxhighlight> | ||
− | + | >> format free | |
− | + | >> peso | |
− | + | peso = | |
− | + | 82.4 82.7 82.5 | |
− | + | >> | |
− | + | </syntaxhighlight> | |
− | + | ||
− | + | Para saber mais sobre os formatos possíveis, faça: | |
+ | |||
+ | <syntaxhighlight> | ||
+ | >> help format | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | === | + | === Definição de um vetor por compreensão === |
− | + | Pode-se definir um vetor sem ter que enumerar todos os seus elementos. Uma forma muito simpática de o fazer é através da indicação do valor inicial, um incremento e o limite. O operador usa-se da seguinte forma: | |
''valor inicial: incremento: limite'' | ''valor inicial: incremento: limite'' | ||
+ | |||
+ | No caso seguinte usa-se: | ||
+ | |||
+ | valor inicial = 0 | ||
+ | |||
+ | incremento = 5 | ||
+ | |||
+ | limite = 20 | ||
<syntaxhighlight> | <syntaxhighlight> | ||
− | + | >> 0:5:20 | |
ans = | ans = | ||
− | + | 0 5 10 15 20 | |
</syntaxhighlight> | </syntaxhighlight> | ||
− | Desta forma é muito fácil, por exemplo, | + | Desta forma é muito fácil, por exemplo, definir um vetor com os valores de 1 a 10. |
<syntaxhighlight> | <syntaxhighlight> | ||
− | + | >> x = 1:1:10 | |
x = | x = | ||
1 2 3 4 5 6 7 8 9 10 | 1 2 3 4 5 6 7 8 9 10 | ||
− | |||
− | |||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 78: | Linha 84: | ||
<syntaxhighlight> | <syntaxhighlight> | ||
− | + | >> 15:20 | |
ans = | ans = | ||
15 16 17 18 19 20 | 15 16 17 18 19 20 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Alternativamente, pode-se usar a função <code>linspace</code> para gerar um vetor com N elementos, igualmente espaçados entre o valor inicial e final, usando a sintaxe: | ||
+ | |||
+ | <syntaxhighlight> | ||
+ | linspace(inicial,final,N) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Para obter um vetor com 6 elementos, igualmente espaçados entre 1 e 10, escreve-se: | ||
+ | |||
+ | <syntaxhighlight> | ||
+ | >> linspace(1,10,6) | ||
+ | ans = | ||
+ | |||
+ | 1.0000 2.8000 4.6000 6.4000 8.2000 10.0000 | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Feedback === | ||
+ | |||
+ | Quando se define um vetor, o octave apresenta imediatamente o mesmo, como aconteceu nos exercícios anteriores. Caso não se pretenda ter esse feedback, termina-se a instrução com <code>;</code>. No exemplo seguinte define-se um vetor x com e sem <code>;</code> no fim da instrução. | ||
+ | |||
+ | <syntaxhighlight> | ||
+ | >> x = 1:10 | ||
+ | x = | ||
+ | 1 2 3 4 5 6 7 8 9 10 | ||
+ | >> x = 1:10; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Indexar vetor === | ||
+ | |||
+ | Pode-se indicar um índice para aceder a uma parte do vetor. | ||
+ | |||
+ | Estude as seguintes formas de indexar parte de um vetor: | ||
+ | |||
+ | <syntaxhighlight> | ||
+ | >> peso = [ 82.4, 82.7, 82.5] | ||
+ | peso = | ||
+ | 82.4 82.7 82.5 | ||
+ | >> peso(1) | ||
+ | ans = 82.4 | ||
+ | >> peso(2) | ||
+ | ans = 82.7 | ||
+ | >> peso(3) | ||
+ | ans = 82.5 | ||
+ | >> peso(2:3) | ||
+ | ans = | ||
+ | 82.7 82.5 | ||
+ | >> peso(end) | ||
+ | ans = 82.5 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Operações === | ||
+ | |||
+ | Se aplicar um operador normal, como a multiplicação, a um argumento do tipo vetor, o mesmo é aplicado a todos os elementos do vetor. | ||
+ | |||
+ | <syntaxhighlight> | ||
+ | >> val = [1 2 3 4 5] | ||
+ | val = | ||
+ | 1 2 3 4 5 | ||
+ | >> val*2 | ||
+ | ans = | ||
+ | 2 4 6 8 10 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Da mesma forma, pode aplicar uma função a todos os elementos de um vetor. | ||
+ | |||
+ | <syntaxhighlight> | ||
+ | >> valores = [0 pi/2 pi] | ||
+ | valores = | ||
+ | 0.00000 1.57080 3.14159 | ||
+ | >> sin(valores) | ||
+ | ans = | ||
+ | 0.00000 1.00000 0.00000 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Operadores sobre os elementos dos vectores | ||
+ | |||
+ | <syntaxhighlight> | ||
+ | >> x = [4 5 6 7 8] | ||
+ | x = | ||
+ | 4 5 6 7 8 | ||
+ | >> x^2 | ||
+ | error: for A^b, A must be square | ||
+ | >> x.^2 | ||
+ | ans = | ||
+ | |||
+ | 16 25 36 49 64 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 89: | Linha 183: | ||
# Seja x = [1 2 3 4 5]. | # Seja x = [1 2 3 4 5]. | ||
## Calcule os valores da função y = -3x^2 +4x -1, para os valores de x. | ## Calcule os valores da função y = -3x^2 +4x -1, para os valores de x. | ||
− | |||
## Calcule o máximo valor de y (no domínio definido por x). | ## Calcule o máximo valor de y (no domínio definido por x). | ||
# 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. | # 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. | ||
Linha 95: | Linha 188: | ||
#* Seja quantidade = [2 6 3] | #* Seja quantidade = [2 6 3] | ||
## Calcule o preço a pagar por cada um dos artigos, atendendo à quantidade. | ## Calcule o preço a pagar por cada um dos artigos, atendendo à quantidade. | ||
− | ## Calcule valor total, isto é o valor | + | ## Calcule valor total, isto é o valor a pagar por todos os artigos multiplicados pelas respectivas quantidades. |
+ | # Crie um vetor com todos os múltiplos de 5 ou 7 entre 100 e 200 | ||
{| class="collapsible collapsed wikitable" | {| class="collapsible collapsed wikitable" | ||
Linha 151: | Linha 245: | ||
| <syntaxhighlight>dot(preco,quantidade) | | <syntaxhighlight>dot(preco,quantidade) | ||
ans = 52.600 | ans = 52.600 | ||
+ | </syntaxhighlight> | ||
+ | |- | ||
+ | | 4 | ||
+ | | Múltiplos de 5 ou 7 entre 100 e 200 | ||
+ | | <syntaxhighlight>num = 100:200; | ||
+ | mult = num(or(mod(num, 5) == 0, mod(num, 7) == 0)) | ||
+ | </syntaxhighlight> | ||
+ | |- | ||
+ | | | ||
+ | | Outra forma de resolver | ||
+ | | <syntaxhighlight>mul5 = 100:5:200; | ||
+ | mul7 = 105:7:200; | ||
+ | unique(sort(horzcat(mul5, mul7))) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |} | ||
− | === | + | === Grandes vetores === |
+ | No Octave pode-se guardar uma ou mais variáveis num documento para posterior utilização. No documento <code>heartrate.m</code>, disponível em http://octave.di.uminho.pt/images/files/ tem a definição de um vetor chamado <code>bpm</code>. | ||
+ | Descarregue o documento, e depois leia o vetor <code>bpm</code> do documento <code>heartrate.m</code>. | ||
− | |||
<syntaxhighlight> | <syntaxhighlight> | ||
− | + | >> load heartrate.m bpm | |
+ | |||
+ | >> load "C:/Users/jgr/Downloads/heartrate.m" | ||
+ | >> who | ||
+ | Variables in the current scope: | ||
+ | ans bpm | ||
+ | >> bpm | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 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. | |
− | + | ||
− | + | ||
− | + | ||
+ | i) Diga quantos valores tem o vetor <code>bpm</code>, ou seja, qual o comprimento ou dimensão do vetor <code>bpm</code>. | ||
− | |||
<syntaxhighlight> | <syntaxhighlight> | ||
− | + | length(bpm) | |
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ||
+ | ii) Diga qual o valor mínimo do vetor. | ||
<syntaxhighlight> | <syntaxhighlight> | ||
− | + | min(bpm) | |
− | + | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
ii) Diga qual o valor máximo do vetor. | ii) Diga qual o valor máximo do vetor. | ||
+ | |||
+ | <syntaxhighlight> | ||
+ | max(bpm) | ||
+ | </syntaxhighlight> | ||
iii) Diga quantas vezes se registaram batimentos acima dos 160. | iii) Diga quantas vezes se registaram batimentos acima dos 160. | ||
+ | |||
+ | <syntaxhighlight> | ||
+ | fortes = bpm(bpm > 160); | ||
+ | length(fortes) | ||
+ | </syntaxhighlight> | ||
iv) Diga qual a média dos batimentos cardíacos. | iv) Diga qual a média dos batimentos cardíacos. | ||
+ | <syntaxhighlight> | ||
mean(bpm) | mean(bpm) | ||
− | / | + | </syntaxhighlight> |
+ | ou | ||
+ | <syntaxhighlight> | ||
+ | sum(bpm)/length(bpm) | ||
+ | </syntaxhighlight> | ||
− | v) Mostre apenas os primeiros 5 elementos do vetor bpm | + | v) Mostre apenas os primeiros 5 elementos do vetor <code>bpm</code>. |
+ | |||
+ | <syntaxhighlight> | ||
+ | bpm(1:5) | ||
+ | </syntaxhighlight> |
Revisão das 10h02min de 19 de outubro de 2016
Existem muitas formas de manipular vetores no Octave.
Índice
Definição de um vetor
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.
>> vel = [ 50 50 70 90 120 ] vel = 50 50 70 90 120 >> peso = [ 82.4, 82.7, 82.5] peso = 82.400 82.700 82.500
Notação (formato dos números apresentados)
Lembre-se que os números podem ser apresentados de forma ligeiramente diferente, usando comandos como:
>> format long >> format long g >> format short >> format free
pode alterar a forma de apresentação dos números. Para experimentar os comandos anteriores, deverá indicar o formato e depois mostrar o vetor.
Exemplo:
>> format long g >> peso = [82.4, 82.7, 82.5] peso = 82.4 82.7 82.5 >>
Outro exemplo:
>> format free >> peso peso = 82.4 82.7 82.5 >>
Para saber mais sobre os formatos possíveis, faça:
>> help format
Definição de um vetor por compreensão
Pode-se definir um vetor sem ter que enumerar todos os seus elementos. Uma forma muito simpática de o fazer é através da indicação do valor inicial, um incremento e o limite. O operador usa-se da seguinte forma:
valor inicial: incremento: limite
No caso seguinte usa-se:
valor inicial = 0
incremento = 5
limite = 20
>> 0:5:20 ans = 0 5 10 15 20
Desta forma é muito fácil, por exemplo, definir um vetor com os valores de 1 a 10.
>> x = 1:1:10 x = 1 2 3 4 5 6 7 8 9 10
Pode ser abreviado para valor inicial: limite assumindo-se que o incremento é 1. Pode-se fazer, por exemplo:
>> 15:20 ans = 15 16 17 18 19 20
Alternativamente, pode-se usar a função linspace
para gerar um vetor com N elementos, igualmente espaçados entre o valor inicial e final, usando a sintaxe:
linspace(inicial,final,N)
Para obter um vetor com 6 elementos, igualmente espaçados entre 1 e 10, escreve-se:
>> linspace(1,10,6) ans = 1.0000 2.8000 4.6000 6.4000 8.2000 10.0000
Feedback
Quando se define um vetor, o octave apresenta imediatamente o mesmo, como aconteceu nos exercícios anteriores. Caso não se pretenda ter esse feedback, termina-se a instrução com ;
. No exemplo seguinte define-se um vetor x com e sem ;
no fim da instrução.
>> x = 1:10 x = 1 2 3 4 5 6 7 8 9 10 >> x = 1:10;
Indexar vetor
Pode-se indicar um índice para aceder a uma parte do vetor.
Estude as seguintes formas de indexar parte de um vetor:
>> peso = [ 82.4, 82.7, 82.5] peso = 82.4 82.7 82.5 >> peso(1) ans = 82.4 >> peso(2) ans = 82.7 >> peso(3) ans = 82.5 >> peso(2:3) ans = 82.7 82.5 >> peso(end) ans = 82.5
Operações
Se aplicar um operador normal, como a multiplicação, a um argumento do tipo vetor, o mesmo é aplicado a todos os elementos do vetor.
>> val = [1 2 3 4 5] val = 1 2 3 4 5 >> val*2 ans = 2 4 6 8 10
Da mesma forma, pode aplicar uma função a todos os elementos de um vetor.
>> valores = [0 pi/2 pi] valores = 0.00000 1.57080 3.14159 >> sin(valores) ans = 0.00000 1.00000 0.00000
Operadores sobre os elementos dos vectores
>> x = [4 5 6 7 8] x = 4 5 6 7 8 >> x^2 error: for A^b, A must be square >> x.^2 ans = 16 25 36 49 64
Exercícios
- Crie um vetor com todos os múltiplos de 3, entre 1 e 100.
- Seja x = [1 2 3 4 5].
- Calcule os valores da função y = -3x^2 +4x -1, para os valores de x.
- Calcule o máximo valor de y (no domínio definido por x).
- 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.
- Seja preco = [ 2.45, 3.95, 8]
- Seja quantidade = [2 6 3]
- Calcule o preço a pagar por cada um dos artigos, atendendo à quantidade.
- Calcule valor total, isto é o valor a pagar por todos os artigos multiplicados pelas respectivas quantidades.
- Crie um vetor com todos os múltiplos de 5 ou 7 entre 100 e 200
Soluções dos exercícios | Resumo | Resposta |
---|---|---|
1 | Múltiplos de 3 | 3:3:100 |
2 | Dados do problema | x = [1 2 3 4 5] |
2.1 | Calcular os valores da função y | y = -3*x.^2 + 4*x -1 y = 0 -5 -16 -33 -56 |
2.2 | Máximo de y | max(y) ans = 0 |
3 | Dados do problema | preco = [ 2.45, 3.95, 8 ] quantidade = [2 6 3] |
3.1 | Valor a pagar por cada artigo (preço x quantidade) | preco .* quantidade ans = 4.9000 23.7000 24.0000 |
3.2 | Valor total a pagar | sum(preco .* quantidade) ans = 52.600 |
Valor total a pagar | preco * quantidade' ans = 52.600 | |
Valor total a pagar | dot(preco,quantidade) ans = 52.600 | |
4 | Múltiplos de 5 ou 7 entre 100 e 200 | num = 100:200; mult = num(or(mod(num, 5) == 0, mod(num, 7) == 0)) |
Outra forma de resolver | mul5 = 100:5:200; mul7 = 105:7:200; unique(sort(horzcat(mul5, mul7))) |
Grandes vetores
No Octave pode-se guardar uma ou mais variáveis num documento para posterior utilização. No documento heartrate.m
, disponível em http://octave.di.uminho.pt/images/files/ tem a definição de um vetor chamado bpm
.
Descarregue o documento, e depois leia o vetor bpm
do documento heartrate.m
.
>> load heartrate.m bpm >> load "C:/Users/jgr/Downloads/heartrate.m" >> who Variables in the current scope: ans bpm >> bpm
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.
i) Diga quantos valores tem o vetor bpm
, ou seja, qual o comprimento ou dimensão do vetor bpm
.
length(bpm)
ii) Diga qual o valor mínimo do vetor.
min(bpm)
ii) Diga qual o valor máximo do vetor.
max(bpm)
iii) Diga quantas vezes se registaram batimentos acima dos 160.
fortes = bpm(bpm > 160); length(fortes)
iv) Diga qual a média dos batimentos cardíacos.
mean(bpm)
ou
sum(bpm)/length(bpm)
v) Mostre apenas os primeiros 5 elementos do vetor bpm
.
bpm(1:5)