Entrando e
operando com matrizes
Vetores e matrizes são os tipos
básicos da linguagem MATLAB. É necessário
conhecer bem o como o MATLAB lida com as matrizes para se utilizar plenamente
a linguagem.
Vamos começar com um exemplo. Suponha que se queira efetuar a multiplicação da matriz A com o vetor b dados por :
Vamos primeiro entrar com os dados de A e b para depois efetuarmos a multiplicação.>> b = [ 2 3]Essa notação é bem simples: um vetor é apenas uma seqüência de números entre colchetes, separados por espaços em branco.
>> A = [1 2; 0 1]Ou seja, uma matriz é uma seqüência de linhas separadas por ";". E cada linha é uma seqüência de números separados por espaços em branco. Note que com essa notação podemos considerar o vetor v como sendo uma matriz 1x2.
Temos duas multiplicações possíveis
: multiplicar a matriz à direita - b.A - e à
esquerda - A.b . Vamos começar por b.A:
Basta entrar com o operador "*" - o mesmo operador
que efetua a multiplicação de dois números :
>> b*AO resultado será exibido no Command Window.
Na multiplicação A.b devemos notar que as dimensões de A e b não são compatíveis. A é 2x2 e b é 1x2. Se desejarmos efetuar a multiplicação de A com o vetor 2x1 correspondente a b, podemos entrar com o comando:
>>b_coluna = [2; 3]Entrando nesse formato o vetor b_coluna passa a ter dimensão 2x1. Agora a multiplicação da matriz A à esquerda é possível.
>> A*b_coluna
Uma alternativa mais elegante é usar o
operador de transposição de matrizes - " ' "
- para se obter o b_coluna :
>>b_coluna = b'Ou até efetuar a multiplicação diretamente
>>A*b'
Vamos agora a outro exemplo: suponha que se queira
resolver o sistema linear A.x = b , com A
e b dados como no exemplo anterior.
Temos portanto que efetuar a multiplicação
A-1
.b . Como o MATLAB possui um operador de inversão de matrizes,
isso pode ser feito em uma linha de comando:
>>x = inv(A)*b'
Acessando
elementos das matrizes - o operador " : "
Suponha que tenhamos na memória
a matriz C:
Se quisermos alterar o elemento posicionado na 2a.
linha, 2a. coluna, somando 1 a ele basta escrever
>> C(2,2) = C(2,2) + 1 ;
A matriz resultante será
Podemos também acessar toda uma linha ou coluna de uma só vez. O operador " : " permite esse tipo de acesso. Por exemplo, para alterar toda a 1.a linha da matriz C para [3 2 1] escrevemos
>> C(1, : ) = [3 2 1]O significado do comando acima é, tome a primeira linha de C, com todas as colunas, e substitua o seu valor pelo vetor [3 2 1]. O resultado será
O operador ":" também pode ser usado para se acessar parte da matriz. Por exemplo, a submatriz D, composta dos elementos pertencentes as duas primeiras linhas e das duas últimas colunas pode ser obtida com o comando
>>D = C(1:2, 2:3);O significado é, tome as linhas de 1 até 2 e as colunas de 2 até 3. O resultado será
O operador ":" tem também função na geração de vetores, especialmente vetores sequenciais. Por exemplo, s1 = [1 2 3 4 ... 100 ] pode ser gerado por
>> s1 = 1:100
O comando
>>s2 = 1:0.5:5resultará no vetor s2 = [1 1.5 2 2.5 3 3.5 4 4.5] Ou seja, um vetor com valores crescentes de 1 até 5, com incremento de 0.5.
Para gerar a sequencia dos primeiros 10 quadrados perfeitos o comando é
>> s3 = (1:10) .^ 2
Como podemos ver nos exemplos acima, a linguagem
MATLAB é uma ótima ferramenta para manipulação
de matrizes. Estas são tratadas de modo bastante natural
e intuitivo pela linguagem. Além disso o MATLAB é
bastante eficiente nas operações que envolvem matrizes, o
que em gera um impacto positivo na performance de muitas aplicações.
Além dos operadores vistos nos exemplos o
MATLAB possui um grande número de operadores e de funções
para gerar e manipular matrizes. Segue uma lista com uma pequena
amostra das funções disponíveis:
É importante saber também que grande
parte das funções disponíveis no MATLAB, como
sin(x) e cos(x), admitem matrizes como parâmetros, efetuando
a operação em cada elemento da matriz. Isso possibilita
uma concisão muito grande na escrita de programas. Além
disso, é preferível usar a notação matricial
do que rotinas equivalentes com FOR ou WHILE pois o MATLAB é interpretado,
mas é muito eficiente em cálculos matriciais.