quarta-feira, 1 de novembro de 2017

Crescimento da Phoenix Canariensis desde a semente

Primeiro rebenta a raiz que penetra fundo no solo. Depois, a alguns milímetros de distnacia da semente, nasce o caule (a partir da raiz) que se dirige para a superfície. Após cerca de 1 mês na terra a raiz já pode atingir facilmente os 10 cm de comprimento:



Evolução da Phoenix Canariensis (n.º 1)

A 1 de Novembro já se consegue ver o primeiro ramo com a canelura típica das folhas de um exemplar jovem:



domingo, 29 de outubro de 2017

Evolução da Phoenix Canariensis (n.º 1)

A 29 de Outubro de 2017, beneficiando de uns dias de calor e recebendo boa iluminação solar, este exemplar tem crescido a um bom ritmo, como se pode ver na fotografia abaixo:

sábado, 28 de outubro de 2017

PHOENIX CANARIENSIS (experiência de germinação caseira)

As minhas primeiras palmeiras das Canárias ao fim de cerca de mês e meio de processo acelerado de germinação (semente em algodão húmido em ambiente de estufa, seguido de colocação em vaso pequeno com terra adubada). 

Phoenix Canariensis 1:



Phoenix Canariensis 2:



Origem das sementes: exemplar de palmeira das Canárias existente junto ao passadiço de acesso ao comboio que faz o transporte em direcção à praia do Barril, Tavira (ver fotografia abaixo).




domingo, 17 de agosto de 2014

Viagem

Já chegámos?

Não, ainda faltam cerca de 30 minutos para o avião começar a descer.



sexta-feira, 23 de maio de 2014

Resolução de sistemas de equações não singulares



Nota prévia: uma matriz A (n x n) é não-singular se se verificarem as seguintes propriedades:
·        A tem uma inversa, designada por A-1;
·        O determinante de A (det(A)) é diferente de zero (det(A)¹0);
·        Para qualquer z¹ 0, A*z¹0.
2 Carlos
A resolução de sistemas de equações lineares (não singulares) é muito fácil com o Matlab. Vamos lidar com equações simples do tipo Ax=b em que A representa uma matriz dos coeficientes com dimensão m por n, x é o vector coluna das incógnitas e b é o vector correspondente aos termos independentes do sistema de equações.
Imaginemos que temos um sistema de 2 equações (cada uma com duas incógnitas e um termo independente):

7x+8y=100
2x-9y=10

Seguindo a forma clássica de resolução teríamos que separar as equações nos seus componentes (coeficientes, incógnitas e termos independentes) e fazer os cálculos através dos determinantes. Tarefa árdua!
Teríamos então que fazer o seguinte:

x = D1/D, em que D significa determinante;
y = D2/D
Assim, resolvendo os determinantes obtemos:

D = 7*(-9)-8*2=-79 (determinante dos coeficientes);
D1 = 100*(-9)-10*8=-980 (determinante dos termos independentes e do vector das “segundas” incógnitas (y));

D2 = 7*10-2*100=-130 (determinante dos termos independentes e do vector das “primeiras” incógnitas (x));

Calculando as respectivas razões obtemos as soluções para as duas incógnitas:
x = 12.4051
y = 1.6456
Com este procedimento facilmente se verifica a quantidade de cálculos que têm que ser feitos para chegar a uma solução (com o perigo de nos enganarmos nos sinais dos escalares). 

Com o Matlab tudo é mais simples pois só precisamos de decompor o sistema de equações e usar uma única instrução (\ - “backslash”). 

O sistema de equações usado como exemplo é do tipo Ax=b em que A representa a matriz dos coeficientes com dimensão n por n, x é o vector coluna das incógnitas (x e y) e b é o vector correspondente aos termos independentes (100 e 10).
Sendo do tipo Ax=b a instrução a usar no Matlab é: x=A\b. Vamos ver:
A=[7 8; 2 -9];
b=[100; 10];
x=A\b
x =
   12.4051
    1.6456
Como se vê não foi necessária muita ginástica mental, a instrução \ resolveu tudo num instante!
Para verificar se os resultados estão certos basta fazer a operação inversa:
b=A*x
b =
  100.0000
   10.0000

quinta-feira, 22 de maio de 2014

MULTIPLICAÇÃO DE MATRIZES

Esta ferramenta é muito importante quando trabalhamos com sistemas de equações lineares. Vai ser igualmente importante quando estivermos a fazer a análise multivariada de dados matriciais (veremos este tópico um pouco mais adiante com dados reais).

Condição fundamental para executar a multiplicação de duas matrizes:

Para que  [C]=[A]x[B] o número de colunas de [A] tem que ser igual ao número de linhas de [B].

Também podemos multiplicar uma matriz por um escalar.

