divendres, 15 d’abril del 2011

Hercules eCafe EC800 20G amb Ubuntu Netbook Edition 10.10

Ha caigut a les meves mans un netbook molt senzill: l'Hercules eCafe EC800 20G. Es tracta d'una maquineta petita i limitada pel que fa a especificacions de hardware (512MB de memòria, disc dur de 20GB, micro AMD Geode).

Tanmateix, si es tracta de fer-lo servir de netbook: ebook, correu, navegació, xat, escoltar música i veure pel·lícules (amb qualitats adequades a la potència del micro, evidentment) i  poca cosa més, aleshores pot tractar-se d'una màquina suficient.

Inclús es podria tractar d'un netbook per les criatures, adequat per a la realització dels treballs escolars. En aquest cas, però, crec que és imprescindible l'adquisició d'un teclat, un ratolí i un monitor.

En posar-lo en marxa m'he trobat amb que el sistema operatiu era un  Linux, en una versió de la distro Mandriva "customitzada" i en castellà.

Personalment, la meva distro de referència és Ubuntu -entre d'altres coses, ofereix la interfase en català. Així que he decidit  canviar la distro que venia amb l'EC800, per la versió d'Ubuntu especialitzada en Netbooks:  la Ubuntu 10.10 Netbook Edition.

La Ubuntu 11.04 està al caure (actualment és Beta 2). És cosa de dies la versió de release. A la versió 11.04 es fusionaran la versió Netbook i la versió Desktop. Avui mateix (14 d'abril), però, la release "oficial" de producció és la 10.10.

Ha calgut preparar un pendrive (o una targeta SD) amb la Ubuntu Netbook Edition. A la secció Netbook de la web d'Ubuntu expliquen pas a pas com fer un pendrive (o SD) autoarrencable amb la imatge  ISO que es pot descarregar. No ho repetiré aquí.

Un cop es disposa del pendrive el que cal és canviar l'ordre d'arrencada de l'EC800. Cal picar F1 per entrar a la BIOS. Un cop allàcal establir que arrenqui primer des de HDD Flash o de des del FDD Flash, depenent de si tenim una SD, o un pendrive. Salvem i sortim.

S'engega la instal·lació. El procés d'instal·lació d'Ubuntu en aquesta màquina no té cap truc. Fins i tot hem reaprofitat les particions de la distro Mandriva, deixant a / la partició de 4,4GB, la de 2,2GB per a /boot i la DE 13,4GB per a /home. Tot en ext3.

Després d'una estona el sistema queda instal·lat. Es reconeix tot el hardware sense problemes: webcam, so, wifi. Només hi ha un problema amb les resolucions de pantalla, que no s'ajusten correctament a l'ample. La solució d'aquest problema és tan senzilla com copiar a /etc/X11 aquest fitxer xorg.conf i reiniciar.

Quan tornem a ser dintre, podrem ajustar la resolució de pantalla fins a un màxim de 1024x600 des del menú Sistema-Preferències-Monitors.

I vet aquí el petit Hercules EC800 amb Ubuntu Netbook Edition 10.10.

divendres, 1 d’abril del 2011

Resolució de sistemes d'equacions lineals d'N incògnites amb Calc (OpenOffice.org - LibreOffice)

Es tracta de l'aplicació directa dels vells apunts d'àlgebra de l'institut.

Si recordem, de càlcul matricial,  teníem que un sistema d'equacions lineals d'N incògnites es podia escriure com el producte de la matriu quadrada A de NxN de coeficients, pel vector d'incògnites X, igual al vector de termes independents B, o sigui A·X = B

I llavors, la resolució del sistema era
Inv(A)·A·X = Inv(A)·B

però Inv(A)·A = I (matriu identitat de NxN: tot zeros i  diagonal d'uns. Recordem dels apunts també: una matriu és invertible si el seu determinant és diferent de zero)

Més dels apunts: el producte de la identitat per "Alguna cosa" és "Alguna cosa". Per tant:

I·X = Inv(A)·B,
és dir X = Inv(A)·B

Si el sistema és "compatible i determinat"  aleshores té solució i és única, i serà el vector X.

Hi han molt bones alternatives per a fer càlcul vectorial i matricial amb programari lliure: immediatament ens ve al cap el nom d'Octave, però també podriem fer servir FreeMat o SciLab (tots ells segueixen l'estil del reconegut, i de pagament, Matlab). Es tracta d'aplicacions instal·lables des del centre de Programari de l'Ubuntu.

Però aquí es proposa una alternativa amb programari més comú i que ja ve instal·lat: El càlcul es pot fer amb cel·les i fòrmules de Calc (OpenOffice.org o LibreOffice)

Obro una fulla i creo les matrius A i B



Calculo la inversa Inv(A), com que és una matriu de 3x3, la inversa també ho serà

Em posiciono a la cel·la a en la que vull que es pocioni la inversa i faig click a l'auxiliar de funcions.

Trio les funcions de Matrius. Trio la funció MINVERSA. Marco el checkbox "matriu" per indicar que l'argument és una matriu.

 
Click a següent i, a continuació, sel·lecciono la matriu que vull invertir.


Click a d'acord i ja tinc la matriu invertida.


Finalment, cal multiplicar la matriu invertida amb el vector de termes independents.

Em posiciono a la cel·la on vull que es mostrin les X, faig click a l'auxiliar de funcions. Trio les funcions de matriu. Trio la funció MULTM. Marco el checkbox "matriu" per indicar que els arguments són matrius.


A continuació sel·lecciono la matriu invertida i el vector de termes independents.


I ja ho tinc calculat.


Aquest seria el procés "manual".

Amb OOoBAsic el càlcul és directe (idea extreta de http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=32048). En les zones de color buides és on posaré la invertida i les X. )


Faig servir aquest codi:
sub ResolSistema
   Dim oFuncio as Object
   Dim oFull as Object
   Dim oRangA as Object
   Dim oRangB as Object
   Dim oRangInvA as Object
   Dim oRangX as Object
   Dim matInversa as Object
   Dim matX as Object
   Dim oFila as Object
   Dim i,j as Integer
             
   oFull = ThisComponent.Sheets.getByName("Full1")
   oRangA = oFull.getCellRangeByName("A1:C3")
   oRangInvA  = oFull.getCellRangeByName("E6:G8")
   oRangB = oFull.getCellRangeByName("E1:E3")
   oRangX = oFull.getCellRangeByName("E11:E13")
   oFuncio = createUnoService("com.sun.star.sheet.FunctionAccess")

   matInversa =  oFuncio.callFunction("MINVERSE", Array(oRangA.DataArray))
  
   for i = 0 to 2
      oFila = matInversa(i)
      for j = 0 to 2
         oRangInvA.getCellByPosition(j, i).setValue(oFila(j))
      next j
   next i
  
   matX =  oFuncio.callFunction("MMULT", Array(matInversa, oRangB.DataArray))

   for i = 0 to 2
      oFila = matX(i)
      oRangX.getCellByPosition(0,i).setValue(oFila(0))
   next i
  
End Sub


L'executo i obtinc:


És dir, el mateix resultat, com era d'esperar. Algunes remarques al codi:

- La utilització dels rangs per a fer un posicionament "relatiu" dels resultats, en comptes de fer un posicionament absolut sobre el full.
- En OOoBasic cal posar els noms de les funcions en anglès. MINVERSE en comptes de MINVERSA, i MMULT en comptes de MULTM.
- Les funcions de matriu retornen un vector de vectors, en comptes d'un Array bidimensional, per això cal fer servir oFila per a extreure els resultats.