sexta-feira, 17 de abril de 2009

Tutorial Scilab - 6 [Vetores e Matrizes - 4]

[English version here.]

Primeiro gostaria de me explicar com os leitores do MultiSign. Eu passei estes dias (quase 3 semanas) sem fazer nenhuma postagem porque estava envolvido com as atividades da Semana Santa, festas pascais e um artigo que espero finalizar hoje.

Voltando ao assunto. Vamos ver agora como fazer operações lógicas com vetores e matrizes.

Um exemplo:

Vamos supor que o vetor a seguir corresponde a altura, em metros, de um conjunto de pesoas.

v = [1.55 1.82 1.48 1.71 1.62 1.94 2.00]'

Precisamos então identificar as pessoas que têm mais de 1,80m.

Uma solução direta é analizar elemento por elemento:

v(1) > 1.80
v(2) > 1.80
v(3) > 1.80
v(4) > 1.80
v(5) > 1.80
v(6) > 1.80
v(7) > 1.80

Mas o Scilab tem uma forma mais prática de fazer isso:

v > 1.8 // esta operação não depende da dimensionalidade ou tamanho do vetor

Vamos fazer um script.

-->v = [1.55 1.82 1.48 1.71 1.62 1.94 2.00]'
v =

1.55
1.82
1.48
1.71
1.62
1.94
2.

-->v > 1.8
ans =

F
T
F
F
F
T
T

Mas, se o que desejamos é saber a posição dos elementos (pessoas) com mais de 1,80m:

-->pos = find(v > 1.8)
pos =

2. 6. 7.

Os elementos em v que são maiores que 1,80 são o segundo (1,82), sexto (1,94) e sétimo (2,00).

Podemos fazer a mesma coisa com matrizes.

Um exemplo muito útil é criar uma matriz binária em que a probabilidade de um elemento ser 0 (zero) é a mesma dele ser 1 (um).

Olhem o script e me dêem um feedback.

-->x = rand(3, 3)
x =

0.5667211 0.0568928 0.7279222
0.5711639 0.5595937 0.2677766
0.8160110 0.1249340 0.5465335

-->y = x > 0.5
y =

T F T
T T F
T F T

Para instigá-los, eu pergunto por que tem tantos T's a mais que F's?