Vejamos uns exemplos concretos, começando pela multiplicação de uma matriz por um escalar.

Definimos a matriz A:  

A=[1 2 3;4 5 6;7 8 9] (não esquecer os espaços entre os algarismos e os ; que separam cada linha)

A =

     1     2     3
     4     5     6
     7     8     9

A seguir definimos um escalar:

e=7  (por uma questão de comodidade uso letras minúsculas para os escalares)

e =

     7

A seguir faz-se a multiplicação





C=A*e

Obtendo-se o respectivo resultado:

C =

     7    14    21
    28    35    42
    49    56    63


Como se pode ver cada elemento da matriz inicial A foi multiplicado pelo escalar (7). Um curiosidade apenas: como a matriz criada tem uma sucessão de números inteiros de 1 a 9 ao multiplicarmos essa matriz pelo valor 7 obtemos uma nova matriz que corresponde à tabuada dos 7 (faltando apenas o resultado 70).

Vamos definir uma segunda matriz B:

B=[10 11 12;13 14 15;16 17 18]

B =

    10    11    12
    13    14    15
    16    17    18

A e B são matrizes com a mesma dimensão e portanto estão em condições para poderem ser multiplicadas.

 D =

    84    90    96
   201   216   231
   318   342   366

Para quem não se lembra da regra da multiplicação de matrizes: o elemento (1,1) da matriz A multiplica o elemento (1,1) da matriz B; o elemento (1,2) da matriz A multiplica o elemento (2,1) da matriz B; o elemento (1,3) da matriz A multiplica o elemento (3,1) da matriz B. A seguir todos os valores destas multiplicações são somados e inseridos na posição (1,1) da matriz D. O processo repete nesta ordem até estarem todas as posições da matriz D ocupadas.

Para matrizes com dimensões diferentes:

F=[19 20 21;22 23 24;25 26 27]

F =

    19    20    21
    22    23    24
    25    26    27

G=[28 29;30 31;32 33]

G =

    28    29
    30    31
    32    33

O resultado será:

H=F*G

H =

        1804        1864
        2074        2143
        2344        2422

Verifica-se pois que a matriz que resulta desta multiplicação (a H) tem formato igual ao da matriz mais pequena (a G), uma vez que na multiplicação de matrizes a regra geral é "cada elemento de uma linha de uma matriz vai multiplicar todos os elementos de uma coluna de outra matriz".
Será comutativa esta operação?

Aqui não podemos multiplicar G*F porque as dimensões não são compatíveis, mas podemos usar o exemplo anterior em que A e B têm as mesmas dimensões:

I=B*A

I =

   138   171   204
   174   216   258
   210   261   312

e comparando com D

D =

    84    90    96
   201   216   231
   318   342   366

Verificamos que I é diferente de D.

terça-feira, 20 de maio de 2014

OPERAÇÕES ELEMENTARES COM MATRIZES (2)

Produtos de vectores e transposição de matrizes

Existe um conjunto de regras importantes a fixar:

1) um vector linha e um vector coluna com a mesma dimensão podem ser multiplicados entre si;

2) quando multiplicamos um vector linha por um vector coluna obtemos um escalar;

3) quando multiplicamos um vector coluna por um vector linha obtemos uma matriz com as dimensões correspondentes às dos vectores multiplicados;

4) não podemos multiplicar dois vectores colunas entre si o mesmo, sendo verdade, para a multiplicação de dois vectores linha;

5) todavia, a multiplicação entre dois vectores linha ou coluna pode ser feita se usarmos a operação de transposição;

6) a multiplicação entre um vector coluna transposto e outro vector coluna (não transposto) é igual a um escalar. Esta multiplicação goza da propriedade comutativa, isto é, podemos multiplicar o segundo vector coluna transposto pelo primeiro vector coluna não transposto e o resultado será um escalar de valor igual ao anterior. 

Vou colocar aqui um exemplo que ilustre a regar mais complexa (a 6)):

Seja

X=[2;0;1]

X =

     2
     0
     1

e
Y=[3;2;1]

Y =

     3
     2
     1

Se eu fizer X*Y obtenho obviamente uma mensagem de erro:
Error using  *
Inner matrix dimensions must agree.

Mas se usar a operação de transposição já posso multiplicar estes dois vectores:

X'

ans =

     2     0     1

Z=X'*Y

Z =

     7

Y'

ans =

     3     2     1

Z=Y'*X

Z =

     7

Z tem o valor 7 e é igual independentemente da ordem pela qual os vectores são multiplicados, desde que se multiplique o vector coluna transposto pelo vector coluna não transposto.  


OPERAÇÕES ELEMENTARES COM MATRIZES (1)

No Matlab define-se uma matriz (matrix no plural matrices) como sendo um conjunto de dados representado por números reais ou complexos que estão organizados numa grelha bidimensional (linhas por colunas). É usado o termo array como correspondendo a um vector (definido por números), uma matriz ou uma malha de dados com dimensões elevadas. Poderá dizer-se que o termo array é mais genérico, enquanto que o termo matrix é mais específico.

Vamos começar com o exemplo de uma matriz 3X3 (simétrica) obtida do conhecido triângulo de Pascal. Para isso, no Matlab basta fazer:

A=pascal(3)

 A =

     1     1     1
     1     2     3
     1     3     6

Podemos chamar também a nossa conhecida matriz mágica:

B=magic(3)

 B =

     8     1     6
     3     5     7
     4     9     2

Como regras fundamentais não devemos nunca esquecer que:

u=[3; 1; 4], representa um vector coluna, ou seja,

 u =

     3
     1
     4

v=[2 0 -1], representa um vector linha, ou seja,

 v =

     2     0    -1

e que s=7 representa um escalar.

Vamos agora somar duas matrizes (a pascal(3) e a magic(3)):


A=pascal(3);
B=magic(3);
X=A+B

X =

     9     2     7
     4     7    10
     5    12     8

somou as matrizes elemento a elemento.

O mesmo se pode dizer com a subtracção:


Y=X-A

Y =

     8     1     6
     3     5     7
     4     9     2

Para isto é indispensável ter matrizes com a mesma dimensão!

Podemos também somar um escalar com um vector (ou fazer uma subtracção):

s=7

s =

     7

w=v+s  (em que o v foi definido anteriormente v=  2     0    -1 )
  

w =

     9     7     6

Podemos também usar o vector coluna u definido anteriormente:


h=u+s

h =

    10
     8
    11

UMA SEMANA DE CHUVA, por Miguel Esteves Cardoso

Voltou a chover. Vai continuar a chover. Não se via tal escândalo desde o ano passado, por esta altura exacta do mês de Maio.
A única diferença foi que, no ano passado, choveu no Domingo à noite, molhando a Procissão das Velas. Este ano não choveu e a procissão seguiu com todo o esplendor.
Este ano a chuva esperou pela Nossa Senhora de Fátima. O ano passado uma vizinha nossa teve de ralhar com a Banda: "Então não tocam ao menos 'A Miraculosa' para a Nossa Senhora não ir desgostosa para a igreja?"
Mas a Banda da Sociedade Recreativa e Musical de Almoçageme respondeu com nobreza ao apelo e tocou A Miraculosa como se estivesse uma tarde de sol.
Tal como o ano passado, depois de um fim-de-semana de praia, anda toda a gente espantada, ainda de calções e havaianas, a perguntar-me se eu já sei que vem aí uma semana de chuva.
Também costuma ser esta a semana em que alguém não muito longe de mim começa a dizer que este ano não vai haver cerejas por causa desta chuva, não obstante haver sempre cerejas todos os anos.
Na segunda metade de Maio declara-se, no primeiro dia de calor que o calor "chegou". Este "chegou" é dito com tal veemência que dispensa acrescentar o "para sempre".
Quando o calor que chegou se vai embora toda a gente se sente traída. Não é assim que o calor se deveria comportar. Os passarinhos, as borboletas e as rosas reagem com naturalidade, para não dizer indiferença. E continuam. Nós não. Fomos interrompidos e ficamos fulos.

segunda-feira, 19 de maio de 2014

MATRIZES MULTIDIMENSIONAIS

Frequentemente são utilizados muitos conjuntos de dados que expressam a variação de um parâmetro físico ao longo do tempo. Vejamos o exemplo simples da variação da temperatura de uma sala aula ao longo do dia. Esta temperatura pode variar devido a vários factores, como a entrada e saída de alunos na sala ou até pelo simples facto da sala estar mais ou menos exposta à radiação solar ao longo do dia. Mas para já não nos vamos preocupar com as causas dessa variação. O que interessa aqui é o seguinte: Temos um espaço onde é medida essa temperatura que pode ser representada por uma grelha rectangular de pontos (espaço bidimensional). Adicionalmente, existe a variação da temperatura ao longo do tempo. Imaginemos então que a nossa malha de pontos de medição da temperatura é uma matriz 4x4 e que os valores inscritos nessa matriz correspondem aos valores da matriz mágica (instrução magic (4)). Imaginemos, ainda, que os valores medidos correspondem às permutações das colunas de uma matriz de 4x4, ou seja, utilizando a linguagem combinatória isso equivale a dizer que temos 4! de permutações (4!=4x3x2x1=24).

No editor do Matlab podemos escrever um programa simples que vai fazer estas permutas:

 p=perms(1:4); % vai fazer a permutação das colunas de uma matriz (4x4), ou seja, são no total 4! de permutações (4!=4x3x2x1=24)
A=magic(4); % define a matriz mágica
M=zeros(4,4,24); % representa o novo conjunto de 24 matrizes (de 4x4) que resultam das 4!      permutações
for k=1:24 % inicia um ciclo com as 24 permutações (de 1 a 24)
    M(:,:,k)=A(:,p(k,:)); % são trocadas sucessivamente todas as colunas da matriz de 4x4 tal como      figura na instrução p associada ao índice j da notação matricial
end % fim do ciclo

E os resultados são:

 val(:,:,1) =

    13     3     2    16
     8    10    11     5
    12     6     7     9
     1    15    14     4


val(:,:,2) =

    13     3    16     2
     8    10     5    11
    12     6     9     7
     1    15     4    14


val(:,:,3) =

    13     2     3    16
     8    11    10     5
    12     7     6     9
     1    14    15     4


val(:,:,4) =

    13     2    16     3
     8    11     5    10
    12     7     9     6
     1    14     4    15


val(:,:,5) =

    13    16     2     3
     8     5    11    10
    12     9     7     6
     1     4    14    15


val(:,:,6) =

    13    16     3     2
     8     5    10    11
    12     9     6     7
     1     4    15    14


val(:,:,7) =

     3    13     2    16
    10     8    11     5
     6    12     7     9
    15     1    14     4


val(:,:,8) =

     3    13    16     2
    10     8     5    11
     6    12     9     7
    15     1     4    14


val(:,:,9) =

     3     2    13    16
    10    11     8     5
     6     7    12     9
    15    14     1     4


val(:,:,10) =

     3     2    16    13
    10    11     5     8
     6     7     9    12
    15    14     4     1


val(:,:,11) =

     3    16     2    13
    10     5    11     8
     6     9     7    12
    15     4    14     1


val(:,:,12) =

     3    16    13     2
    10     5     8    11
     6     9    12     7
    15     4     1    14


val(:,:,13) =

     2     3    13    16
    11    10     8     5
     7     6    12     9
    14    15     1     4


val(:,:,14) =

     2     3    16    13
    11    10     5     8
     7     6     9    12
    14    15     4     1


val(:,:,15) =

     2    13     3    16
    11     8    10     5
     7    12     6     9
    14     1    15     4


val(:,:,16) =

     2    13    16     3
    11     8     5    10
     7    12     9     6
    14     1     4    15


val(:,:,17) =

     2    16    13     3
    11     5     8    10
     7     9    12     6
    14     4     1    15


val(:,:,18) =

     2    16     3    13
    11     5    10     8
     7     9     6    12
    14     4    15     1


val(:,:,19) =

    16     3     2    13
     5    10    11     8
     9     6     7    12
     4    15    14     1


val(:,:,20) =

    16     3    13     2
     5    10     8    11
     9     6    12     7
     4    15     1    14


val(:,:,21) =

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1


val(:,:,22) =

    16     2    13     3
     5    11     8    10
     9     7    12     6
     4    14     1    15


val(:,:,23) =

    16    13     2     3
     5     8    11    10
     9    12     7     6
     4     1    14    15


val(:,:,24) =

    16    13     3     2
     5     8    10    11
     9    12     6     7
     4     1    15    14

Ou seja, temos um conjunto de 24 matrizes que podiam representar a variação da temperatura de uma sala de aula, de hora a hora, em 24 horas e medida em 16 pontos diferentes (matriz 4x4).

   

sexta-feira, 16 de maio de 2014

Dias quentes de Maio (16)

Hoje, dia 16 de Maio, o céu estava parcialmente nublado em Lisboa. Estamos a entrar no fim de um ciclo de dias quentes que é anunciado pelo desenvolvimento de uma baixa pressão em altitude, transportando ar húmido vindo do Atlântico. A pouco e pouco, o ar quente e seco vindo de leste, deixará de circular e a temperatura baixará com o aumento correspondente da humidade.
Por volta das 14 horas o céu de Lisboa estava assim:



Observa-se a presença de algumas nuvens de desenvolvimento vertical (cúmulos-nimbos), como que anunciando a chegada de alguma chuva e trovoada (situação típica do mês de Maio). 

A imagem de satélite correspondente mostra bem a formação destas nuvens que sobressaem bem na imagem captada por infravermelho:


Por sua vez, a situação sinóptica mostra bem a formação da baixa-pressão em altitude, sendo visível que à superfície ainda se mantinha a corrente geral de leste de ar seco e quente, oriundo do Norte de África e com circulação pelo interior da Península Ibérica - aquele ar com o cheiro típico das planícies da Meseta Ibérica meridional:


 
Todo o conjunto de altas pressões e respectivas cristas vai desaparecer nos próximos dias e o ar frio e húmido vai invadir toda a orla ocidental da Península Ibérica, com a chegada de uma baixa-pressão vinda de norte.