Index [stark.udg.edu]stark.udg.edu/~perico/docencia/cursos_anteriors/MMAQ_0607.pdfInternament,...

141
Mètodes Matemàtics Aplicats a la Química, Pedro Salvador 1 Index 1.- PROGRAMACIÓ EN FORTRAN ...................................................................................................... 4 1.1- ORDINADORS, LLENGUATGES D'ALT NIVELL, COMPILADORS ............................................................. 4 Els ordinadors digitals........................................................................................................................ 4 FORTRAN ........................................................................................................................................... 7 1.2- FONAMENTS DEL FORTRAN 77 ....................................................................................................... 8 Tipus de dades .................................................................................................................................... 9 Input/output standard........................................................................................................................ 11 Assignació ......................................................................................................................................... 12 Operacions aritmètiques ................................................................................................................... 13 1.3 INSTRUCCIONS DE EXECUCIÓ CONDICIONAL ..................................................................................... 15 1.4- INSTRUCCIONS DE EXECUCIÓ REPETITIVA (BUCLES) ........................................................................ 18 1.5- ALTRES DISPOSITIUS INPUT/OUTPUT ............................................................................................... 22 1.6- VECTORS I MATRIUS ....................................................................................................................... 25 1.7 SUBPROGRAMES: FUNCIONS I SUBRUTINES ...................................................................................... 29 Funcions ........................................................................................................................................... 29 Subrutines ......................................................................................................................................... 34 Crides a les subrutines ...................................................................................................................... 35 Procés de compilació ........................................................................................................................ 38 2.- ÀLGEBRA LINEAL........................................................................................................................... 39 2.1 ESPAIS VECTORIALS.......................................................................................................................... 39 2.2 COMBINACIÓN LINEAL, INDEPENDENCIA LINEAL Y BASE .................................................................. 39 2.3 PRODUCTE ESCALAR ......................................................................................................................... 40 2.4 MATRIUS: PROPIETATS I OPERACIONS ............................................................................................... 42 Definicions i propietats elementals. .................................................................................................. 42 Tipus de matrius................................................................................................................................ 43 2.5 CANVIS DE BASE. .............................................................................................................................. 46 3.- RESOLUCIÓ D’EQUACIONS D’UNA VARIABLE...................................................................... 47 3.1. RECERCA DE ZEROS DE FUNCIONS.................................................................................................... 47 3.2 MÈTODE DE LA BISECCIÓ .................................................................................................................. 47 Algorisme .......................................................................................................................................... 48 3.3 MÈTODE DE LA REGULA-FALSI O DE LA FALSA POSICIÓ ................................................................... 50 Algorisme .......................................................................................................................................... 50 3.4. MÈTODES DE NEWTON-RAPHSON I DE LA SECANT. .......................................................................... 52 Algorisme de Newton-Raphson ......................................................................................................... 52 Algorisme de la secant ...................................................................................................................... 54

Transcript of Index [stark.udg.edu]stark.udg.edu/~perico/docencia/cursos_anteriors/MMAQ_0607.pdfInternament,...

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

1

Index

1.- PROGRAMACIÓ EN FORTRAN ...................................................................................................... 4

1.1- ORDINADORS, LLENGUATGES D'ALT NIVELL, COMPILADORS ............................................................. 4

Els ordinadors digitals ........................................................................................................................ 4

FORTRAN ........................................................................................................................................... 7

1.2- FONAMENTS DEL FORTRAN 77 ....................................................................................................... 8

Tipus de dades .................................................................................................................................... 9

Input/output standard........................................................................................................................ 11

Assignació ......................................................................................................................................... 12

Operacions aritmètiques ................................................................................................................... 13

1.3 INSTRUCCIONS DE EXECUCIÓ CONDICIONAL ..................................................................................... 15

1.4- INSTRUCCIONS DE EXECUCIÓ REPETITIVA (BUCLES) ........................................................................ 18

1.5- ALTRES DISPOSITIUS INPUT/OUTPUT ............................................................................................... 22

1.6- VECTORS I MATRIUS ....................................................................................................................... 25

1.7 SUBPROGRAMES: FUNCIONS I SUBRUTINES ...................................................................................... 29

Funcions ........................................................................................................................................... 29

Subrutines ......................................................................................................................................... 34

Crides a les subrutines ...................................................................................................................... 35

Procés de compilació ........................................................................................................................ 38

2.- ÀLGEBRA LINEAL ........................................................................................................................... 39

2.1 ESPAIS VECTORIALS .......................................................................................................................... 39

2.2 COMBINACIÓN LINEAL, INDEPENDENCIA LINEAL Y BASE .................................................................. 39

2.3 PRODUCTE ESCALAR ......................................................................................................................... 40

2.4 MATRIUS: PROPIETATS I OPERACIONS ............................................................................................... 42

Definicions i propietats elementals. .................................................................................................. 42

Tipus de matrius ................................................................................................................................ 43

2.5 CANVIS DE BASE. .............................................................................................................................. 46

3.- RESOLUCIÓ D’EQUACIONS D’UNA VARIABLE ...................................................................... 47

3.1. RECERCA DE ZEROS DE FUNCIONS.................................................................................................... 47

3.2 MÈTODE DE LA BISECCIÓ .................................................................................................................. 47

Algorisme .......................................................................................................................................... 48

3.3 MÈTODE DE LA REGULA-FALSI O DE LA FALSA POSICIÓ ................................................................... 50

Algorisme .......................................................................................................................................... 50

3.4. MÈTODES DE NEWTON-RAPHSON I DE LA SECANT. .......................................................................... 52

Algorisme de Newton-Raphson ......................................................................................................... 52

Algorisme de la secant ...................................................................................................................... 54

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

2

4.- RESOLUCIÓ DE SISTEMES D'EQUACIONS LINEALS. ........................................................... 56

4.1. ALGORISME DE RESOLUCIÓ DE SISTEMES D’EQUACIONS LINEALS PEL MÈTODE DE GAUSS-JORDAN. 56

4.2. LA TÈCNICA DEL PIVOTATGE EN L’ALGORISME DE GAUSS-JORDAN ................................................. 61

Exemple ............................................................................................................................................. 63

4.3. ALGORISME DE RESOLUCIÓ DE SISTEMES D’EQUACIONS LINEALS PEL MÈTODE DE GAUSS-SEIDEL .. 65

5.- AJUSTE DE CURVAS E INTERPOLACIÓN ................................................................................. 68

5.1. REGRESIÓN LINEAL .......................................................................................................................... 69

5.2. AJUSTE POLINÓMICO POR MÍNIMOS CUADRADOS. ............................................................................ 73

5.3. REGRESIÓN MULTILINEAL ................................................................................................................ 75

5.3. COEFICIENTE DE DETERMINACIÓN ................................................................................................... 76

6.- INTEGRACIÓ NUMÈRICA DE FUNCIONS ................................................................................. 77

6.1 MÈTODE DELS RECTANGLES ............................................................................................................. 78

6.2 MÈTODE DELS TRAPEZIS ................................................................................................................... 80

6.3 MÈTODE DE SIMPSON (1/3) ............................................................................................................... 84

6.4 MÈTODE DE ROMBERG ..................................................................................................................... 89

6.5 ANÀLISI D’ERRORS I PÈRDUA DE PRECISIÓ ........................................................................................ 92

6.6 INTEGRACIÓ NUMÈRICA DE FUNCIONS: INTEGRALS IMPRÒPIES ......................................................... 95

Límits d’integració no avaluables ..................................................................................................... 95

Límits d’integració no finits .............................................................................................................. 97

6.7 INTEGRACIÓ NUMÈRICA DE FUNCIONS DE UNA O MÉS VARIABLES: MÈTODE DE MONTE CARLO ..... 101

Mètodes Monte Carlo ..................................................................................................................... 103

Generació de nombres aleatoris en FORTRAN .............................................................................. 106

7. -MINIMITZACIÓ DE FUNCIONS I DERIVACIÓ ....................................................................... 108

7.1. DERIVACIÓ NUMÈRICA PER DIFERÈNCIES FINITES .......................................................................... 108

7.2. PUNTS ESTACIONARIS. ................................................................................................................... 112

7.3. MÈTODES DE GRADIENT................................................................................................................. 112

7.4. MÈTODE NEWTON-RAPHSON......................................................................................................... 112

8.- INVERSIÓ DE MATRIUS ............................................................................................................... 113

8.1 ALGORISME GENERAL D’INVERSIÓ DE MATRIUS QUADRADES ......................................................... 113

9.- EQUACIONS SECULARS .............................................................................................................. 116

9.1. DEFINICIONS .................................................................................................................................. 116

9.2. PROPIETATS ................................................................................................................................... 118

9.3. ALGORISME DE DIAGONALITZACIÓ DE MATRIUS PEL MÈTODE DE LES ROTACIONS ELEMENTALS DE

JACOBI. ................................................................................................................................................. 122

Exemple 1: ...................................................................................................................................... 129

Exemple 2: ...................................................................................................................................... 130

Altres consideracions: .................................................................................................................... 131

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

3

9.4. APLICACIONS DE LA DIAGONALITZACIÓ DE MATRIUS QUADRADES SIMÈTRIQUES .......................... 132

Determinant d’una matriu .............................................................................................................. 132

Matriu Inversa ................................................................................................................................ 134

Potències d’una matriu ................................................................................................................... 135

Aplicacions avançades: Ortonormalització d’una base de vectors ................................................ 136

BIBLIOGRAFIA .................................................................................................................................... 139

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

4

1.- Programació en FORTRAN

1.1- Ordinadors, llenguatges d'alt nivell, compiladors

Els ordinadors digitals

Les aplicacions principals d’un ordinador podríem dir que són dues:

Càlcul numèric

Emmagatzematge, processament i anàlisi de dades.

En l’actualitat existeixen infinitat d’aplicacions (software) que permeten realitzar

tasques específiques com processament de textos, edició d’imatges, bases de dades, o

fins i tot programes de càlcul simbòlic matemàtic com el Mathematica o Maple.

Nosaltres ens dedicarem més aviat a les aplicacions de càlcul numèric i, en concret, a la

programació en el llenguatge FORTRAN. Els avantatges que comporta tenir uns

coneixements de programació en son vàries:

Permet resoldre problemes específics que potser no serien resolubles amb el

software standard de què es disposi.

S’elimina la dependència del software comercial i potencialment costós, a més

d’haver d’adaptar-se a les successives revisions i versions.

Amb la programació es fomenta el desenvolupament intel·lectual, el pensament

lògic i estructurat. De fet, difícilment es pot programar un mètode o algorisme que

no s’entengui prèviament. Per tant, si fer un programa per realitzar una tasca podem

estar segurs que haurem entès com es fan les coses.

El FORTRAN (FORmula TRANslator) és un dels llenguatges de programació d’alt

nivell més utilitzats en l’actualitat en l’àmbit científic i tècnic, juntament amb el C.

L’avantatge del FORTRAN respecte al C, és que és relativament més senzill

d’aprendre. Pels objectius d’aquest curs, el FORTRAN es més que suficient.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

5

Una de les característiques dels ordinadors actuals és la representació binària de la

informació. Internament, l’ordinador està composat de commutadors que poden tenir

posició oberta o tancada, i serveixen per representar els nombres 0 i 1. Per tant, dos és

la base natural de representació dels nombres en l’entorn informàtic. És a dir, mentre

que en base deu representem el nombre 113 com

113 = 1(102) + 1(10

1)+ 3(10

0)

en base dos tindríem

113 = 1(26)+ 1(2

5)+ 1(2

4)+ 0(2

3)+ 0(2

2)+ 0(2

1)+ 1(2

0) = 64 + 32 + 16 +1 = (1110001)2

Val a dir que també es poden representar de la mateixa manera altres tipus de dades,

com per exemple lletres (caràcters alfanumèrics) , simplement assignant-ne un valor a

cada lletra de l’abecedari.

Cada unitat d’informació binària rep el nom de bit. Normalment els bits s’agrupen en

blocs de 8 unitats formant un byte. Les dades que s’emmagatzemen i amb les que

treballarem a l’ordinador poden ser de 1 fins a 16 bytes, segons el tipus.

Per exemple, en FORTRAN el nombres sencers (integer) es representen per defecte

amb 4 bytes (o 32 bits). Això vol dir que amb aquest tipus de dades poden representar

nombres en el rang +231

-231

(cal un bit per especificar el signe).

Pels caràcters alfanumèrics només ens caldrà un byte, amb el que podem codificar 28 =

256 caràcters diferents.

La memòria principal d’un ordinador està formada per milions de circuits integrats

capaços emmagatzemar zeros o uns. Hi ha dos valors associats a cada element de la

memòria: la dada que conté i la direcció de la mateixa que ens permet accedir a la

mateixa.

El temps d’accés a la dada es un paràmetre molt important en la informàtica actual. De

fet, un suma es fa en menys temps que es triga en trobar els sumands a la memòria. En

les memòries RAM, el temps d’accés es independent de la posició que ocupa l’element

(random access memory).

Els PC’s actuals tenen també l’anomenada memòria cache, situada físicament a prop del

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

6

processador on es realitzen les operacions, que té un temps d’accés molt mes curt que la

memòria RAM i on s’emmagatzemen les dades més recentment accedides a la memòria

principal. Aquesta memòria ultraràpida és molt petita (típicament 256-1024 Kb). Una

bona estratègia de programació avançada és aconseguir que les dades estiguin el major

temps possible a la memòria cache.

A més de la memòria principal, hi ha altres llocs on s’emmagatzema la informació de

manera permanent però a canvi d’un temps d’accés superior. Són els dispositius de

memòria massiva o secundaria (discs durs, CD-ROM, DVD, diskettes, pen drives,

etc...). Per tant, un altra estratègia de programació eficient és la d’accedir el mínim

numero de vegades possible al disc dur (treballant sempre en memòria RAM o bé

llegint les dades necessàries en grans blocs).

En la comunicació amb l’ordinador cal tenir presents el dispositius d’entrada i sortida

(Input/output devices). Com a dispositius d’entrada tenim el teclat i les memòries

massives (disk dur, etc...), i són les vies per les quals li entrem les dades a l’ordinador.

Pel que fa a la sortida, tenim la pantalla, la impressora i les mateixes memòries

massives.

A l’hora d’escollir un dispositiu o un altre cal tenir en compte l’ús que en fem de la

informació. Per exemple, moltes vegades els nostres programes tindran unes opcions

típiques que ens pot interessar no introduir mitjançant el teclat cada vegada que

l’executem sinó que poden ser llegides d’un fitxer creat prèviament.

De la mateix manera, ens pot interessar guardar de manera permanent la sortida del

programa (output), per exemple per fer-la servir com a entrada (input) d’un altre

programa. En aquest cas convé, doncs, fer servir el disc dur com a dispositiu de sortida.

Per últim comentarem com li comuniquem a l’ordinador què volem fer. De fet, el

llenguatge primari de l’ordinador consta d’instruccions del tipus:

Porta el numero X de la direcció de memòria Y

Emmagatzemar-lo a la CPU

Suma dos nombres

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

7

Aquest llenguatge màquina (ensamblador, assembler), però, no resulta gaire útil per

l’usuari. Els anomenats llenguatges d’alt nivell el que permeten es codificar de manera

més “humana” les instruccions, de manera que siguin, a més, independent de la màquina

on es treballi. El conjunt d’instruccions escrites en aquest llenguatge rep el nom de codi

font.

El programa que realitza la traducció a llenguatge màquina és el compilador, i el

resultat de la traducció es codi objecte. Per últim, el procés de creació del fitxer

executable final rep el nom de link i el duu a terme, generalment, el propi compilador

després de la compilació (exitosa).

Tant el codi objecte com el programa executable final depenen de l’arquitectura de

l’ordinador de treball (i per tant només podrà executar-se en aquell tipus de màquina i

sistema operatiu) mentre que només el codi font és universal.

FORTRAN

En l’actualitat existeixen vàries revisions del llenguatge FORTRAN original:

FORTRAN 77, FORTRAN 90 i FORTRAN 95. Les versions 90 i 95 es poden

considerar, de fet, com ampliacions del FORTRAN 77, pel què la pràctica totalitat de

les instruccions de FORTRAN 77 estan incloses en les versions posteriors.

Per tant, tot i que farem servir el compilador de FORTRAN 95, ens limitarem a fer

servir instruccions de FORTRAN 77. De fet, l’actualització dels programes científics

existents a versions posteriors és pràcticament inexistent avui en dia. A més, existeixen

compiladors de FORTRAN77 gratuïts pel sistema operatiu Linux (GNU g77).

Bibliografia

Programación en FORTRAN77, G. J. Borse, Ed. Anaya 1989.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

8

1.2- Fonaments del FORTRAN 77

A l’hora d’elaborar el codi font en FORTRAN77 hi ha una sèrie de pautes que cal

seguir:

Les instruccions o expressions (sentencies) s’escriuen en línies independents,

de tal manera que les instruccions s’executen seqüencialment (una darrera de

l’altra).

El compilador ignora les línies en blanc

Cada línia té una amplada màxima de 80 caràcters.

Les instruccions han de situar-se entre les columnes 7 i 72 de cada línia.

Les columnes 1 a 5 estan reservades per etiquetar les sentencies amb

números (opcional).

La columna 6 és de continuació. Si una sentencia és massa llarga es pot

continuar a la següent línia (a partir de la columna 7) escrivint un caràcter

diferent del 0 en la columna 6 (típicament es fa servir “+” o “1”, “2”, etc...)

Qualsevol línia que contingui a la columna 1 el caràcter “C” o bé “*” es

considera comentari i el compilador l’ignora. És molt important incloure

comentaris en el codi font per tal de millorar la seva comprensió

posterior!

Tot programa escrit en FORTRAN comença per la sentència PROGRAM i termina amb

la sentència END (o END PROGRAM).

La comanda PROGRAM pot venir acompanyada d’una paraula, que dóna nom al

programa. És important recalcar que aquest nom no te res a veure amb el nom del fitxer

que conté el codi font o el nom del fitxer executable final.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

9

Tipus de dades

El FORTRAN ofereix una certa varietat en la referència i emmagatzematge de dades.

En concret n’hi ha de cinc tipus: INTEGER, REAL, COMPLEX, CHARACTER i

LOGICAL que serveixen per codificar nombres enter, decimals (o de coma flotant) i

complexes, caràcters alfanumèrics i expressions booleanes (vertader o fals).

Per defecte les variables de tipus INTEGER, REAL i COMPLEX ocupen 4 bytes,

mentre que les LOGICAL i CHARACTER n’ocupen 1 byte.

Molt sovint es treballa amb dades de tipus DOUBLE PRECISION, que de fet son

variables de tipus REAL però de 8 bytes. De fet, REAL*8 és un sinònim de DOUBLE

PRECISION. Això és així perquè amb dades de tipus REAL de 4 bytes podem

emmagatzemar números decimals dins el rang 10-38

– 1038

amb 8 dígits de precisió. En

canvi, amb les DOUBLE PRECISION s’arriba fins a un rang de 10-308

.- 10308

. amb 16

xifres significatives.

Les dades que s’utilitzen en el programa poden ser constants o variables i han de tenir

un nom. Les constants designen un valor específic que cal introduir i que no canvia al

llarg del mateix. Pera altra banda, el concepte de variable coincideix amb l’habitual, és a

dir, un nom simbòlic que fa referència a una dada que pot prendre diferents valors. Hi

ha algunes restriccions al respecte de quins noms es poden assignar a les variables o

constants:

Han de començar per un caràcter alfanumèric (una lletra).

No poden contenir caràcters especials (accents, signes, asterisc, etc..).

És convenient, tot i que no obligatori, denominar les variables o constants amb

noms que recordin al concepte que representen.

Quan s’escriu un programa en FORTRAN77 s’utilitzen sentencies d’especificació o

declaració on s’explicita quin tipus de dades es faran servir al programa. Aquestes

sentencies s’inclouen en el codi font just després de la sentència PROGRAM.

Les constants es declaren i especifiquen a la vegada mitjançant la sentència parameter

de tal manera que amb l’expressió

parameter (MAXDIM=100, PI = 3.1415926)

estem dient al programa que hem definit dues dades constants amb els noms MAXDIM i

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

10

PI , el valor de les quals queda fixat i no es pot modificar posteriorment.

En el cas de les variables cal tenir en compte el següent:

Per defecte, totes les variables el nom de les quals comenci per les lletres

i, j, k, l, m, n seran considerades com INTEGER. La resta seran de tipus

REAL.

Els casos per defecte es poden modificar amb la sentència implicit. Per

exemple, la sentència següent (desprès de la sentència program):

implicit double precision (a-h,o-z)

fa que es conservi que les variables que comencin per les lletres i fins n siguin

considerades INTEGER però aquelles que comencin per les lletres a fins h i o

fins z seran reals de doble precisió (8 bytes)

Es pot assignar de forma explícita un o més variables. Per exemple, amb les

sentències

real x,y,z

integer dia,mes, any

character linia*80, nom*20

declarem que les variables x, y ,z seran considerades dins el programa de

tipus REAL; les variables dia, mes, any seran de tipus INTEGER; les

variables línia i nom seran de tipus CHARACTER amb longitud 80 i 20

caràcters, respectivament.

Les sentències anteriors s’inclouen en el programa després de la

sentencia program.

La declaració explicita del tipus de les variables no és obligatori. Si no

s‘especifica res, el compilador considera el cas per defecte comentat

anteriorment. Això, de fet, implica que les variables de tipus CHARACTER

o LOGICAL s’hagin de declarar sempre

Amb les sentències de declaració no s’assigna cap valor a les variables,

només es dona un nom determinat a una posició física de la memòria on

s’emmagatzemarà el valor de la variable.

En els exemples següents assumirem que les variables són del tipus determinat per

l’opció per defecte.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

11

Input/output standard

Les comandes input/output standard en FORTRAN són

read(*,*) llista de variables entre comes

write(*,*) llista de variables o cadenes de caràcters entre comes

(Una cadena de caràcters és un conjunt de caràcters entre cometes o apòstrofs. )

Per exemple:

Sentència Resultat

read(*,*) x llegeix del teclat un nombres real

read(*,*) i, j llegeix del teclat dos nombres sencers

write(*,*) x, i escriu per pantalla un nombre real seguit

d’un nombre sencer

write(*,*) ‘El producte x*y = ‘,x*y

escriu per pantalla literalment

El producte x*y = , seguit del resultat del

producte

Quan el programa arriba a una sentència d’input/output es transfereix el control als

dispositius d’input/output. Per exemple, quan s’arriba a un sentència com

read(*,*) x

el programa espera que l’usuari introdueixi mitjançant el teclat (dispositiu d’input

standard) una dada (real, en aquest cas). Les dades s’introdueixen simplement escrivint

el número seguit de INTRO. Quan la sentència read inclou més d’una variable entre

comes, els valors es poden introduir durant l’execució del programa bé entre comes o

bé un a un prement INTRO cada cop.

Per altra banda, quan s’ arriba a una sentència com

write(*,*) x

el programa escriu per pantalla (dispositiu d’output standard) el valor que tingui

assignat en aquell precís moment la variable x

Més endavant veurem com es pot controlar el format de input/output dels nombres i

caràcters alfanumèrics mitjançant les sentències de format (format). També veurem

com definir altres dispositius d’input/output diferents als standard, i en concret, com

escriure i llegir de fitxers als discs locals.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

12

Assignació

De fet, el procés d’assignació en FORTRAN ja ho hem anat veient. Bàsicament, hi ha

dues maneres d’assignar un valor a una variable

Externament, mitjançant la comanda read : Per exemple, amb la sentència

read(*,*) x

aconseguim assignar-li a la variable x un valor mitjançant el teclat

Per assignació directa. Per exemple, amb la sentència

y = 3.0d0*x +4.0d0

li assignem a la variable y el resultat de multiplicar el valor de la variable x

per tres i sumar-li quatre.

En aquest cas d’assignació directa cal tenir en compte alguns punts:

Si fem servir una variable a la que no se li ha assignat cap valor, el resultat

por ser qualsevol. Per exemple, si fem

y = 3.0d0*x +4.0d0

sense haver donat cap valor a x, el resultat que es guardarà a y pot ser

qualsevol (tot i això molts compiladors assignen per defecte el valor 0 a totes

les variables).

Expressions del tipus

y = 3.0d0

y = 3.0d0*y +4.0d0

son perfectament vàlides. De fet estem dient que y inicialment conté el valor

3 i, posteriorment, s’hi emmagatzema el resultat de multiplicar el valor

anterior de y per 3.0 i sumar-li 4.0. Recordeu que son sentencies

d’assignació! No implica igualtat.

Exemple: Escriu un programa que intercanviï el valor de dues variables. És a dir,

que si inicialment i=3 i j =2, al final tinguem i=2 i j = 3.

El valor que quedi emmagatzemat a la variable depèn del tipus de variable.

Per exemple si fem

i = 4.0d0/3.2d0

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

13

a la variable INTEGER i s’hi emmagatzemarà el valor 1

x= 1/2

a la variable REAL x i s’hi emmagatzemarà el valor 0.0

Operacions aritmètiques

Els operadors aritmètics típics són els següents

+ suma

- resta

* multiplicació

/ divisió

** potència

Els operands poden ser números, constants o variables, sempre i quan siguin del tipus

escaient. Cal tenir en compte que:

El resultat de les operacions on intervenen nombres sencers (INTEGER) és un

nombre sencer. Així, per exemple, 10/3 = 3, mentre que 10.0d0/3 = 3.33333...

La barreja de variables o nombres de diferents tipus en una mateixa operació es

potencialment perillosa. Per exemple1

Expressió Resultat

a = 10/3 a = 3.000000

b = 10.0d0/3 b = 3.3333332

c = 10.0d0/3.0d0 c = 3.33333333

i = 10/3 i = 3

j = 10.0d0/3.0d0 j = 3

Comparant els valors a b i c es pot veure com es pot perdre precisió. Si escrivim 10.0d0

estem indicant que el número és de doble precisió (a diferència de 10.0 o 10.0e0).

Podem veure també que si la variable on s’assigna el resultat es de tipus INTEGER el

valor que emmagatzema serà sempre de tipus enter.

1 D’ara endavant suposarem que s’han definit variables reals de doble precisió.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

14

A les variables de tipus CHARACTER també se’ls pot assignar valors. Per exemple, si

fem

character nom*10, cognom*10, tot*30

nom = ‘Armando’

cognom = ‘Bronca’

assignem a les variables nom i cognom valors alfanumèrics.

L’operació que es pot fer amb aquest tipus de dades es la concatenació. amb l’operador

“//”

tot =nom//cognom//”Segura”

Així, a la variable tot tindrem assignat

Armando___Bronca____Segura____

Si l’expressió és més llarga que la variable, aquesta es trunca a la mida

necessària

Si l’expressió és mes curta que la variable s’afegeixen espais en blanc fins

arribar a la mida declarada de la variable

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

15

1.3 Instruccions de execució condicional

L’ordinador, a més de realitzar operacions aritmètiques és capaç de fer comparacions i

executar determinades instruccions en funció del resultat. Per realitzar les comparacions

s’utilitzen expressions o sentències lògiques acompanyades dels corresponents

operadors lògics. Veiem primer aquests últims:

Operador lògic Significat

.EQ. igual a

.NE. diferent de

.LT. més petit que

.LE. més petit o igual que

.GT. més gran que

.GE. més gran o igual que

.AND. i lògic

.OR. o lògic

.NOT. negació lògica

És important tenir en compte que els punts formen part de l’operador lògic.

La sentència if , una de les estructures de control clau, es la que permet realitzar les

comparacions. Veiem com funciona:

El cas més senzill seria la sentència

if (expressió_lògica) sentència1

En aquest cas, s’avalua l’expressio_logica i si es vertadera s’executa la sentència1.

Per exemple, amb la sentència

if(x.LT.0.0) x = -x

si el valor de la variable x és negatiu li canviem el signe (obtenim el valor absolut). De

fet, ja hem vist que la funció intrinseca abs( ) faria també aquesta feina.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

16

Si volem incloure més d’una instrucció dins el bloc if llavors hem de fer

if (expressió_lògica) then

sentència1

sentència2

...

end if

Per altra banda, també podem dirigir l’execució del programa en funció del resultat de

l’expressió lògica (i no només realitzar una sèrie d’instruccions només en cas que sigui

vertadera, com fins ara). Veiem-ho:

if (expressió_lògica) then

sentència1

...

else

sentència2

...

end if

En aquest cas, si l’expressió lògica es vertadera s’executa la sentència1 i de més

sentències escrites abans de la paraula else. En cas que hagués estat falsa, l’execució

del programa salta a la sentència immediatament posterior a else i posteriors fins end if.

Per exemple:

if (x.GT.-3.0.AND.x.LE.10.0) then

write(*,*) ‘El nombre esta dins l’interval (–3 , 10]

else

write(*,*) ‘El nombre esta fora de l’interval (–3 , 10]

end if

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

17

Per últim, es poden incloure dins la sentència if més d’una opció, mitjançant altres

expressions lògiques:

if (expressió_lògica1) then

sentència/es 1

else if (expressió_lògica2) then

sentència/es 2

...

else if (expressió_lògica n) then

sentència/es n

else

sentència/es que s’executen cas que totes les expr. lògiques

anteriors siguin falses

...

end if

De tal manera que, per exemple, el bloc de sentències 2 només s’executarà si

l’expressió lògica 1 es FALSA i l’expressió lògica 2 és VERTADERA. Desprès

d’això el programa continuarà amb la sentència immediatament posterior a end if.

Fixeu-vos també que, tot i que no és cap obligació, les sentències que queden entre les

sentències pròpies de control (if..else...end if), s’indenten per millorar la comprensió

del programa.

Exemple: Fes un programa que trobi les solucions d’una equació de segon grau del tipus ax2 +

bx + c = 0. El programa hauria de distingir entre els possibles casos que es poden donar (no hi

ha solució real, una solució doble, dues solucions) i escriure’n el resultat en funció del cas.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

18

1.4- Instruccions de execució repetitiva (bucles)

Els bucles son una de les tècniques de programació més utilitzades. Bàsicament

consisteixen en repetir un numero determinat (finit) o indeterminat (infinit) de vegades

les sentències que s’executen dins el propi bucle.

En FORTRAN existeixen dos tipus de instruccions per fer bucles, segons el numero de

vegades que es repeteixen sigui determinat o indeterminat (depenent d’una condició).

Res millor que un exemple. Veiem com funciona

do while(expressió_lògica) (1)

sentència 1

....

end do (2)

En aquest cas tenim un bucle on el nombre de vegades que es repeteix és indeterminat i

dependent de la condició lògica. Quan el programa entra en el bucle (1) avalua

l’expressió lògica. Si es vertadera, entra dins el bucle i executa les sentències fins

arribar al punt final del bucle (2). Si fos falsa no entraria en el bucle i el control del

programa tornaria a la sentència immediatament posterior al punt final del bucle (2).

Cas d’haver estat vertadera, el programa tornaria al començament del bucle (1) i

tornaria a avaluar l’expressió lògica. Si fos vertadera, entraria al bucle, etc...

Per exemple, el següent és un programa que suma els N primers nombres.

read(*,*) N

i=1

isuma=0

do while (i.LE.N)

isuma=isuma + i

i= i+1

end do

write(*,*) ‘La suma dels ‘,N, ‘ primers nombres enters es: ‘,isuma

Analitzem-ho. Primer es llegeix el nombre final N, de tipus INTEGER. Tot seguit

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

19

inicialitzen dues variables INTEGER (i, isuma). La variable i ens servirà de

comptador, mentre que a isuma n’acumularem el resultat final. Quan el control del

programa arriba a l’entrada del bucle, comprova si i és menor o igual que N. En cas

afirmatiu entra al bucle. A dins, el que fem es sumar el valor de i al total (isuma) i,

posteriorment, incrementar en una unitat el valor del comptador i. Quan s’arriba al final

del bucle (end do) el programa torna al principi a comprovar que i encara es menor o

igual que N.

És important incrementar la variable i dins el bucle perquè sinó tindríem un bucle

infinit i bàsicament podríem “penjar” l’ordinador.

Si, per exemple, haguéssim donat a N un valor de 7, el programa entraria fins a 7

vegades el bucle i aniria sumant a isuma els valors 1, 2,3 ..., fins a 7.

Valor de i Valor de isuma

1 1

2 3

3 6

4 10

5 15

6 21

7 28

Però, de fet, també podríem haver fet el programa utilitzant una estructura de bucle

determinat, ja que si N és 7 cal que el bucle es repeteixi exactament 7 vegades.

En aquest cas seria

read(*,*) N

do i=1,N

isuma=isuma+i

end do

write(*,*) ‘La suma dels ‘,N, ‘ primers nombres enteres es: ‘,isuma

Ara la sentència inicial del bucle té l’estructura

do comptador_INTEGER = valor_inicial, valor_final, (valor_pas)

No hi ha, doncs, expressió lògica. Quan el programa entra per primer cop al bucle li

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

20

assigna a la variable comptador_INTEGER el valor_incial (per tant, no hi ha necessitat

de inicialitzar-la com abans). Tot seguit s’entra dins el bucle i s’executen les sentències.

Quan s’arriba al final del bucle (end do) es torna a la sentència inicial i s’incrementa en

valor_pas2 el valor de la variable comptador _INTEGER. Aquest procés es repeteix fins

que la variable comptador _INTEGER prengui el valor_final o, en tot cas, no el superi.

És important no modificar el valor de la variable comptador_INTEGER dins

l’estructura del bucle. De fet, molts compiladors no ho permeten i donen error.

Els bucles també es poden aniuar. Per exemple, si volem generar els 99 primers

nombres inclòs el 0, podem fer

do i = 0,99

write(*,*) i

end do

o bé

do i=0,9

do j=0,9

write(*,*) 10*i + j

end do

end do

En aquest segon cas, inicialment la variables i prenen els valor 0 i entra en el bucle.

Llavors ens troben un altre bucle, on el valor inicial de j és 0 i va variant fins a 9, per a

cada valor possible de i. Per tant, la instrucció

write(*,*) 10*i + j

s’executarà un total de 9x9 = 81 vegades.

Fixeu-vos també que, de la mateixa manera que amb les sentències de control (if...end

if), les sentencies dintre de cada bucle es solen indentar per millorar la comprensió del

programa.

2 De fet, valor_pas és optatiu. Si no s’especifica assumeix que la variable incrementa en una unitat.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

21

Finalment, també es poden simular els bucles mitjançant sentencies de decisió i de salt,

tipus go to. Veiem un exemple

read(*,*) N

isuma=0

i=1

1 if(i.LE.N) then

isuma=isuma+i

i=i+1

go to 1

end if

write(*,*) ‘La suma dels ‘,N, ‘ primers nombres enteres es: ‘,isuma

Aquest programa també realitza la suma dels N primers nombres enters. La repetició de

les sentències s’aconsegueix amb la sentència go to 1. El que fa és transferir el control

de l’execució a la línia etiquetada amb el numero 1.

De tota manera, és molt recomanable no utilitzar mai les sentencies de salt tipus go to.

La raó principal és que dificulten la comprensió del codi font.

Exemple: Un mètode per resoldre equacions no lineals és el de les substitucions successives. Si

tenim una equació del tipus f(x)=x , es dóna un valor inicial a x i es calcula la seva imatge f(x).

Si f(x)=x, vol dir que x és la solució. Cas contrari, s’utilitza el valor de f(x) com a nova

aproximació a la solució i s’itera fins que la diferència entre el valor de x i la seva imatge f(x)

sigui menor que un nombre suficientment petit (precisió). Fes un petit programa que trobi la

solució a l’equació ln(x)=x.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

22

1.5- Altres dispositius Input/Output

Ens podem comunicar amb l’ordinador a traves d’altres dispositius a banda del teclat i

la pantalla. En concret, és molt freqüent fer servir fitxers per emmagatzemar les dades ,

tant d’entrada (input) com de sortida (output).

Això pot ser útil per introduir ràpidament gran quantitat d’informació al programa (una

matriu, per exemple) o per emmagatzemar els resultats directament per posteriors

aplicacions.

En FORTRAN l comanda open ens serveix per obrir un fitxer. La sintaxi bàsica és la

següent

open(nombre_INTEGER, file=cadena_CHARACTER)

on cadena_CHARACTER és el nom del fixer i nombre_INTEGER el número que se li

assignarà internament. Per exemple amb

open(1, file=”dades.dat”)

obrim un fitxer al directori de treball que es diu dades.dat, i internament li assignem el

nombre 1.

El nom del fitxer es pot introduïr també mitjançant una variable de tipus

CHARACTER. Per exemple aquest petit tros de codi

CHARACTER*20 nomfitxer

write(*,*) ‘Escriu el nom del fitxer que vols obrir/crear “

read(*,*) nomfitxer

open(1,file=nomfitxer)

ens demana (per pantalla) el nom del fitxer que volem obrir, el guarda en una variable

de tipus CHARACTER anomenada nomfitxer i finalment obre el fitxer amb el nom que

hem entrat (per teclat) , tot assignant-li la unitat 1.

Podem tenir accés a tants fitxers com vulguem, escrivint cada cop una sentència de tipus

open per cadascun.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

23

Un cop tenim un fitxer obert (accessible) podem llegir dades que haguéssim

introduït anteriorment o bé escriure dades noves.

Per llegir dades existents al fitxer, fem servir al comanda read. Així,

read(1,*) N,x0

llegeix un nombre enter i un nombre real del fitxer que li hem assignat el nombre 1, és a

dir, en aquest cas dades.dat. És clar que al fitxer hauríem d’haver escrit prèviament els

valors de les variables per què els llegeixi el programa de la mateixa manera que ho

hauríem fet mitjançant el teclat.

Per tant, el fitxer dades.dat haurà de contenir, per exemple

10, 0.57d0

o bé

10

0.57d0

Si, per contra, el fitxer no existia prèviament (o el volem sobreescriure) i hi volem

escriure dades, faríem, per exemple

write(1,*)’Aquesta línia sortirà al començament del fitxer’

write(1,*)’Tot seguit escric un nombre sencer i un de real’, N,x0

Si obrim el fitxer dades.dat amb un editor simple com el Bloc de Notes del Windows hi

trobaríem el següent

Aquesta línia sortirà al començament del fitxer

Tot seguit escric un nombre sencer i un de real 10 0.57d0

És molt important tenir en compte que l’accés als fitxers és seqüencial.

És a dir, que per accedir a la línia n-sima d’un fitxer haurem d’haver llegit les n-1 línies

anteriors. Quan obrim un fitxer amb la comanda open, el programa esta preparat per

llegir/escriure de/a la primera línia del fitxer. Conforme anem llegint o escrivint anem

avançant línia a línia.

Un comanda que pot ser útil en algunes circumstàncies és rewind(nombre_fitxer), de

manera que si fem

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

24

rewind(1)

tornem al programa a la posició inicial del fitxer (primera línia).

Tot i que no és necessari pel correcte funcionament del programa, és recomanable

tancar el fitxer un cop hàgim escrit/llegit tota la informació amb la comanda

close(nombre_fitxer)

close(1)

Finalment, val a dir que les unitats 5 i 6 estan reservades per defecte i corresponen a

“teclat” i “pantalla”. Es a dir que

write(*,*) és equivalent a write(6,*) i

read(*,*) és equivalent a read(5,*)

Per exemple, per fer que el programa escrigui un llistat dels N primers nombres sencers

amb els corresponents quadrats en un fitxer podríem fer el següent

open(2,file=”llista.out”)

read(*,*) N

do i=1,N

write(2,*) i, i*i

end do

end

Es molt recomanable donar extensió típica diferent als fitxers que han de ser

essencialment d’input i d’ouput. Per exemple, els fitxers d’input es solen anomenar

*.in o *.dat , mentre que pels d’output es solen fer servir extensions del tipus *.out

o *.log.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

25

1.6- Vectors i Matrius

En programació, un array o vector no és més que una manera ordenada

d’emmagatzemar un conjunt d’elements del mateix tipus sota un mateix nom. Aquests

elements, en FORTRAN 77 poden qualsevol dels tipus de variables que hem vist.

Per indicar en un programa que volem fer servir un array, primer de tot l’hem de

declarar amb una sentència DIMENSION. Com totes les sentencies de declaració, les

haurem de introduir sempre abans de les sentències d’execució. Veiem un exemple

DIMENSION a(10)

DIMENSION b(10,10), imat(10,15)

Amb la primera de les sentències anteriors hem declarat una variable array

monodimensional (vector) de dimensió 10 al què hem assignat el nom a. A la segona

hem declarat dos arrays bidimensionals (matrius) b i imat de dimensions 10x10 i 10x15,

respectivament.

A més, els elements del vector a i la matriu b seran variables de tipus REAL mentre que

la de la matriu imat seran de tipus INTEGER (perquè el nom comença per i, i sempre i

quan no hàgim sobreescrit les opcions per defecte).

És important entendre que, de nou, el fet de declarar no implica assignar cap valor als

elements dels vectors o matrius. Només n’informem al ordinador de la seva existència i,

en aquest cas, en fixem el nombre màxim d’elements per dimensió que en poden

emmagatzemar.

Per assignar valors als elements del vectors o matrius ho podem fem de la següent

manera amb sentències d’assignació:

a(1) = 2.0d0

read(*,*) b(2,3)

imat(1,15) = 2

En el primer cas emmagatzemem el valor 2.0d0 al primer element del vector a, al què es

fa referència com a a(1). En el segon accedim a l’element que es troba en la segona fila,

tercera columna i li assignem el valor que l’usuari entra externament mitjnaçat el teclat,

etc...

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

26

En FORTRAN 77, per assignar un valor a cada element d’un vector o una matriu s’ha

de fer element per element. Afortunadament, per això tenim els bucles. Per exemple, si

volem inicialitzar els elements del vector a a zero faríem simplement

do i=1,10

a(i) = 0.0d0

end do

Per entrar els elements de la matriu b externament mitjançat el teclat podríem fer

do i=1,10

do j=1,10

read(*,*) a(i,j)

end do

end do

Fixa’t que en aquest cas els elements de la matriu s’introdueixen un per un i per

columnes. Existeix una manera alternativa que permet llegir (i escriure) matrius de

manera semblant a com ho fem sobre el paper, introduint els valors filera per filera. Per

fer això cal escriure el següent.

do i=1,10

read(*,*) (a(i),i =1,10)

end do

i

do i=1,10

read(*,*) (a(i,j),j =1,10)

end do

En el primer cas entraríem els elements del vector un a un i entre comes. En el segon,

entraríem els elements d’una mateixa filera un a un i entre comes, i això per les 10

fileres de la matriu (començant per la primera).

i vectors.

A l’hora d’escriure la matriu per pantalla podem fer, de la mateixa manera

do i=1,10

write(*,*) (a(i,j),j =1,10)

end do

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

27

En FORTRAN podem definir hipermatrius de fins a 7 dimensions, tot i que rarament en

necessitarem més de dues i excepcionalment 3 o 4.

És també molt important veure que, de la mateixa manera que els elements de les

matrius s’introdueixen un a un, no es poden fer operacions directament amb les

matrius/vectors. És a dir, si volem sumar dues matrius A i B (que es puguin sumar) no

ho podem fer com

C = A +B

sinó que haurem de calcular els elements de la matriu resultant un per un. De nou, els

bucles faciliten molt la feina. Primer de tot, escrivim l’expressió corresponent a un

element qualsevol de la matriu suma

c(i,j) = a(i,j) + b(i,j)

Ara, assumint que les matrius anteriors A i B han estat declarades de dimensió 10x10, el

codi que ens permetria calcular la suma de les matrius seria simplement

do i=1,10

do j=1,10

c(i,j) = a(i,j) + b(i,j)

end do

end do

És a dir, escrivim l’expressió general i mitjançant els bucles que calguin ho estenem per

tots els valors possibles.

Val a dir, finalment, que la dimensió amb què és declarat un array representa només la

dimensió màxima de l’array. De fet, és pràctica habitual declarar un array de dimensió

suficientment gran per als nostres propòsits, generalment amb una constant

PARAMETER(MAXDIM=100)

DIMENSION A(MAXDIM,MAXDIM), B(MAXDIM,MAXDIM)

i després fer servir en realitat una dimensió més petita pels nostres càlculs

...

READ(*,*) N,M

do i=1,N

read(*,*) (A(i,j),j =1,M)

end do

....

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

28

El codi següent

DIMENSION A(N,M), B(N,M)

...

READ(*,*) N,M

do i=1,N

read(*,*) (A(i,j),j =1,M)

end do

....

no es possible en FORTRAN77 i donarà error. La raó és que, en el moment de

declarar les matrius A i B , les variables N i M no tenen assignat cap valor (i de cap

manera es pot escriure la sentència READ abans de les sentencies de declaració!).

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

29

1.7 Subprogrames: Funcions i Subrutines

El llenguatge FORTRAN té dos tipus de subprogrames: la subrutina i la funció externa.

L’objectiu és el de definir subprogrames o blocs que realitzin tasques específiques.

Aquests blocs realitzaran part del programa i poden ser utilitzat per a la construcció

d’un programa major o futur. Per tal que es pugui segmentar el programa cal

comunicació entre els diferents subprogrames. Aquesta comunicació es fa mitjançant els

paràmetres dels subprogrames. Les regles per passar la informació del programa

principal als subprogrames són les mateixes tant per les funcions com per les subrutines.

La principal diferencia entre una funció i una subrutina és que la primera torna al

programa principal, un valor emmagatzemat en el seu propi nom, mentre que la

subrutina ho fa a traves dels paràmetres.

Funcions

Una utilitat obvia de les funcions en FORTRAN és precisament la de definir funcions

matemàtiques complexes. De fet, el FORTRAN té una sèrie de funcions matemàtiques

bàsiques per defecte. Son les funcions intrínseques. Algunes d’aquestes son

Funció Resultat

sin(nombre_real); cos(nombre_real);

tan(nombre_real)

sinus, cosinus o tangent d’un nombre real

en radians

asin(nombre_real); acos(nombre_real);

atan(nombre_real)

arcsinus, arcosinus o arctangent en

radians exp(nombre_real) Valor de e elevat a la potència indicada

sqrt(nombre_real) Arrel quadrada d’un nombre real

log(nombre_real) Logaritme neperià d’un nombre real

log10(nombre_real) Logaritme en base 10 d’un nombre real

abs(nombre_real_o_integer) Valor absolut d‘un nombre real o sencer

mod(sencer1,sencer2) Resta entera de la divisió entre sencer1 i

sencer2

real(nombre_sencer) Equivalent real d’un nombre sencer

Quan l’argument de la funció sigui un nombre real de doble precisió (REAL*8,

DOUBLE PRECISION) s’afegeix una “d” al nom de la funció.

sin(0.56) dsin(0.56d0)

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

30

sqrt(37.8) dsqrt(4.0d0)

Tot i això alguns compiladors ajusten automàticament la precisió al tipus de dada que

s’utilitza com a argument sense necessitat d’afegir aquesta “d” extra.

Podem fer servir les funcions intrínseques en sentencies d’assignació o mostrar el

resultat directament

x = sin(3.0)

write(*,*) dsqrt(x)

Nosaltres podrem definir funcions (que poden ser matemàtiques o de qualsevol tipus) en

FORTRAN de manera que les puguem fer servir de manera anàloga a com s’utilitzen

les funcions intrinseques.

Per fer-ho hem de crear un subprograma de tipus funció. En aquest cas la nomenclatura

és la següent

function nom_funció (llista d’arguments)

declaració dels arguments

sentencies....

nom_funcio=expressió

end

És important tenir en compte que, com a subprograma, cal escriure la funció de manera

externa al programa principal. És a dir, normalment escriurem les funcions al final de

programa i sempre desprès de la sentencia end. (Fixeu-vos que al final de la

declaració de la funció també cal afegir la sentencia end).

Un cop definida la funció la podem fer servir dins el programa com una funció

intrínseca més. En aquest cas podríem fer

x = nom_funcio(llista d’arguments)

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

31

Veiem un exemple: Podríem definir la funció f(x) =2 e- 2x

+ sin(x)

function y(x)

IMPLICIT DOUBLE PRECISION (a-h,o-z)

PARAMETER(PI=dacos(-1.0d0))

y = 2.0d0*exp(-2.0d0*x)-sin(PI*x)

end

(Fixa’t en la manera d’introduir el valor de . Així s’aconsegueix el màxim de precisió)

i dintre del programa podem cridar a la funció amb sentencies del tipus

val = y(2.0)

read(*,*) x0

write(*,*) ‘El valor de la funció a x0 = ‘,x0, ‘es ‘,y(x0)

Exemple: Definirem una funció entera que comprovi si un nombre N1 es divisible per

un altre N2. Cas que si, la funció ha de prendre el valor 1 i 0 en cas contrari. En aquest

cas li hem de passar a la funció dos arguments (N1i N2) que seran dues variables de

tipus INTEGER. Ho podríem fer de la següent manera

FUNCTION idiv(N1,N2)

ir = mod(N1,N2)

IF(ir.EQ.0) then

idiv=0

else

idiv=1

end if

end

Llavors el programa principal quedaria

PROGRAM check_division

WRITE(*,*) ‘Entra dos nombres enters i et dire si son divisibles entre si’

READ(*,*) N1,N2

IF(idiv(N1,N2).EQ.1) then

WRITE(*,*) N1,' i’ ,N2, ‘son divisibles’

else

WRITE(*,*) N1,' i’ ,N2, ‘no son divisibles’

end if

end

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

32

De fet, aquest programa no funcionarà en tots els casos. Es un exemple típic de

programa ben escrit però mal pensat.

Fixa’t que si N2 es més gran que N1 el programa dirà que els números son divisibles!

Per tant ens caldria afegir a la funció un filtre previ que comprovi que el divisor sigui

més petit que el dividend.

Per exemple

FUNCTION idiv(N1,N2)

if(N1.gt.N2) then

ir = mod(N1,N2)

else

ir = mod(N2,N1)

end if

IF(ir.EQ.0) then

idiv=0

else

idiv=1

end if

end

En l’argot informàtic diem que ara la funció és més robusta.

De tota manera, ja que la funció en el fons ens ha de dir si o no, el més adient és definir-

la de tipus LOGICAL. La funció, amb una altra petita modificació podria quedar de la

següent manera.

LOGICAL FUNCTION idiv(N1,N2)

idiv=.true.

if(N1.gt.N2) then

ir = mod(N1,N2)

else

ir = mod(N2,N1)

end if

IF(ir.EQ.0) idiv=.false.

end

Fixeu-vos que la funció idiv és de tipus LOGICAL, de la mateixa manera que la versió

anterior era de tipus INTEGER. Per construir una funció que retorni un nombre

INTEGER només cal que el nom comenci per les lletres i-n.(sempre i quan no hàgim

sobreescrit les opcions per defecte). Si volem una funció de tipus LOGICAL ho hem de

expressar explícitament a l’hora de definir la funció (LOGICAL FUNCTION).

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

33

Cal anar en compte ara. Ja que la funció és de tipus lògic, el seu resultat s’ha d’assignar

o ha de aparèixer en un context de tipus LOGICAL també. Per tant, caldria modificar el

programa principal de la manera següent

PROGRAM check_division

LOGICAL idiv

WRITE(*,*) ‘Entra dos nombres enters i et dire si son divisibles entre si’

READ(*,*) N1,N2

IF(idiv(N1,N2).EQ..true.) then

WRITE(*,*) N1,' i’ ,N2, ‘son divisibles’

else

WRITE(*,*) N1,' i’ ,N2, ‘no son divisibles’

end if

end

Per últim, es important veure que els noms de les variables que es passen com a

argument a la funció i al programa principal no tenen perquè coincidir i, de fet, no ho

solen fer. El que si ha de coincidir és el tipus de variable i l’ordre en que es passen els

arguments. Per tant, escriure la funció anterior com

LOGICAL FUNCTION idiv(K1,K2)

idiv=.true.

if(K1.gt.K2) then

ir = mod(K1,K2)

else

ir = mod(K2,K1)

end if

IF(ir.EQ.0) idiv=.false.

end

no afecta en absolut el funcionament del programa. Simplement, quan el control del

programa es passa a la funció, aquesta pren els valors emmagatzemats a les variables

N1 i N2, els guarda amb altres variables K1 i K2 per utilitzar-los posteriorment. Tot i

això, en FORTRAN, si a la funció es modifiquen els valors assignats a K1 o K2, aquests

canvis es veuran reflectits també a les variables N1 i N2 quan el control del programa

torni al programa principal.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

34

Subrutines

Sovint, les operacions que cal fer son massa llargues o complexes per poder incloure-les

dins una funció3. Si decidim posar-les dins el programa principal podríem fer més difícil

el seguiment de l’estructura lògica del programa. Per exemple, si al mig d’un programa

haguéssim d’invertir una matriu seria més còmode dir-li al ordinador

Deixa per un moment el que estàs fent, inverteix aquesta matriu, i quan estiguis, torna

amb el que feies

Això precisament és el que fan les subrutines. És un programa independent que és cridat

dins el programa principal, i que realitza una feia concreta. Un cop terminada, es retorna

automàticament el control al programa principal. En aquest cas la sintaxi és la següent

subroutine nom_funció (llista d’arguments)

declaració dels arguments

sentencies....

end

És clar que, com a programa independent, necessita comunicar-se amb el programa

principal per a) disposar de les dades inicials necessàries (input) i b) passar-li al

programa principal les noves dades calculades (output). Aquestes variables d’input,

output i input-output4 s’especifiquen a la llista d’arguments. Noteu que aquestes

variables s’han de declarar, de la mateixa manera que es fa al programa principal. És a

dir que si la variable que passem es de tipus CHARACTER o una matriu, cal incloure

les respectives sentències CHARACTER i DIMENSION a la subrutina. De la mateixa

manera, per evitar sorpreses, si hem afegit al programa principal la sentència

implicit double precision(a-h,o-z)

el mateix hauríem de fer als subprogrames (tant de tipus funció com subrutina)

3 A més, podríem necessitar que el subprograma ens retornés més d’un únic valor (una matriu, per

exemple) i per tant la funció no ens serviria.

4 En aquest cas el valor de la variable d’input inicial es sobreescriu dins la subrutina i el seu valor

modificat es passa al programa principal

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

35

Crides a les subrutines

Per poder accedir a una subrutina dins un programa farem servir la sentència CALL. Per

exemple, si hem definit una subrutina determinada

subroutine fes_algo(llista_arguments)

la cridarem des de el programa principal fent

call fes_algo(llista_arguments)

Recordeu que a la subrutina li hem de passar el mateix tipus d’arguments (i en el

mateix ordre), però no tenen perquè tenir el mateix nom. A més, les variables que no

es passen com a arguments dins una subrutina no són visibles pel programa

principal i viceversa. Per tant, podem fer servir variables amb el mateix nom al

programa principal (tipicament i, j, k, etc per als bucles) i als subprogrames sense que

interfereixin.

Cal tenir en compte que l’ús de subrutines respon més a raons estètiques que

computacionals. Res impedeix fer un programa sense subrutines, tot i que sovint es

redueix la complexitat i longitud del codi. Per exemple, suposem que disposem d’una

subrutina que realitza el producte de dues matrius quadrades de dimensió N. La

subrutina es diu multmat i els seus arguments son la dimensió de les matrius (N), les

matrius a multiplicar (A,B) i la matriu on emmagatzemarem el resultat (C).

Les primeres linees de la declaració de la subrutina haurian de ser quelcom com

subroutine multmat(N,A,B,C)

implicit double precision(a-h,o-z)

parameter(maxdim=100)

dimension A(maxdim,maxdim),B(maxdim,maxdim),C(maxdim,maxdim)

Llavors, dins el programa prinicpal, la subrutina s’hauria de cridar de la manera següent

call multmat(N,A,B,C)

Podem veure la utilitat de definir subrutines si ens plantegem determinar la k-essima

potència d’una matriu (Ak). En aquesta cas el programa es podria escriure de la següent

manera

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

36

PROGRAM potencia

PARAMETER(MAXDIM=100)

DIMENSION A(MAXDIM),A2(MAXDIM), AK(MAXDIM)

WRITE(*,*) ‘Entra les dimensions de la matriu quadrada :'

READ(*,*) N

WRITE(*,*) ‘Entra la matriu per files:'

do i = 1,N

READ(*,*) (A(i,j)=j=1,N)

end do

WRITE(*,*) Quina potència vols calcular?'

READ(*,*) k

do i=1,N

do j=1,N

a2(i,j)=a(i,j) !Copiem la matriu A a una matriu auxiliar

end do

end do

do i=1,k-1 ! hem de realitzar k-1 productes...

call multmat(N,A2,A,Ak) !fem Ak=A2xA

do i=1,N

do j=1,N

a2(i,j)=ak(i,j) !Desprès de fer cada producte copiem

end do !el resultat en la matriu auxiliar

end do

end do

WRITE(*,*) ‘Resultat:'

do i=1,N

WRITE(*,*) (Ak(i,j)=j=1,N)

end do

end

És clar que no és el algorisme més eficient! Per altra banda, fixeu-vos que hi ha part de

codi repetida; el necessària per copiar una matriu en una altra. Per fer el codi més

llegible podríem fer una altra subrutina que fes aquesta feina.

SUBROUTINE copiamatriu(N,A,B)

PARAMETER(MAXDIM=200)

DIMENSION A(MAXDIM),B(MAXDIM)

do i=1,N

do j=1,N

B(i,j)=A(i,j) !Copiem la matriu A a B

end do

end do

end

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

37

i llavors al programa principal es podria fer

PROGRAM potencia

PARAMETER(MAXDIM=200)

DIMENSION A(MAXDIM),A2(MAXDIM), AK(MAXDIM)

WRITE(*,*) ‘Entra les dimensions de la matriu quadrada :'

READ(*,*) N

WRITE(*,*) ‘Entra la matriu per files:'

do i=1,N

READ(*,*) (A(i,j)=j=1,N)

end do

WRITE(*,*) Quina potència vols calcular?'

READ(*,*) k

call copiamatriu(N,A,A2)

do i=1,k-1

call multmat(N,A2,A,Ak) ! hem de realitzar k-1 productes...

call copiamatriu(N,Ak,A2)

end do

WRITE(*,*) ‘Resultat:'

do i=1,N

WRITE(*,*) (Ak(i,j)=j=1,N)

end do

end

Totes dues versions fan el mateix però aquesta última queda més compacta i més fàcil

d’entendre.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

38

Procés de compilació

Un cop hem finalitzat un programa principal, cal tenir en compte que el codi

corresponent a les funcions i/o subrutines que utilitzi cal incloure’l en el procés de

creació del programa executable (.exe). Això ho podem fer de dues maneres:

a) Podem incloure al fitxer que conté el programa principal el codi font de les funcions i

subrutines. Si ho fem d’aquesta manera, el procés de compilació és equivalent al que

caldria fer per un codi font sense subprogrames.

b) Si tenim el codi font del programa principal i el dels subprogrames en fitxers

diferents, aleshores hem de compilar tots dos fitxers per separat i ajuntar-los (link)

posteriorment per general el fitxer executable. En aquest cas, caldria obtenir primer els

fitxers OBJECTE (.OBJ) per cada fitxer (generalment amb la opció “–c” del

compilador) i finalment ajuntar els objectes per crear l’executable (generalment amb la

opció “-out” )

Cal tenir en compte que un cop obtingut el corresponent fitxer OBJECTE, si el fitxer

del que prové no es modifica, no cal recompilar-lo cada vegada!

De tota manera, el compilador normalment fa aquesta feina per nosaltres.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

39

2.- Àlgebra lineal

No entrarem en detalls ni en definicions massa formals sinó que veurem únicament

aquells conceptes que necessitarem durant el curs.

2.1 Espais vectorials

Un espacio vectorial es una estructura algebraica que incluye dos tipos de elementos

que cumplen una serie de propiedades y axiomas. Éstos elementos son los escalares y

los vectores.

En general, los escalares serán el conjunto de números reales o complejos.

Los vectores son objetos abstractos que cumplen una serie de propiedades y no tienen

porque ser únicamente los vectores geométricos que conocemos. El término vector

también se usa para describir entidades como matrices, polinomios o funciones. Por

ejemplo, los vectores que se usan en mecánica cuántica son funciones.

2.2 Combinación lineal, independencia lineal y base

Supongamos un conjunto de N vectores de un espacio vectorial determinado

Nvvv ,...,, 21 .

Una combinación lineal de dichos elementos se define como la suma siguiente

N

i

iiNN vavavava ...2211

donde a1, a2,.., an son escalares.

El conjunto de N vectores es linealmente independiente si se cumple que

0N

i

iiva

únicamente cuando a1 = a2 =...= an = 0.

Esto implica que ningún vector del conjunto Nvvv ,...,, 21 puede expresarse como

combinación lineal de los demás.

El conjunto de vectores será un conjunto generador del espacio vectorial si cualquier

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

40

vector w que pertenezca al espacio vectorial puede expresarse como combinación lineal

de ellos

N

i

iiNN vavavavaw ...2211

.

Además, si esta combinación es única el conjunto generador será una base del espacio.

En este caso, los vectores del conjunto serán además linealmente independientes.

Los coeficientes escalares a1, a2,.., an serán las componentes del vector w en la base.

El numero de vectores de una base determina la dimensión del espacio vectorial. En

realidad, los espacios vectoriales pueden ser de dimensión finita o infinita5. El conjunto

de todos los vectores de n componentes reales conforma el espacio vectorial Rn, cuya

dimensión es precisamente n.

Por ejemplo, para el espacio Euclidiano tridimensional, R3. el conjunto de vectores

{(1,2,3), (0,1,2), (−1,1/2,3), (1,1,1)},

son generadores del espacio pero no son base, porque no son linealmente

independientes. Una base del espacio la forman los vectores

{(1,0,0), (0,1,0), (0,0,1)}.

Sin embargo, los vectores

{(1,0,0), (0,1,0), (1,1,0)}

no son generadores (ni base) de R3 porque los vectores cuya tercera componente sea

diferente de cero no pueden expresarse como combinación lineal de ellos.

2.3 Producte escalar

Aparte de las propiedades propias del espacio vectorial se define también un producto

interno que permite introducir las nociones de distancia, ángulo y norma, llamado

producto escalar.

Un producto escalar debe cumplir también una serie de propiedades y de hecho su

definición depende del tipo de espacio vectorial.

5 En los espacios que intervienen en la mecánica cuántica, Espacios de Hilbert, los vectores son

funciones definidas sobre el cuerpo complejo que cumplen una serie de condiciones y la dimensión del

espacio es infinita.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

41

Para el espacio vectorial Rn se define el producto escalar entre dos vectores como

n

i

iinn

T vwvwvwvwvwvw ...2211

és a dir, la suma dels productes de les components dels vectors.

A partir del producte escalar entre un vector amb si mateix

22)( vwvvN

i

i

trobem el concepte de norma

21vvv

Direm que un vector està normalitzat quan la seva norma és la unitat

1v

Es demostra també que el producte escalar entre dos vectors també cumpleix

cosvwvw

a on és l’angle que formen ambdós vectors. Per tant, quan dos vectors són ortogonals

entre si, el seu producte escalar s’anula

vwsivw

0

Si els vectors d’una base iv

són ortogonals ente si i estan normalitzats direm que la

base és ortonormal o que està ortonormalitzada.

Podem escriure ambdues condicions al meteix temps fent servir la funció delta de

Kronecker

ijji vv

on

ji

jiij

1

0

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

42

2.4 Matrius: propietats i operacions

Definicions i propietats elementals.

Una matrius és una taula rectangular de generalment números que poden ésser sumats o

multiplicats. Les línies horitzontals de números es diuen fileres i les verticals

columnes. Una matriu composada per n files i m columnes en diem una matriu de

dimensió n x m.

Donada una matriu A de dimensió n x m , representem l’element que ocupa la i-éssima

fila i j-éssima columna com Aij o bé A(i,j).

Un vector no és més que una matriu on una de les dimensions és 1. Així, un vector

filera és una matriu de dimensió 1 x m i un vector columna una matriu de dimensió

n x 1.

Suma de matrius

Donades dues matrius de dimensió n x m, A i B, podem definir la seva suma C = A + B

com la matriu de dimensió n x m els elements de la qual venen donat per la suma dels

elements corresponents de les matrius suma A i B.

jiBAC ijijij ,

Per poder sumar dues matrius, aquestes han de tenir les mateixes dimensions. La matriu

resultant tindrà també les mateixes dimensions.

Producte de matriu per escalar

Donada una matriu A qualsevol i un escalar definim el producte escalar de per A,

B = ·A com el producte de per cada element de la matriu A

jiAB ijij ,

Producte de matrius

El producte matricial entre dos matrius A i B només es pot dur a terme quan el numero

de columnes de la matriu A és igual al número de files de la matriu B. En aquest cas,

sigui a matriu A de dimensió n x m i la matriu B de dimensió m x p tenim que el

producte matricial A·B és una altra matriu C de dimensió m x p , els elements de la qual

són

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

43

pjmiBABABABACn

k

kjiknjinjijiij ,1,1...2211

El producte de matrius no és conmutatiu, per tant, en general

A·B ≠ B·A

De fet, en l’exemple anterior el producte B·A no és possible perquè el nombre de fileres

de B no coincideix amb el nombre de columnes de A.

Tipus de matrius

Matriu quadrada

Matriu on el nombre de fileres és igual al nombre de columnes. El producte enter dues

matrius quadrades és una altra matriu quadrada. Amb matrius quadrades els productes

matricials A·B i B·A són possible, tot i que en general no donen el mateix resultat.

Matriu simètrica

Una matriu quadrada A és simètrica si compleix que

jiAA jiij ,

Matriu diagonal

Una matriu quadrada A és diagonal si els elements de fora de la diagonal principal són

zero

jiAij 0

Matriu identitat

La matriu identitat és una matriu quadrada diagonal on els elements de la diagonal

principal són la unitat. Per tant , podem escriure els seus elements a partir d’una delta de

Kronecker

ijijI

La matriu identitat fa el paper d’element neutre per la suma de matrius. És a dir, el

producte d’una matriu quadrada per la matriu identitat (i viceversa) és la pròpia matriu.

A·I = I·A = A

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

44

Matriu transposada

Donada una matriu A de dimensió n x m , definim la seva matriu transposada, AT, que

serà de dimensió m x n intercanviant les seves fileres i columnes,

nmmm

n

n

T

nmnn

m

m

aaa

aaa

aaa

A

aaa

aaa

aaa

A

...

............

...

...

...

............

...

...

21

22212

12111

21

22221

11211

Per una matriu simètrica es compleix

A = AT

Per altra banda, en general

(AT)T = A

(A + B)T = A

T + B

T

(A·B)T = B

T· A

T

Per tant, el producte d’una matriu qualsevol per la seva transposada resulta en una

matriu simètrica

B = AT·A B

T = (A

T·A)

T = A

T·(A

T)T= A

T·A =B

Matriu Inversa

Donada una matriu quadrada A de dimensió n, es defineix la seva matriu inversa A-1

com la matriu que compleix que

A-1

·A = A·A-1

·= I

on I és la matriu identitat de dimensió n. Al matriu inversa A-1

és única.

En general

(A-1

)-1

= A

(A·B)-1

= B-1

· A-1

Matriu singular

Una matriu és singular quan no existeix la seva inversa. Quan el determinant d’una

matriu quadrada és zero (veure avall) la matriu és singular.

Matriu ortogonal o unitària

Una matriu quadrada U és ortogonal o unitària quan la seva transposta és la seva inversa

U-1

= UT·

Si dues matrius A i B són ortogonals el seu producte és també una matriu ortogonal

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

45

Una matriu és ortogonal si i només si els seus vectors columna son ortonormals, és a

dir, representa una base ortonormalitzada.

Traça d’una matriu

Es defineix la traça d’una matriu quadrada de dimensió n com la suma dels elements de

la diagonal principal

N

i

iiAAtr )(

Determinant d’una matriu

El determinant d’una matriu quadrada es pot veure com una funció d’aquesta que

retorna un escalar (número)

det(A) =

Quan el determinant d’una matriu és zero, aquesta matriu és singular (no invertible).

També vol dir una o més fileres o columnes de la matriu es pot expressar com a

combinació lineal de les altres; per tant, indica dependència lineal dels vectors filera o

columna que composen la matriu.

Es compleixen les següents propietats

det(AB) = det(A) det(B) = det (BA)

det(AT) = det(A)

det(U) = 1

A més

Si intercanviem dues fileres o columnes d’una matriu el seu determinant canvia

de signe

Multiplicant una filera o columna per un escalar multiplica el valor del

determinant per

Afegir un multiple d’una filera o columna a una altra no afecta al valor del

determinant

En seccions següents veurem com es determina el determinant d’una matriu quadrada.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

46

2.5 Canvis de base.

Donades dues bases iw

i iw

d’un espai vectorial Rn, podem escriure cada vector de

la base iw

en com a combinació lineal dels vectors de la base iw

.

nnnnnn

nn

nn

vavavaw

vavavaw

vavavaw

...

...

...

...

2211

22221212

12121111

Els coeficients de la combinació lineal es poden escriure en forma de matriu, que

representa el canvi de base.

nnnn

n

n

aaa

aaa

aaa

A

...

............

...

...

21

22221

11211

Podem escriure el procés de canvi de base de la següent manera

AVW

on W i V son matrius que contenen, en columnes, les components dels vectors de les

bases iw

i iw

, respectivament

nnnn

n

n

n

www

www

www

wwwW

...

............

...

...

...;;;

21

22221

11211

21

Per tant, podem escriure

nnnn

n

n

nnnn

n

n

nnnn

n

n

aaa

aaa

aaa

vvv

vvv

vvv

www

www

www

...

............

...

...

...

............

...

...

...

............

...

...

21

22221

11211

21

22221

11211

21

22221

11211

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

47

3.- Resolució d’equacions d’una variable

3.1. Recerca de zeros de funcions.

Els algorisme per trobar zeros de funcions son mètodes numèrics que permeten trobar

un (o més) valors de x tal que f(x) = 0 per una determinada funció f d’una variable.

Donada la naturalesa numèrica dels mètodes, aquests algorismes no serveixen per trobar

solucions exactes o enteres.

Aquests mètodes són de tipus iteratiu. Es parteix d’un (o més) punts inicials i es genera

una seqüència de valors de x que, si tot va bé, convergeixen a un zero de la funció.

Aquestes noves aproximacions a la solució del problema es generen tenint en compte

d’alguna manera els valors anteriors.

Els principals factors a tenir en compte quan es fan servir aquestes mètodes son:

la seva robustesa a l’hora de trobar una solució correcta

la velocitat de convergència

el grau de coneixement de les característiques de la funció f.

Finalment, és important donar-se compte que qualsevol equació d’una variable es pot

escriure sempre de la forma f(x) = 0, per tant, trobar zeros de funcions és en el fons

equivalent a resoldre equacions generals d’una variable.

3.2 Mètode de la bisecció

L’algorisme més senzill per trobar zeros de funcions és el mètode de la bisecció.

Requereix el coneixement de dos punts inicials x=a i x=b tal que f(a) i f(b) tinguin signe

diferent i és aplicable quan la funció f es continua com a mínim dins l’interval [a,b]. En

aquest cas ha d’existir per força (Teorema de Bolzano) com a mínim un punt en

l’interval tal que la funció s’anul·li, que serà un zero de la funció.

El mètode de la bisecció és molt robust però la seva convergència es força lenta.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

48

Algorisme

Primer de tot cal disposar de dos punts a i b on les imatges de la funció f(a) i f(b)

tinguin signe diferent. Si la funció és contínua dins l’interval b,ax , un zero de la

funció es trobarà dins el mateix.

a

b

f(a)

f(b)

El que proposa aquest mètode és dividir l’interval [a,b] en dos parts iguals calculant el

punt mig

xnou = (a + b)/2

a

b

f(a)

f(b)xnew = (a+b)/2

f(x new)

Llavors, segons sigui el signe6 de la imatge de la funció en aquest punt, f(xnou), el zero

de la funció es trobarà dins l’interval [a,xnou] (f(xnou) i f(a) tenen diferent signe) o bé

6 En el cas que f(xnou) = 0 voldria dir que hauríem trobar el zero de la funció.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

49

[xnou,b] (f(xnou) i f(b) tenen diferent signe). En el cas de la figura anterior és clar que

l’interval més petit on es troba la solució és el x[xnew, b].

En qualsevol cas, després d’aquesta primera iteració ens tornem a trobar en la mateixa

situació que al principi però amb l’avantatge de que l’amplada de interval en què es

troba el zero de la funció ha quedat reduït a la meitat.

Llavors, es torna a trobar de nou el punt mig del nou interval i va repetint l’operació fins

que

a) trobem un punt mig xnou tal que f(xnou) = 0

b) l’amplada de l’interval és suficientment petita per a la precisió que es necessita.

En realitat, com que treballem numèricament amb variables de tipus REAL, el cas a) és,

a la pràctica, gairebé impossible que succeeixi.

De fet, als programes no es sol imposar mai una condició com la de a) amb variables de

tipus REAL. Així, en comptes de f(xnou) = 0 en realitat el que farem és dir | f(xnou) | < ,

on és un número suficientment petit que marca la precisió del càlcul numèric.

Es tracta doncs d’un mètode iteratiu, i el nombre d’iteracions vindrà donat, pel tipus de

funció que estudiem i de la precisió o tolerància que volem.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

50

3.3 Mètode de la Regula-Falsi o de la falsa posició

Aquest mètode és també un mètode iteratiu que parteix d’un interval on sabem que es

troba la solució i que iterativament va disminuint l’interval, acotant així el valor del zero

de la funció.

Algorisme

La única diferència respecte al mètode de la bisecció és que a l’hora de reduir l’interval

on es troba el zero de la funció no fa servir simplement el punt mig,

a

b

f(a)

f(b)xnew

f(xnew)

sinó que fa servir el punt on la recta que passa pels punts {a, f(a)} i {b, f(b)} talla

l’eix d’abscisses. És a dir, s’aproxima la funció f en l’interval [a,b] per una recta i es

troba el punt de tall amb l’eix de les x d’aquesta.

L’equació general d’una recta en el pla és

f(x) = m x + n

i el punt de tall

xnou = -n/m

Si aquesta recta passa pels punts {a, f(a)} i {b, f(b)} es complirà que

f(a) = m a + n

f(b) = m b + n

Restant l’una de l’altra trobem

ab

afbfm

)()(

i d’altra banda, aïllant de la primera equació tenim

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

51

n = f(a) - m a

Per tant, l’expressió per trobar el nou punt queda de la forma

m

afa

m

nxnou

)(

Substituint l’expressió pel pendent de la recta m i reorganitzant termes podem escriure

finalment una expressió pel nou punt en funció del valor dels punts de l’interval i les

seves imatges

)()(

)()(

afbf

bafabfxnou

Una notable diferència respecte al mètode de la bisecció és que en el mètode de la falsa

posició l’amplada de l’interval on es troba el zero de la funció no tendeix a zero. De fet

el que succeeix és que un dels límits de l’interval inicial queda fix mentre que l’altre va

tendint al zero de la funció.

Per tant, en aquest cas aturem el procés iteratiu quan | f(xnou) | < , essent com hem dit

anteriorment un valor suficientment petit.

Aquest mètode sol presentar una convergència més ràpida que el de la bisecció, essent

igual de robust.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

52

3.4. Mètodes de Newton-Raphson i de la secant.

La diferència principal entres els mètodes que hem vist anteriorment i els de Newton-

Raphson o de la secant és que en aquests últims no es necessita tenir acotat el zero de la

funció dins un interval. Això suposa a priori un cert avantatge; tanmateix el preu que es

paga és que aquest tipus d’algorismes no són necessàriament convergents (no son

robusts). Tot i això, quan els mètodes convergeixen, ho fa més ràpidament que els

basats en l’acotament.

Algorisme de Newton-Raphson

La idea darrera el mètode de Newton-Raphson és molt senzilla. Es comença amb un

punt que es trobi raonablement a prop del zero de la funció, xi, i es construeix la recta

tangent a la funció en aquell punt. Llavors es determina el zero de la recta, xi+1, es pren

aquest punt com a nou punt de partida (que idealment serà una bona aproximació al zero

de la funció vertadera) i es va iterant.

xixi+1xi+2

f(xi+2) 0

f(x)

xixi+1xi+2

f(xi+2) 0

f(x)

Per tant, partim d’un punt, xi i de la seva imatge, f(xi). L’equació de la recta tangent a la

funció f en el punt xi és

y = m x + n = f’(xi) x + n

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

53

on m ve donat per la derivada de la funció en aquest punt, f’(xi) .

El punt de tall de la recta amb l’eix de les x és

xi+1 = -n/ f’(xi)

Per trobar n fem servir el fet que la recta passa pel punt {xi, f(xi)}.

Si aquesta recta passa pels punts {a, f(a)} i {b, f(b)} es complirà que

f(xi) = f’(xi) xi + n n =f(xi) - f’(xi) xi

i substituint en l’expressió anterior tenim finalment

)('

)(1

i

i

iixf

xfxx

Algunes característiques importants del mètode són:

a) En general, la convergència del mètode de Newton és quadràtica, el que implica

essencialment que el nombre de xifres significatives es dobla en cada pas.

b) Si el punt inicial no es troba a prop del zero de la funció el mètode pot divergir.

Per això, a la pràctica, és molt important restringir el nombre màxim

d’iteracions que ha de fer el programa.

c) Cal conèixer la derivada de la funció f (i per tant que aquesta sigui derivable).

Quan no es disposa de la derivada per la raó que sigui, aquesta es pot aproximar

per diferències finites , donant lloc al mètode de la secant.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

54

Algorisme de la secant

Una alternativa a l’ús de la derivada de la funció és la d’aproximar la recta tangent a la

corba per la recta secant entre el punt inicial x1 i un altre punt x2.

x1x2

f(x1)

f(x2)

x1 - x2

f(x1) – f(x2)

m

21

21 )()(

xx

xfxfm

x1x2

f(x1)

f(x2)

x1 - x2

f(x1) – f(x2)

m

21

21 )()(

xx

xfxfm

Com es pot comprovar al gràfic anterior, aquesta alternativa només implica que el

pendent de la recta amb què s’aproxima la funció ve donat per l’expressió

21

21 )()(

xx

xfxfm

Per tant, anàlogament al mètode de Newton, la posició del punt de tall de la recta amb

l’eix de les x seria

)()(

)()(

)()(

))((

21

2112

21

21113

xfxf

xfxxfx

xfxf

xxxfxx

Com es pot veure, l’expressió anterior és exactament la mateixa que la del mètode de la

falsa posició. La diferència en aquest cas és que

a) els punts inicials són dos punts propers qualsevol i no és necessari que les seves

imatges tinguin signe diferent; és a dir, no cal que definim un interval on hi ha el

zero de la funció.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

55

b) per determinar la següent aproximació al zero de la funció sempre es fan servir

els dos darrers punts utilitzats. Per tant, en general podem escriure

)()(

)()(

1

11

1

ii

iiii

ixfxf

xfxxfxx

on per trobar el punt de la iteració i+1 fem servir els punts xi i xi-1.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

56

4.- Resolució de sistemes d'equacions lineals.

4.1. Algorisme de resolució de sistemes d’equacions lineals pel

mètode de Gauss-Jordan

Partim d’un sistema de N equacions lineals amb N incògnites (x1,x2,...,xN).

NNNNNN

NN

NN

bxa...xaxa

...

bxa...xaxa

bxa...xaxa

2211

22222121

11212111

(1)

on els elements aij i bi corresponen als coeficients i termes independents de les

equacions. Podem escriure l’expressió (1) en forma matricial de manera que

bAx (2)

on

NNNNNN

N

N

x

...

x

x

x

b

...

b

b

b

a...aa

............

a...aa

a...aa

A2

1

2

1

21

22221

11211

(3)

L’algorisme de Gauss-Jordan es basa en substituir equacions (files de la matriu A) per

combinacions lineals d’equacions del propis sistema (entre files de la matriu A) de tal

manera que aconseguim transformar la matriu A en una matriu diagonal.

Anem a veure com funciona. L’objectiu és, prenent una de les equacions com a

referència (eqref) , substituir les altres equacions (eqk) per una combinació lineal del

tipus

refkk eqeqeq (4)

entre l’equació de referència i la que es vol canviar, de tal manera que aconseguim

eliminar de eqk la dependència amb la variable de referència. Per això cal triar

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

57

escaientment el factor .

En forma matricial, el que implica és que si hem escollit la primera fila de A com a

referència, substituirem les altres files per combinacions lineals tals que facin que

l’element Ak1 s’anul·li. És a dir, en aquesta cas volem aconseguir que en la primera

columna de la matriu A tots el elements siguin zero excepte el primer (el de la fila de

referència). Es pot comprovar fàcilment que si substituïm la segona de les equacions per

la combinació

1

11

2122 eq

a

aeqeq'

(5)

la nova eq2 tindrà la forma

'bx'a...x'ax NN 1121210 (6)

Si ho fem per totes les equacions (excepte la de referència) tindrem un sistema

d’equacions equivalent al original

'bx'A (7)

on tant la matriu dels coeficients com la dels termes independents hauran canviat

'b

...

'b

'b

'b

'a...'a

............

'a...'a

'a...'aa

'A

NNNN

N

N

2

1

2

222

11211

0

0

(8)

Si prenem com a fila de referència la segona i repetim el procés, el sistema quedaria de

la forma

''b

...

''b

''b

'b

''a...

............

''a...'a

''a...a

''A

NNN

N

N

2

1

222

111

00

0

0

(9)

Per tant, si repetim el procés consecutivament per cada fila de la matriu A aconseguirem

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

58

tenir el sistema original amb la forma

final

N

final

final

final

final

NN

final

final

b

...

b

b

b

a...

............

...a

...a

A 2

1

22

11

00

00

00

(10)

Ara, cada equació ara en depèn només d’una variable i per tant la solució del sistema

ara és trivial

final

NN

final

NNfinal

final

final

final

a

bx,...,

a

bx,

a

bx

22

22

11

11

(11)

L’algorisme serà el següent:

do Per cada fila de referència i

do Per totes les altres files k (ki)

i

ii

kikk

ij

ii

kikjkj

ba

ab'b

jaa

aa'a

end do

end do

ia

bx

final

ii

final

ii

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

59

Altres consideracions

Cal anar en compte que els elements de la diagonal de la matriu A (akk) han de ser

diferents de zero, sinó el factor tendiria a infinit. Si al començament es detectés

aquest problema (a11 = 0), aleshores la primera fila de referència hauria de ser una

altra on (akk 0). Donat que la matriu A es va modificant conforme anem avançant,

cada cop que cal escollir una fila de referència s’haurà de comprovar que l’element

de la diagonal no s’anul·la. Si no en poguéssim trobar cap que complís la condició,

voldria dir que el sistema no te solució (veure pivotatge).

Fixeu-vos que per calcular el factor es fan servir els elements de la matriu abans

de ser transformada .O sigui que com que tenim

ij

ii

kikjkj a

a

aa'a

conforme anem recalculant els nous elements de la fila k (per cada columna j) ,

eventualment sobreescriurem el valor aki . Això voldria dir que faríem servir, per

una mateixa fila, dos factors diferents (ii

ki

a

a i

ii

ki

a

'a) !!. Per evitar-ho cal calcular el

valor de per cada fila abans de realitzar les substitucions.

Una manera de fer més senzill l’algorisme es definir la matriu ampliada

NNNNN

N

N

b

...

b

b

|

|

|

|

a...aa

............

a...aa

a...aa

2

1

21

22221

11211

a on la columna de termes independent s’ha afegit a la matriu de coeficients.

D’aquesta manera la matriu A ara te dimensions Nx(N+1) i podem fer )N(ii ab 1

Això vol dir que podríem recalcular els elements de la matrius de coeficients i el

vector de termes independents fent

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

60

11 N,ja

a

aa'a ij

ii

kikjkj

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

61

4.2. La tècnica del pivotatge en l’algorisme de Gauss-Jordan

L’algorisme d’eliminació Gaussiana tal i com l’hem vist és força inestable i comporta

una sèrie de problemes. Entre ells, el més evident és quan ens trobem que un element de

la diagonal de la matriu de coeficients (inicial o segons l’anem transformant) és zero.

L’estratègia de pivotatge combinada amb l’escalat ens pot ajudar a dissenyar un

algorisme més estable.

Recordem que, l’algorisme de Gauss-Jordan resol un sistema d’equacions lineals del

tipus,

bAx (1)

o més d’un simultàniament (equival doncs a una inversió matricial)

1 AXIAX (1)

mitjançant l’aplicació d’operacions bàsiques que consisteixen en substituir una fila de A

per una combinació lineal entre ella mateixa i qualsevol altra. És pot veure que el fet de

realitzar aquest tipus d’operació no afecta al resultat sempre i quan fem la mateixa

operació al vector/matriu de termes independents, és a dir a la dreta de l’eq (1) o

(2).

Tanmateix, n’hi a d’altres operacions elementals que podem realitzar i que no ens afecta

a la solució de les eq (1) o (2). Aquestes són l’intercanvi de files o columnes.

Intercanviar dues files de A i les corresponents de b o I no afecta a la solució dels

sistema ja que només implicaria canviar l’ordre en que s’escriuen les N equacions.

Si s’intercanvien dues columnes llavors cal anar amb cura perquè el resultat final

quedarà alterat excepte si realitzem els mateixos canvis a les fileres del vector (x) o

matriu (X) de solucions.

La tècnica de pivotatge implica realitzar aquestes dues operacions per tal de seleccionar

el millor l’element de la diagonal que utilitzarem per dur a terme el procés d’eliminació

de Gauss-Jordan. L’aplicació de l’intercanvi de fileres rep el nom de pivotatge parcial

(partial pivoting) , mentre que si s’aplica, a més, l’intercanvi de columnes estarem fent

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

62

pivotatge total (full pivoting).

Amb el pivotatge parcial aconseguirem fàcilment a) evitar divisions per zero i b)

determinar si el sistema és incompatible o la matriu és singular (no té inversa).

El que farem és escollir la fila de referència sempre com aquella disponible amb un

valor més gran (en valor absolut) a la columna on volem generar els zeros. Així, si

volem fer zeros en la primera columna, agafarem com a columna de referència aquella

que tingui el primer element més gran en valor absolut. Tot seguit intercanviarem

aquesta fila per la primera de la nostre matriu ampliada i procedim al el procés

d’eliminació. El pas següent és el de generar zeros en la segona columna de la matriu.

Per això escollirem com a fila de referència la que tingui el valor més gran a la segona

columna excepte la primera. Això és així perquè si tornem a prendre una fila anterior

com a referència perdríem els zeros que havíem generat prèviament.

Per tant, sempre hem de buscar la nostra fila de referència per general zeros a la

columna i entre les i, i+1 ,..., n files disponibles.

L’avantatge d’aquest procediment es que, si s’arriba a un punt on no hi ha cap fila

disponible amb un nombre diferent de zero a la columna on es volen generar els zeros,

podem dir que el sistema no és compatible (o bé que la matriu no té inversa).

Si en un sistema d’equacions multipliquem una de les equacions de un factor de 106, la

solució no es veurà afectada. Això faria que, amb molta probabilitat, aquesta equació

seria la primera referència pel procés d’eliminació. Llavors, molt sovint es combina la

tècnica del pivotatge amb la d’escalat, amb la qual s’escalen les equacions originals

de tal manera que els coeficients de les equacions siguin comparables entre si.

Una manera de fer això és dividir els coeficients de cada equació per l’element màxim.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

63

Exemple

Trobar el polinomi interpolador de 3er

que passa pels punts (-1,0), (3,2), (0,-4), (-3,2)

Cal plantejar un sistema d'equacions del tipus

yi = a xi3 + b xi

2 +c xi +d i

en aquest cas:

0 = a (-1)3

+ b (-1)2 +c(-1) +d

2 = a 33

+ b 32 +c 3 +d

-4 = a 03

+ b 02 +c 0 +d

2 = a (-3)3

+ b (-3)2 +c(-3) +d

Llavors hem de resoldre el sistema d’equacions següent

0 = -a + b -c +d

2 = 27a + 9b +3c +d

-4 = d

2 = -27a + 9b -3c +d

I en forma matricial

-1 1 –1 1 0

27 9 3 1 2

0 0 0 1 -4

-27 9 -3 1 2

Si apliquem Gauss-Jordan sense pivotatge tindrem:

Eliminant columna 1

-1.00000 1.00000 -1.00000 1.00000 0.00000

0.00000 36.00000 -24.00000 28.00000 2.00000

0.00000 0.00000 0.00000 1.00000 -4.00000

0.00000 -18.00000 24.00000 -26.00000 2.00000

Eliminant columna 2

-1.00000 0.00000 -0.33333 0.22222 -0.05556

0.00000 36.00000 -24.00000 28.00000 2.00000

0.00000 0.00000 0.00000 1.00000 -4.00000

0.00000 0.00000 12.00000 -12.00000 3.00000

La tercera columna no es pot eliminar degut a la presència d’un zero a la diagonal i l’algorisme

falla.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

64

Si apliquem un algorisme més robust amb pivotatge parcial (intercanviant fileres) ho

arreglem i el vector de solucions final és:

0.4166667 0.6666667 -3.7500000 -4.0000000

per tant, el polinomi interpolador es

f(x) = 0.4166667 x3 + 0.6666667 x

2 -3.7500000 x -4.0000000

En aquest cas el problema també es pot solucionar sense pivoting. Només cal introduir

les 4 equacions en ordre diferent. Quin?. Tot i això, ens podem trobar sovint casos on

independentment de l’ordre inicial de les equacions necessitem pivoting per arribar a la

solució.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

65

4.3. Algorisme de resolució de sistemes d’equacions lineals pel

mètode de Gauss-Seidel

Partim d’un sistema de N equacions lineals amb N incògnites (x1,x2,...,xN).

NNNNNN

NN

NN

bxa...xaxa

...

bxa...xaxa

bxa...xaxa

2211

22222121

11212111

(1)

on els elements aij i bi corresponen als coeficients i termes independents de les

equacions. Podem escriure l’expressió (1) en forma matricial de manera que

bAx (2)

on

NNNNNN

N

N

x

...

x

x

x

b

...

b

b

b

a...aa

............

a...aa

a...aa

A2

1

2

1

21

22221

11211

(3)

L’algorisme de Gauss-Seidel és iteratiu. Bàsicament, partint d’un vector de solucions x

inicial arbitrari (generalment es pren xi = 0, i), anar recalculant el valor de cada

incògnita a partir de les equacions donades, tot fent servir els valors aproximats de la

resta d’incògnites.

Anem a veure com funciona.

Podem aïllar el valor de cada incògnita a partir de les equacions donades. Per exemple,

si aïllem la incògnita x1 de la primera equació tindrem

11

121211

a

xa...xabx NN

(4)

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

66

Sempre i quan els elements de la diagonal de la matriu de coefficients no siguin zero,

podem aïllar la incògnita k a partir de la equació k. Llavors tindrem l’expressió general

kk

ki

ikik

kk

NkNkkk

a

xab

a

xa...xabx

22

(5)

Inicialment partirem de la suposició que la solució del sistema es x1= x2=... = xN = 0.

Llavors, si recalculem el valor de la primera incògnita x1 tindrem

11

11

a

b'x

(6)

que, en general, serà diferent de zero, i per tant una millor aproximació al valor real. Ara

podríem recalcular el valor de la resta d’incògnites. Tenim dues opcions: podem fer-ho

present el conjunt de valors inicials (Mètode de Jacobi) o bé prenent en cada moment la

ultima aproximació per cada incògnita (Mètode de Gauss-Seidel). Si ho fem d’aquesta

última manera, en recalcular x2 prendrem x3 = x4 =...= xN = 0 i el valor de x1 que hem

obtingut a l’eq (6). Es demostra que aquest mètode convergeix més ràpid que el de

Jacobi.

Un cop hem recalculat el valor de totes les incògnites consecutivament, hauríem de

comparar el seu valor amb el de la iteració anterior (en la primera iteració caldria

comparar-les amb els valors inicials). Si la diferencia entre el valor de cada incògnita

recalculada i l’anterior és suficientment petit podem donar per bo el resultat. Sinó,

caldrà tornar a recalcular les incògnites amb els nous valors de que disposem i així

successivament fins que l’error sigui menor que una tolerància donada (típicament 10-8

)

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

67

Una manera típica de mesurar l’error (diferencia) entre els valors de les incògnites és

l’error quadràtic mitjà, (RMS, root-mean square) de la diferència, que es defineix com

N

xxi

vell

iiRMS

2

(7)

L’algorisme tindria aquesta forma

inicialitzar les variables: k,xk 0

do mentre mes gran que tolerància

= 0

do Per totes les files k

kk

ki

ikiknou

ka

xab

x

2k

nou

k xx

nou

kk xx

end do

N

end do

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

68

5.- Ajuste de curvas e interpolación

El ajuste de curvas es un proceso mediante el cual, dado un conjunto de N pares de

puntos {xi, yi} (siendo x la variable independente e y la dependiente), se determina una

función matemática f(x) de tal manera que la suma de los cuadrados de la diferencia

entre la imagen real y la correspondiente obtenida mediante la función ajustada en cada

punto sea mínima:

N

i

ii xfy 2))((min

Generalmente, se escoge una función genérica f(x) en función de uno o más parámetros

y se ajusta el valor de estos parametros de la manera que se minimice el error

cuadrático, . La forma más típica de esta función ajustada es la de un polinomio de

grado M; obteniendose para M = 1 un ajuste lineal (o regresión lineal),

xaaxf 10)(

para M = 2 un ajuste parabólico,

2

210)( xaxaaxf

etc..

Por otro lado podemos tener un conjunto de datos multidimensionales; es decir, un

conjunto de N puntos en un espacio k+1-dimensional del tipo { xi(1)

, xi(2)

, ..., xi(k)

,... yi,}.

La función que ajustaremos a estos puntos será una función de k variables

y = f(x(1)

, x(2)

,..., x(k)

)

El ajuste multidimensional más sencillo es considerar una dependencia lineal de la

función respecto a cada una de las variables de que depende; es decir, ajustando una

funcion del tipo

)()2(

2

)1(

10

)()2()1( ...),...,,( k

k

k xaxaxaaxxxf

de tal manera que se minimice el error cuadrático respecto al conjunto de parámetros

{a0, a1,..,ak}. Es lo que se conoce como ajuste o regresión multilineal.

En esta sección veremos que el ajuste lineal, el de un polinomio de grado M y el ajuste

multilineal se pueden expresar dentro de un mismo formalismo de manera que las

respectivas soluciones al problema se pueden determinar mediante algoritmos

prácticamente análogos.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

69

5.1. Regresión lineal

Supongamos que tenemos un conjunto de N puntos en el plano {xi, yi}. El objetivo es

determinar la ecuación de la recta tal que minimiza el error cuadrático

N

i

ii

N

i

calc

ii xaayyy 2

10

2 )(min)(min

respecto a los parámetros a0 (ordenada al origen) y a1 (pendiente).

Matemáticamente:

0222)(2 1010

0

N

i

i

N

i

i

N

i

ii xaNayxaaya

0222)(2 2

1010

1

N

i

i

N

i

i

N

i

ii

N

i

iii xaxayxxxaaya

Simplificando las ecuaciones anteriores vemos que se debe cumplir que

N

i

i

N

i

i yxaNa 10

N

i

ii

N

i

i

N

i

i yxxaxa 2

10

o bien, dividiendo ambas ecuaciones por el numero total de puntos e introduciendo

valores medios

xyxaxa

yxaa

2

10

10

En forma matricial, podemos escribir

xy

y

a

a

xx

x

1

0

2

1

por lo que determinar los parámetros de la recta se resume a resolver el sistema de

ecuaciones lineales de dos ecuaciones y dos incógnitas anterior.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

70

Algoritmo general matricial

Consideremos ahora el mismo problema desde otra perspectiva. Vamos a suponer que

los N puntos pueden pasar exactamente por la recta que buscamos. En este caso,

plantearíamos el siguiente sistema N de ecuaciones con 2 incógnitas

NN yxaa

yxaa

yxaa

10

2210

1110

...

o bien, en forma matricial

NN y

y

y

a

a

x

x

x

...

1

......

1

1

2

1

1

02

1

yxA

Nx

x

x

A

1

......

1

1

2

1

1

0

a

ax

Ny

y

y

y...

2

1

Como ya hemos visto, una manera directa de resolver los sistemas de ecuaciones

expresados en forma matricial es la de multiplicar por la izquierda a ambos lados de la

igualdad por la inversa de la matriz de coeficientes. sin embargo, en este caso, al tener

mas ecuaciones que incógnitas, la matriz de coeficientes, A, no es una matriz cuadrada

(tendrá dimensión N × 2) por lo que no esta definida su inversa. Una posible estrategia a

seguir es multiplicar la ecuación matricial anterior por la transpuesta de la matriz de

coeficientes (el producto de una matriz por su transpuesta es siempre una matriz

cuadrada y simétrica) de manera que tendremos

yAxAA TT AAS T yAz T

El sistema de N ecuaciones y dos incógnitas inicial lo hemos condensado en otro

sistema de dos ecuaciones y dos incógnitas dado por

zxS

Ahora bien, la matriz S es una matriz cuadrada de dimensión 2×2 y simétrica por lo que

es invertible así que podemos escribir

yASxSS T 11

y por tanto, el vector que buscamos nos quedaría de la forma

yASx T 1

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

71

Ahora bien, representa esta estrategia una solución diferente al problema de la que

hemos deducido anteriormente mediante minimización del error cuadrático?

Veremos a continuación que no es el caso.

A partir de la estructura de la matriz A, el producto de su transpuesta por ella misma

resulta en

N

i

i

N

i

i

N

i

i

N

N

T

xx

xN

x

x

x

xxxAA

1

2

1

12

1

21

1

......

1

1

...

1...11

Del mismo modo, el producto de AT por el vector de términos independientes queda

N

i

ii

N

i

i

N

N

T

yx

y

y

y

y

xxxyAz

1

12

1

21 ......

1...11

por lo que la ecuación matricial 2×2 anterior la podemos escribir mas explicitamente

como

N

i

ii

N

i

i

N

i

i

N

i

i

N

i

i

yx

y

a

a

xx

xN

1

1

1

0

1

2

1

1 .

Dividiendo cada ecuación por N y utilizando la notación típica para el valor medio

llegamos a

xy

y

a

a

xx

x

1

0

2

1

que es exactamente el mismo sistema de ecuaciones al que habíamos llegado

anteriormente imponiendo la condición de mínimo error cuadrático.

Así pues, podemos plantear el siguiente algoritmo para el ajuste lineal

a) Lectura de los N pares de valores {xi, yi} y construcción de las matriz A y vector y.

b) Construcción de la transpuesta de la matriz A: AT

c) Construcción de la matriz S mediante el producto matricial ATA

d) Construcción del vector z mediante el producto matriz por vector ATy

e) Inversión de matriz S: S-1

f) Producto matriz por vector S-1

z para obtener el vector de soluciones final.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

72

A priori puede parecer un algoritmo demasiado complicado para un problema tan

simple como la regresión lineal, para el que existen fórmulas directas de

implementación sencilla. Sin embargo, vamos a ver que podemos extender este

algoritmo de manera trivial a otro tipo de ajustes.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

73

5.2. Ajuste polinómico por mínimos cuadrados.

De manera análoga al caso lineal, el objetivo es determinar la ecuación del polinomio de

grado M que minimiza el error cuadrático

N

i

M

iMiii

N

i

calc

ii xaxaxaayyy 22

210

2 )...(min)(min

respecto a los parámetros M +1 parámetros a0 , a1 ,... aM .

Por ejemplo, para un ajuste parabólico (M = 2), la condición de mínimo del error

cuadrático lleva a las ecuaciones siguientes:

02222)(2 2

210

2

210

0

N

i

i

N

i

i

N

i

i

N

i

iii xaxaNayxaxaaya

02222)(2 3

2

2

10

2

210

1

N

i

i

N

i

i

N

i

i

N

i

ii

N

i

iiii xaxaxayxxxaxaaya

02222)(2 4

2

3

1

2

0

222

210

2

N

i

i

N

i

i

N

i

i

N

i

ii

N

i

iiii xaxaxayxxxaxaaya

Procediendo de manera análoga al caso lineal llegamos a que la determinación de los

parámetros del polinomio pasa por la resolución de un sistema de ecuaciones de la

forma:

yx

xy

y

a

a

a

xxx

xxx

xx

2

2

1

0

432

32

21

Para el caso general de un polinomio de grado M ya podemos intuir que la solución

vendrá dada por un sistema de ecuaciones lineales de dimensión (M+1) ×(M+1) de la

forma

yx

xy

y

a

a

a

xxx

xxx

xx

M

MMMM

M

M

......

...

............

...

...1

1

0

21

12

Una manera de implementar el ajuste polinomial general es la de escribir un

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

74

subprograma (función) general de la forma

N

i

q

i

p

i

qp yxN

yxyxqpNf1

1),,,,(

para determinar todos los promedios de potencias de x y productos de éstas por y que

aparecen en la matriz de coeficientes y de términos independientes.

3),,0,3,(

),,1,1,(

),,0,1,(

xyxNf

xyyxNf

xyxNf

Sin embargo, es mucho mas sencillo aplicar el algoritmo general matricial descrito

anteriormente para el caso lineal. Ahora, para el ajuste de un polinomio de grado M

plantearíamos un sistema N de ecuaciones con M+1 incógnitas (incluyendo el término

independiente)

N

M

NMNN

M

M

M

M

yxaxaxaa

yxaxaxaa

yxaxaxaa

...

...

...

...

2

210

22

2

22210

11

2

12110

o bien, en forma matricial

NMM

N

M

N

M

NNy

y

y

a

a

a

x

x

x

xx

xx

xx

.........

...1

.........1

...1

...1

2

1

1

01

2

2

22

2

11

yxA

Así pues, una vez construida la matriz A de dimensión N × M + 1 y el vector de

coeficientes y a partir de los N pares de puntos {xi, yi}, simplemente aplicamos los

pasos b) a f) descritos anteriormente.

Un algoritmo general de ajuste de una función polinómica debería solicitar únicamente:

a) el numero de total de pares de puntos de que disponemos, N, y

b) el grado del polinomio que se pretende ajustar, M

A partir de aquí, deberemos definir en nuestro programa la matriz de coeficientes A de

dimensión N × M + 1 y el vector de coeficientes y de dimensión N. Los diferentes pasos

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

75

del algoritmo requieren el uso de la matriz transpuesta (de dimensión M + 1 × N), la

matriz resultante del producto de la transpuesta de A por ella misma y su inversa (de

dimensión M+1 × M+1 ambas) y el vector transformado por la transpuesta de A (de

dimensión M + 1), así como el vector de soluciones, de dimensión M + 1.

5.3. Regresión multilineal

El algoritmo matricial anterior se puede adaptar de manera sencilla para el caso de la

regresión multilineal.

En este caso disponemos de un conjunto de datos multidimensionales; es decir, un

conjunto de N puntos en un espacio k+1-dimensional del tipo { xi(1)

, xi(2)

, ..., xi(k)

,... yi,}.

La función que ajustaremos a estos puntos será del tipo

)()2(

2

)1(

10

)()2()1( ...),...,,( k

k

k xaxaxaaxxxf

Si planteamos el sistema de ecuaciones N ecuaciones con k incógnitas para la solución

exacta tendremos

N

k

NkNN

k

k

k

k

yxaxaxaa

yxaxaxaa

yxaxaxaa

)()2(

2

)1(

10

2

)(

2

)2(

22

)1(

210

1

)(

1

)2(

12

)1(

110

...

...

...

...

o bien, en forma matricial

Nkk

N

k

N

k

NNy

y

y

a

a

a

x

x

x

xx

xx

xx

.........

...1

.........1

...1

...1

2

1

1

0

)(

)(

)(

1

)2()1(

)2(

2

)1(

2

)2(

1

)1(

1

yxA

donde las columnas de la matriz de coeficientes A corresponden simplemente a los N

valores de entrada de cada dimensión o categoría (incluyendo una columna extra de “1”

relativa al término independiente).

En este punto podemos aplicar el algoritmo matricial general exactamente de la misma

manera que lo haríamos para ajustar un polinomio de grado k a un conjunto de N pares

de puntos.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

76

5.3. Coeficiente de determinación

El coeficiente de determinación, R2, definido entre 0 y 1, nos da una idea de la bondad

del ajuste, de manera que para valores cercanos a 1 el ajuste es perfecto mientras que

para valores cercanos a cero indica inexistencia de relación entre x e y con el modelo de

ajuste propuesto.

El coeficiente R2 viene dado por la relación entre la varianza de los datos explicada con

el modelo y la varianza de los datos experimentales. En concreto

N

i

i

N

i

calc

i

yy

yy

R2

2

2

donde y representa el valor medio de los valores de la variable independiente e calc

iy

los valores calculados para cada punto usando el modelo ajustado a los datos.

La implementación computacional de este índice es muy sencilla una vez ajustado el

modelo tras resolver el sistema de ecuaciones que plantea el algoritmo matricial general.

En el caso de la regresión lineal, el coeficiente de determinación tiene la misma

expresión que el coeficiente de regresión r2, que indica también cómo de

correlacionadas estadísticamente están las variables aleatorias x e y . Es importante ver

que ambos coeficientes tiene significados e interpretaciones diferentes y que, salvo en el

caso de la regresión lineal, no coinciden.

Así, se puede comprobar que para el caso de la regresión lineal este índice coincide con

el coeficiente de regresión, definido a partir de la relación entre la covarianza de las

variables aleatorias x e y y el producto de la raíz cuadrada de las varianzas individuales

(desviación típica) de ambas variables, con el fin de obtener un parámetro adimensional

yx

XYCov

yyxx

yxxyr

)(2222

Como se puede ver, el valor de este coeficiente es independiente del modelo ajustado,

ya que únicamente indica la relación estadística entre el conjuntos de datos.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

77

6.- Integració numèrica de funcions

Si tenim una funció f(x) d’una variable x, és defineix la integral de la funció en el rang

x[a,b] com

b

adx)x(fA (1)

Gràficament, aquest valor correspon a l’àrea definida enter els valors x = a, x = b, la

funció f i l’eix de les x.

Els mètodes d’integració numèrica que veurem es basen en discretitzar la integral de

manera que fem la següent aproximació;

n

i

ii

b

ax)x(fdx)x(f (2)

és a dir que en determinem el valor de la integral simplement el valor de l’integrant

(funció) avaluada a una sèrie de punts xi d’amplada xi.

L’objectiu és el de determinar l’àrea sota la corba de manera el més acurada possible

però minimitzant el nombre d’avaluacions de la funció (integrand), i per tant el nombre

de punts.

Si suposem que els punts estan equiespaiats en el domini d’integració llavors podem

escriure l’eq (2) com

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

78

n

i

n

i

n

i

iii )x(fn

ab)x(fhh)x(fA (3)

on n representa el nombre d’intervals en que dividim l’interval [a,b].

Tot seguit presentarem una colla de mètodes basats principalment l’equació anterior

6.1 Mètode dels rectangles

Com hem vist, si definim n intervals enter els límits d’integració, tindrem que la

distància entre dos punts consecutius, h, és

n

abh

(4)

L’anomenat mètode dels rectangles es basa simplement en determinar l’àrea dels

rectangles d’alçada f(xi) i de la mateixa amplada, h, que es podem definir sota la corba.

Així, com es pot veure en el gràfic inferior

f(a)

b

h

a+h a+2h a+(n-1)h

f(a+h)

a

f(a+(n-1)h)

podem aproximar l’àrea sota la corba com la suma dels rectangles

1

0

1n

i

n )iha(fh)h)n(a(hf...)ha(hf)a(hfA (5)

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

79

Tanmateix, també podríem haver triat un altre conjunt de rectangles

a b

h

a+h a+2h a+(n-1)h

f(a+h)

f(a+2h)

f(b)

i l’àrea en aquest cas vindria donada per

n

i

n )iha(fh)b(hf...)ha(hf)ha(hf'A1

2 (6)

En principi, conforme el nombre d’intervals, n, augmenta, les àrees determinades amb

les dues aproximacions tendeixen a un mateix nombre. Formalment, en el límit quan

n aquests valors coincideixen amb el valor exacte de la integral. Tot i això, donat

que les maquines tenen una precisió i capacitat donada, mai podrem aspirar a determinar

de manera estrictament exacte el valor de la integral.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

80

6.2 Mètode dels trapezis

Acabem de veure que podem definir dos grups de rectangles per aproximar la integral.

De fet, una possibilitat òbvia per evitar aquesta arbitrarietat podria ser prendre com a

aproximació a la integral el valor mitjà.

Analitzem, però, què implica geomètricament. Si prenem un sol interval entre [a,b] i

fem la mitjana entre les dues àrees

el que estem fent és trobar l’àrea del rectangle d’alçada menor i afegir-li la meitat de la

diferència entre les àrees dels dos rectangles

)'AA())a(f)b(f)(ab(

))a(f)b(f)(ab()a(f)ab(A

trianglegletanrec

2

1

2

2

(7)

Per tant, el que fem en el fons és determinar l’àrea d’un trapezi format a partir de les

imatges de la funció en els dos punts de l’interval. Generalitzant a n intervals tenim la

típica fórmula d’integració pel mètode dels trapezis

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

81

1

1

22

22

122

1

n

i

nn

trap

n

)iha(f)b(f)a(fh

)b(f...)ha(f)ha(fh

)h)n(a(f...)ha(f)a(fh

)'AA(A

(8)

Fixeu-vos que per trobar l’àrea en necessitem avaluar la funció en n+1 punts.

Arribats a aquest punt ens hem de preocupar ara per la pressió dels resultats que podem

obtenir. En principi (veure més endavant), conforme augmentem el nombre d’intervals

hauríem de ser capaços de trobar el valor de la integral amb més precisió. Una manera

obvia de determinar la pressió amb la que estem treballant és la de comparar el resultat

obtingut amb un nombre determinat d’intervals amb el que obtenim augmentant-ne el

nombre d’intervals. Tanmateix, tenint en compte que un dels objectius per qüestions

computacionals és el de calcular la imatge de la funció en el mínim nombre de punts,

hem de trobar una manera intel·ligent d’augmentar el nombre d’intervals.

La idea consisteix simplement en doblar el nombre de punts però de tal manera que

podem aprofitar els n+1 punts anteriors. Això ho farem subdividint en dos els intervals

existents.

Tot seguit veurem les avantatges d’aquesta tècnica. Primer de tot, anomenarem k a

l’ordre del càlcul, que es relaciona amb el nombre d’intervals, n, de la següent manera

,..,,kn k 2102 (9)

Definim Tk com l’aproximació de trapezis d’ordre k, que correspon un càlcul realitzat

amb 2k intervals

1

1

22

n

i

kk

k )iha(f)b(f)a(fh

T (10)

Òbviament, la mida del interval (hk, distància entre punts) depèn de l’ordre. El què és

més important, però, és la relació entre la mida de dos intervals d’ordres consecutius

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

82

11 2

1

22

1

2

kkkk habab

h (11)

És a dir que si augmentem l’ordre del càlcul en una unitat estarem dividint per dos la

mida de l’interval.

Amb la nomenclatura anterior i prenent l’eq (8) anem a veure les expressions per als

primers ordres. Per un interval (k = 0)

)b(f)a(fh

T 2

00 (12)

Per dos (k =1):

)ha(f)b(f)a(fh

T 11

1 22

(13)

Per quatre (k = 2):

)ha(f)ha(f)ha(f)b(f)a(fh

T 2222

2 322222

(14)

Fixem-nos, però , que podem escriure l’expressió (13) com

)ha(fhT)ha(fh))b(f)a(f(h

)ha(f)b(f)a(fh

T

110110

11

1

2

1

22

1

22

(15)

Similarment, per l’expressió (14)

))ha(f)ha(f(hT

))ha(f)ha(f(h))ha(f)b(f)a(f(h

)ha(f)ha(f)ha(f)b(f)a(fh

T

ha

2221

22221

2222

2

32

1

32222

1

322222

1

(16)

De fet, es pot veure que en un cas general tenim la relació següent

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

83

senari)iha(fhTTn

i

kkkk

1

1

12

1 (17)

L’avantatge d’aquest mètode es que un cop calculada la integral per un determinat ordre

k, l’aproximació corresponent al següent ordre (k+1) només necessita avaluar la funció

als punts centrals de cada interval. Això és així perquè doblem el nombre d’intervals i

per tant si incrementem el nombre d’intervals d’una altra manera (per exemple passar de

50 a 70) hauríem de recalcular la funció en tots (o gran part) dels punts.

Això ens permet dissenyar un algorisme força intel·ligent per determinar la integral amb

una precisió determinada. Bàsicament en calculem el valor per un ordre determinat i el

comparem amb el trobat amb un ordre una unitat inferior. Si la diferència entre els dos

valors és suficientment petita per poder considerar-lo convergit, acabarem. En cas

contrari en determinarem la integral amb un ordre més a partir de la formula (17) i així

successivament. L’algorisme podria ser, per exemple

Definir interval d’integració, a,b

Definir ordre màxim de càlcul, kmax

Definir tolerància, toler

)b(f)a(fh

T 2

00

k = 1

fer mentre k menor que kmax i error més gran que toler

n = 2k

h = (b-a)/n

senari)iha(fhTTn

i

nou

1

1

02

1

error = abs(Tnou-T0)

T0 = Tnou

end do

si k no és igual a kmax llavors

Integral=Tnou

end if

A banda d’això, el fet de definir el nombre d’intervals d’aquesta manera ens permet

relacionar la tècnica dels trapezis amb una altra molt més acurada: el mètode de

Simpson.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

84

6.3 Mètode de Simpson (1/3)

El mètode dels trapezis es basa en aproximar la funció per rectes (aproximació de

primer ordre) dins de cada interval. Per tal d’augmentar la precisió de la integració, el

següent pas natural seria el d’ajustar paràboles rectes (aproximació de primer ordre), i és

això mateix en el que es basa el mètode de Simpson.

La primera diferència obvia és que si necessitem dos punts per ajustar una recta en

necessitarem tres per ajustar una paràbola. Per tant, l’aproximació més senzilla del

mètode equival a definir dos intervals equiespaiats, i per tant ajustar una paràbola que

passi pels límits d’integració i el seu punt mig.

a b

f(a)

f(b)

x’=(b+a)/2

f(x’)

y(x)=c0 + c1x + c2x2

f(x)

Poder trobar una expressió anàloga a la del mètode dels trapezis de manera senzilla si

suposem que a = -h, b = h i x’ = 0.

Vegem-ho. El que es proposa és aproximar el valor de la integral pel de la funció de

segon ordre amb coeficients c0, c1, c2.

3

20

3

0

2

003

22

3

1

2

1hchcxcxcxcdx)x(yAA

h

h

h

h

S

(18)

Aquesta paràbola passa pels punts que defineixen els intervals per tant s’ha de complir

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

85

0

2

210

2

210

0 c)(f

hchcc)h(f

hchcc)h(f

(19)

Si resolem el sistema tenim

22

2

2

0

2

02

202

0

h

)(f)h(f)h(fc

hc)(f)h(f)h(f

)(fc

(20)

I substituint en l’expressió (18) arribem a l’expressió

)(f)h(f)h(fh

hh

)(f)h(f)h(fh)(fAS

043

2

02

3

202 3

2

(21)

Finalment, si desfem el canvi anterior tenim l’expressió general final

)ha(f)b(f)a(fh

AS 43

(22)

Podem definir més intervals per millorar-ne la precisió. Tanmateix, el pas següent seria

definir quatre intervals, i no tres. De fet, es pot veure fàcilment que el nombre

d’intervals ha de ser parell, sinó ens quedaria un últim interval amb només dos punts

disponibles per ajustar una paràbola.

En el cas de quatre intervals, tindrem

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

86

a b

f(x)

h

a+h a+2h a+3h

i l’àrea total serà la suma de les àrees dels dos segments parabòlics

)ha(f)ha(f)ha(f)b(f)a(fh

)ha(f)b(f)ha(fh

)ha(f)ha(f)a(fh

AS

342243

3423

423

(23)

Ja es pot intuir que l’expressió general per n intervals serà de la forma

parelln))iha(f)iha(f)b(f)a(f(h

A

parelli

n

i

senari

n

i

S

n

2

2

1

1

243

(24)

Podem fer servir una nomenclatura anàloga a la del mètode dels trapezis per expressar

la dependència del valor de la integral respecte l’ordre de càlcul. En aquest cas tindrem

que l’ordre mínim és de k=1 ,que equival a 21 intervals

))ha(f)b(f)a(f(h

S 11

1 43

(25)

Per quatre (k=2)

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

87

))ha(f)ha(f)ha(f)b(f)a(f(h

S 2222

2 342243

(26)

Si analitzem l’expressió (25) podem veure que

32

1

3

4

3

1

3

4

6

3

4

3

011010

2

1

11

3

1

0

111

1

01

0

TTT)TT(T

)ha(fh))b(f)a(f(h

)ha(fh

))b(f)a(f(h

S

TTT

(27)

i, de fet, fent el mateix per l’expressió (26)

32

1

3

4

3

1

33

422

23

1

122121

2

1

22221

2

121

TTT)TT(T

))ha(f)ha(f(h))ha(f)b(f)a(f(h

S

TTT

(28)

Per tant, podríem dir que en un cas general

,...,,nTT

TS kkkk 321

3

1

(29)

Existeix doncs una relació clara entre el mètode de Simpson i el dels trapezis.

Si coneixem el valor de la integral calculat amb el mètode dels trapezis amb dos

ordres de càlcul consecutius, k i k-1, podem determinar fàcilment el valor pel

mètode de Simpson d’ordre k mitjançant la senzilla regla donada en l’equació

anterior.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

88

Exemple numèric

Veiem els resultats d’aplicar els mètodes que hem vist fins ara a la integral

5

1

2

1dx

e

xx

k Tk (trapezis) Sk (Simpson)

0 (1) -53.50313616

1 (2) -45.69469062 -43.09187544

2 (4) -43.77193365 -43.13101465

3 (8) -43.29300082 -43.13335655

4 (16) -43.17337456 -43.13349914

5 (32) -43.14347464 -43.13350800

6 (64) -43.13600007 -43.13350855

7 (128) -43.13413146 -43.13350859

8 (256) -43.13366431 -43.13350859

... ...

16 (65536) -43.13350859

Exacte -43.13350859

En parèntesi el nombre d’intervals

Podem veure que mentre que amb el mètode dels trapezis necessitem 216

punts per

obtenir la precisió desitjada, amb Simpson la convergència és molt millor.

Pel que fa a la implementació del mètode, només ens caldrà modificar lleugerament

l’algorisme previ proposat pel mètode dels trapezis. Ara, tot i que no seria estrictament

necessari, el que farem serà emmagatzemar en un vector els resultats de la integració

per trapezis fins a l’ordre desitjat. Un cop disposem d’aquests nombres, podrem obtenir

els resultats amb el mètode de Simpson simplement aplicant l’eq (29).

En aquest cas ens podria resultar útil que el primer índex del vector fos el zero, enlloc

de ú. Per aconseguir això haurem de declarar el vector com

DIMENSION T(0:MAXDIM)

i llavors podrem escriure

T(0)=(b-a)*(f(a)+f(b))

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

89

6.4 Mètode de Romberg

Si hem deduït les expressions per la integració de segments parabòlics (Simpson) a

partir dels valors obtinguts a partir de segments lineals (trapezis), ens podríem plantejar

si a partir dels resultats amb el mètode de Simpson podem arribar a les expressions que

obtindríem d’ajustar segments polinòmics d’ordre més alt. La resposta és sí.

Mitjançant anàlisis anàlegs als descrit anteriorment, es pot demostrar que

,...,kCC

CD

,...,kSS

SC

kkkk

kkkk

4363

3215

1

1

(30)

essent Ck i Dk les expressions per a la integral aproximada a partir de segments

polinòmics d’ordre 4 (mètode de Cotes) i 8, respectivament.

Si utilitzem ara la nomenclatura següent

m

k

kk

kk

kk

T

CotesCT

SimpsonST

trapecioTT

2

1

0

(31)

on k representa l’ordre del càlcul (relacionat amb el nombre d’intervals) i m l’ordre

d’aproximació del polinomi interpolador (primer, segon, quart, vuitè...), es pot veure

que es compleix

14

1

1

11

m

m

k

m

km

k

m

k

TTTT (32)

El mètode de Romberg no és més que la generalització natural de l’esquema anterior

fins a un ordre arbitrari, m.

Fixeu-vos que podem obtenir la integral aproximada amb un ordre de Romberg m i 2k

intervals només amb els valors obtinguts amb un 2k i 2

k-1 intervals i un ordre m-1.

La manera més fàcil d’aplicar el mètode és mitjançant la construcció de la anomenada

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

90

Taula de Romberg que es presenta a continuació

m

km

kkk

m

TT...TT

............

T...TT

...TT

TT

T

110

1

3

1

3

0

3

1

2

0

2

1

1

0

1

0

0

(33)

La primera columna correspon a les integrals calculades amb el mètode dels trapezis

amb ordre creixent. Les següents columnes corresponen als valors calculats amb els

mètodes de Simpson, Cotes, etc..., però obtinguts, en última instància, únicament a

partir dels valors de la primer columna.

Això vol dir que, amb el mateix cost computacional (no ens cal avaluar la funció en més

punts, només combinar linealment els valors ja obtinguts) d’un càlcul amb el mètode

dels trapezis d’ordre k, aplicant la Taula de Romberg podem obtenir un resultat d’ordre

de Romberg fins a k, el que equival a una integració a partir de segments polinòmics

d’ordre 2k!

Veiem l’efecte en la precisió de la integral de l’exemple anterior

k m=0 m=1 m=2 m=3

0 (1) 53.50313616

1 (2) 45.69469062 43.09187544

2 (4) 43.77193365 43.13101465 43.13362394

3 (8) 43.29300082 43.13335655 43.13351268 43.13351091

4 (16) 43.17337456 43.13349914 43.13350865 43.13350859

5 (32) 43.14347464 43.13350800 43.13350859 43.13350859

6 (64) 43.13600007 43.13350855 43.13350859 43.13350859

7 (128) 43.13413146 43.13350859 43.13350859 43.13350859

Exacte -43.13350859

Ara, amb només 16 intervals aconseguim la precisió desitjada si anem fins a ordre 3 en

la sèrie de Romberg. Òbviament, sempre hi ha la opció de deduir les equacions

corresponents a un mètode amb un polinomi interpolador d’ordre suficientment gran,

implementar el mètode i determinar el valor de la integral directament. L’esquema

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

91

anterior, no obstant, és més senzill i flexible, ja que permet assolir de manera econòmica

i sistemàtica la precisió desitjada, que pot variar segons les nostres necessitats

computacionals.

Pel que fa a l’algorisme, no serà gaire diferent al del mètode dels trapezis. En aquest

cas, l’opció més senzilla és la d’emmagatzemar la taula de Romberg conforme l’anem

generant. Aquest procés s’haurà de dur a terme per columnes. és a dir, primer caldrà

determinar, fins a un ordre k les aproximacions corresponents al mètode dels trapezis i,

a partir d’elles determinar les corresponents aproximacions per Simpson. Tot seguit, els

valors per Cotes a partir dels de Simpson i així successivament fins a l’ordre de

Romberg màxim, m (m k).

Definir interval d’integració, a,b

Definir ordre màxim de càlcul, kmax

Definir ordre màxim de Romberg, mmax

)b(f)a(fab

),(T

2

00

do k=1 fins kmax

n = 2k

h = (b-a)/n

senari)iha(fh),k(T),k(Tn

i

1

1

012

10

end do

do m =1,mmax

14

1111

m

)m,k(T)m,k(T)m,k(T)m,k(T

end do

escriure T

end

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

92

6.5 Anàlisi d’errors i pèrdua de precisió

L’anàlisi d’errors següent ens ajudarà a veure la importància del mètode de Romberg a

la vegada que les seves limitacions

Anem a considerar de nou el mètode dels trapezis. Com hem discutit abans, el què fem

es substituir la integral de la funció en cada interval per la d’un polinomi de primer

ordre (recta)

Per tant podem dir que dins l’interval

)x(Oxcc)x(f 2

10 (33)

on el terme d’error O(xn) vol dir que s’ignoren els termes d’ordre igual o superior a n.

Per tant, també vol dir que l’aproximació és exacta per funcions polinomques

d’ordre inferior a n, en aquest cas una recta

Tanmateix, el que acabem fent és integrar aquesta funció aproximada de manera que

l’error integrat és de l’ordre

)x(O)x(Ob

a

32 (34)

L’estimació de l’error en un cas general, amb n intervals la podem escriure com

2

3

3 1

nO)

n

ab(O

n

ab)h(Oh

ii

(35)

És a dir, en cada interval l’error és de l’ordre de k , o bé 1/n3 ,però com que s’acumula

per n intervals l’error final serà de l’ordre de 1/n2.

A més, el fet clau de l’aproximació dels trapezis és que es pot demostrar que l’error de

l’aproximació, que comença com hem vist en l’ordre 1/n2 és, de fet, únicament

parell expressat en potències de 1/n.

Això vol dir que si d’alguna manera aconseguim eliminar el terme principal d’error, el

nostre mètode passaria a tenir un error de l’ordre de 1/n4 , el que implicaria que la

integració seria exacta per polinomis d’ordre 3.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

93

Com ho podem aconseguir? Suposem que avaluem la integral amb n intervals. L’error

seria 21 nn . Si ara doblem el nombre de punts tindrem

2224

1

2

1

n)n(n (36)

Llavors, si fem la combinació

422

1

3

1

3

4

nnn (36)

es pot veure com el terme principal d’error es cancel·la, quedant el següent, que, com

hem dit abans no contindria ordre senar en 1/n.

A més, és fàcil veure que aquesta combinació correspon, de fet, a la descrita en l’eq (29)

pel mètode de Simpson. És a dir, que en passar de trapezis a Simpson en disminuïm

l’error en dos ordres de magnitud, el que implica no només una major precisió sinó una

convergència millor.

Una altra conseqüència immediata és el fet que, tot i basar-se en segments parabòlics, el

mètode de Simpson és exacte per polinomis d’ordre 3.

Ja pots intuir ara la base del mètode de Romberg. El que s’aconsegueix és eliminar els

termes d’error fins a ordre 1/n2(m+1)

, on m es l’ordre de la sèrie de Romberg. Per tant, el

mètode de Cotes (m=2) té un error de l’ordre 1/n6, la següent columna de la taula 1/n

8 i

així successivament.

Fixa’t en les conseqüències d’aquest fet. Per exemple, la integració exacta d’un

polinomi d’ordre 10 és podria aconseguir aplicant Romberg fins a ordre m=4. I

per poder aplicar-ho només en necessitem saber els aproximacions a la integral pel

mètode dels trapezis fent servir 20, 2

1, 2

2, 2

3 i 2

4 intervals! Curiós, no?

Hi ha, però, un altre factor que no hem tingut en compte fins ara i es que cal tenir

presents els errors d’arrodoniment. La computadora, com ja sabem té una precisió

limitada. En FORTRAN aquesta depèn també del tipus de dada. Les dades tipus REAL

tenen 8 xifres significatives, mentre que les REAL*8 (double precision) en tenen el

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

94

doble, 16. Això vol dir que la nostra precisió en la integració mai podrà superar (o

igualar) la del tipus de dades que fem servir degut als errors d’arrodoniment.

Per il·lustrar aquest fet, s’ha recalculat la Taula de Romberg per la integral anterior

utilitzant variables de tipus REAL, enlloc de DOUBLE PRECISION.

k m=0 m=1 m=2 m=3

0 (1) -53.50313568

1 (2) -45.69469070 -43.09187698

2 (4) -43.77193451 -43.13101578 -43.13362503

3 (8) -43.29299927 -43.13335419 -43.13351059 -43.13351059

4 (16) -43.17337418 -43.13349915 -43.13351059 -43.13351059

5 (32) -43.14347458 -43.13350677 -43.13350677 -43.13350677

6 (64) -43.13600159 -43.13351059 -43.13351059 -43.13351059

7 (128) -43.13413239 -43.13351059 -43.13351059 -43.13351059

... ... ... ... ...

19 (~5·105) -43.13350296 -43.13349915 -43.13349915 -43.13349915

Exacte -43.13350859

La propagació d’errors és clara. Tot i que els resultats semblen convergits a un nombre,

si anem a ordres més grans els resultats oscil·len. En aquest cas, no aconseguir arribar a

la mateixa precisió que abans ni augmentant el nombre d’intervals ni incrementant

l’ordre de Romberg. La raó principal és que, com més gran és el nombre d’intervals,

més petit és la mida d’aquest i per tant major serà l’error relatiu degut a l’arrodoniment.

El que podem aprendre d’això és que incrementant el nombre d’intervals no sempre ens

assegura una major precisió i convergència

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

95

6.6 Integració numèrica de funcions: Integrals impròpies

Fins ara hem assumit que l’integrand era una funció que es comportava bé, amb uns

límits d’integració ben definits. En realitat, ens podem trobar amb certs casos on els

mètodes descrits amb anterioritat fallaran.

En distingirem de varis tipus i en veurem quines tècniques podem fer servir per

solucionar-ho.

Límits d’integració no avaluables

En aquest cas, el problema és que no podem determinar la imatge de la funció al/als

límits d’integració. I no podem determinar aquest valor a) perquè no és finit, o b) perquè

no és determinable numèricament.

Exemples típics poden ser les integrals següent7:

11

0 dx)xln( (1)

85193710

.dxx

)xsin(

(2)

En el primer cas la imatge del límit inferior tendeix a -, mentre que en el segon tenim

una indeterminació del tipus 0/0. En aquest cas, aplicant l’Hôpital es pot veure que el

seu valor és 1, però mai podrem determinar-ho numèricament. En altres paraules, si el

programa arriba a un càlcul del tipus 0/0 l’algorisme serà inestable (dependent de les

opcions de compilació i del compilador mateix potser que fins i tot s’aturi).

Pel que fa a la resta de l’interval d’integració, no presenta cap problema.

Per tant, l’únic problema és que no podem avaluar la funció en un dels extrems de

l’interval d’integració. La solució podria ser intentar trobar una fórmula que no en

depengués dels valors de la funció als intervals, i això és el que farem.

7 Obviament, només cal preocuparse per integrals que tenen un valor finit. Si una integral divergeix no cal

intentar trobar el valor numèricament!

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

96

Partirem de l’expressió per al mètode dels trapezis d’ordre k

1

1

22

kn

i

kk

k )iha(f)b(f)a(fh

T (3)

on la mida del interval (hk, distància entre punts) depèn de l’ordre de manera que

12

1 kk hh (4)

Amb les expressions 3 i 4 podem escriure la corresponent a l’ordre k-1.

1

1

1

1

11

1

1

1

22

22

k

k

n

i

kk

n

i

kk

k

)hia(f)b(f)a(fh

)iha(f)b(f)a(fh

T

(5)

Es pot veure fàcilment que si prenem la combinació 2Tk – Tk-1

senari)iha(fh

)hia(f)iha(fhTT

k

kk

n

i

kk

n

i

k

n

i

kkkk

1

1

1

1

1

1

1

2

22221

(6)

arribem a una expressió on no apareixen els valors de la funció en els límits

d’integració. A més, si suposem que Tk , conforme augmenta k, convergeix al valor de la

integral, això vol dir que

kkkkk TTTTT 11 2 (7)

i així, les eq (3) i (6) tendeixen al mateix valor.

Les expressions que no depenen del valor de la funció als límits d’integració (6)

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

97

s’anomenen fórmules obertes i, de fet, es poden deduir de manera similar expressions

anàlogues pel mètode del Simpson, etc...

Límits d’integració no finits

Aquest és el cas d’integrals impròpies del tipus

a

adx)x(fdx)x(f (8)

Es presenten dos tipus de problemes. El primer és que no podem representar

numèricament l’infinit. Per tant, hauríem d’aproximar el límit d’integració per un

nombre suficientment gran. Aquesta aproximació serà, en general, força bona donat que

una condició per a que el valor d’una integral d’aquest tipus convergeixi és que la

funció tendeixi a zero als límits no finits. Per tant, tenim que la contribució al valor de la

integral per a valors de x suficientment grans (o petits) serà menyspreable. Fixeu-vos

que en el cas anterior, l’efecte és ben be el contrari. És al voltant de la discontinuïtat (on

la funció es fa no finita) on hi ha una major contribució al valor de la integral. És per

això que es sol recórrer a formules obertes.

L’altre problema és que, tot i aproximar l’infinit numèricament (1012

, etc) , l’interval

d’integració és extremadament gran, pel que caldria avaluar la funció en un gran

nombre de punts a fi que la distància enter intervals sigui suficientment petita.

El que es pot fer en aquests casos és un mapping de la funció i intervals d’integració

originals en uns altres, amb la obvia restricció de que l’àrea sota la corba sigui

exactament la mateixa.

Farem el següent canvi de variable

dxx

dt

xt

2

1

1

(9)

Si ho substituïm a l’expressió de la integral tindrem, per exemple

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

98

a/

b/

b/

a/

b

adt

tf

tdt

tf

tdx)x(f

1

1 2

1

1 2

1111 (10)

Amb això, hem passat d’avaluar la integral dins un interval infinit x[a,] a un interval

t[0,1/a]. Òbviament, la funció a integrar ha canviat. Aquesta tècnica del “mapeig” no

és útil només en cas de límits d’integració no finits, sinó que pot servir en molts casos

per escurçar l’interval d’integració a fi d’obtenir una millor precisió amb menys punts.

Fixeu-vos, però, que solucionem la presència de l’interval infinit, però introduïm una

discontinuïtat, ja que no podem avaluar la imatge de la nova funció per t = 0. Això

també implica que no podem fer aquest canvi de variable per escurçar un interval

d’integració quan els respectius límits d’integració canvien de signe (passaríem pel zero

i ens trobaríem amb la discontinuïtat a l’interior de l’interval!).

Podem evitar aquest problema utilitzant formules obertes o bé prenent com a límit

d’integració original un nombre suficientment gran (o petit).

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

99

Exemple 1:

11

0 dx)xln(

Mètode dels trapezis amb formula tancada i oberta

k Tk * 2Tk-Tk-1

1 13.81551075 ---

2 7.25432873 0.836988217

3 4.04565859 0.915951454

4 2.48080492 0.957328752

5 1.71906686 0.978501874

6 1.34878433 0.989210263

7 1.16899729 0.99459496

8 1.08179617 0.997294937

9 1.03954554 0.998646833

10 1.01909614 0.999323257

11 1.00920975 0.999661589

12 1.00443554 0.999830785

13 1.00213385 0.99991539

14 1.00102496 0.999957694

15 1.00049150 0.999978847

* Límit inferior d’integració 10

-12

Veiem que per ordres d’integració petits la formula oberta dóna clarament millors

resultats mentre que conforme augmentem el nombre d’intervals tots dos mètodes

tendeixen al mateix valor ( tot i que la fórmula oberta és superior en tots els casos)

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

100

Exemple 2:

dx

x21

1

El valor exacte d’aquesta integral impròpia és . Per tal de determinar-ne el valor

numèricament tenim el problema de dos límits d’integració no finits. No poden aplicar

directament la transformació (10) per raons òbvies. Tanmateix podríem plantejar-nos

trobar el valor de la integral a partir de

0 2

0

22 1

1

1

1

1

1dx

xdx

xdx

x

El problema ara és que el mapeig de l’eq (10) tornaria a donar un límit d’integració

infinit, ja que el un dels límits original és el 0. Per tant, podríem descomposar novament

la integral en

1 2

1

1 2

1

22 1

1

1

1

1

1

1

1dx

xdx

xdx

xdx

x

i aplicar la tècnica del mapeig i posterior formula oberta a la primera i tercera de les

integrals, mentre que la segona no comporta cap problema addicional.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

101

6.7 Integració numèrica de funcions de una o més variables:

Mètode de Monte Carlo

Suposem ara que volem avaluar la integral d’una funció de vàries variables dins un

volum determinat .

nn dx..dxdx)x,..,x,x(f 2121 (1)

Aplicant les idees de la secció anterior, podríem aproximar la integral per sumatoris,

discretitzant el domini d’integració

n

n

n

ii

np

i

np

i

np

i

iiiinn x...xx)x,..,x,x(f...dx..dx)x,..,x(f 2

1

1

2

2

132111 (1)

En una funció d’una variable, aproximem la integral per la suma de les àrees de np

figures planes com trapezis (on np es el nombre d’intervals). Si tenim una funció de

dues variables, la integral vindria donada per la suma dels np1np2 volums de figures

tridimensionals, etc...

El que és important és veure que si ens calgués avaluar la funció en cap a 100 punts per

una funció monodimensional, per una bidimensional en caldrien 1002 per obtenir una

precissió similar, 1003 per una 3D, etc... Per tant, per funcions de vàries variables no és

precisament el mètode més eficient.

Un dels mètodes més eficients en aquests casos el l’anomenat mètode de Monte Carlo.

Vegem en què es basa mitjançant un exemple senzill. Posteriorment entrarem en més

detall. Suposem que volem avaluar la integral següent,

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

102

que correspon a l’àrea sota la corba. Tot seguit definim un àrea que englobi l’àrea que

busquem. Per exemple, el rectangle definit pels segment b-a i f(b).

Òbviament, l’àrea d’aquest rectangle (Arect) serà una cota superior de l’àrea que

busquem. A més, si definim g com la proporció entre les àrees sota la funció (integral) i

l’àrea total del rectangle, podem escriure la integral com

rect

b

agAdx)x(fI (3)

Suposem ara que definim N punts aleatoris distribuïts uniformement dins l’àrea Arect.

La filosofia del mètode Monte Carlo és la de determinar aquesta proporció entre les

àrees, g, estimant-la com la proporció entre els punts que queden per sota de la

corba respecte els totals.

Només per curiositat, en el cas particular del gràfic anterior, la proporció és de 29/37

(compta’ls!) per tant la integral seria

)ab)(b(fAI rect 37

29

37

29 (4)

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

103

Mètodes Monte Carlo

En general, el teorema en què és basen els mètodes Monte Carlo és el que ens diu que la

integral d’una funció en un volum multidimensional V, dins el qual escollim N punts

(x1,..., xN) de manera aleatòria i uniforme, es pot expressar com

V N

ffVfVfdV

22

(5)

on

N

i

i

N

i

i )x(fN

f)x(fN

f 22 11 (6)

representen les mitjanes aritmètiques de la funció i el quadrat de la mateixa, i el segon

terme de l’eq (5) representa una estimació de l’error (desviació standard).

A partir d’aquest teorema podem plantejar-nos dues maneres de determinar una integral

multidimensional. Escollirem un o altra bàsicament en funció de la regió d’integració,

és a dir segons aquesta es pugui “samplejar” fàcilment o no.

Vegem-ho amb un exemple:

Exemple 1

Volem determinar la integral següent

1

1

1

1

22

dxdye )yx(

En aquest cas, la regió d’integració és simple; ve definida pels intervals x[-1,1] i y[-

1,1], és a dir, per un quadrat d’àrea 22 = 4. Segons les eq (5)-(6), si avaluem la funció

en N punts aleatoris uniformement distribuïts dins la regió d’integració (quadrat) i en

determinem el valor mitjà, f , el valor de la integral serà

ffVdxdye )yx( 41

1

1

1

22

De vegades, però, la regió d’integració no es tan simple, i pot resultar difícil obtenir una

distribució uniforme de punts per tal de determinar la mitjana de la funció a integrar.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

104

El que fem és tractar de trobar un volum multidimensional (regió d’integració) conegut,

W, que contingui la regió d’integració original, V. Posteriorment, generem els N

nombres aleatoris dins aquest volum W , tot determinant per cada punt si pertany a la

regió d’integració, V. En cas negatiu, el punt no es pren per determinar el valor mig de

la funció dins l’interval, f (de fet és com considerar que la funció es fa zero en els

punts de fora de l’interval d’integració....). Finalment, el producte del valor mitjà de la

funció, f , pel volum “samplejat” ,W, ens donarà el valor de la integral.

Exemple 2

Per exemple, imaginem ara que volem determinar l’integral de la funció

)yx(e22

en un interval circular de radi R al voltant del centre de coordenades8. Com a volum W

podríem prendre simplement un quadrat de costat 2R centrat a l’eix de coordenades

x

y

R

Cada punt aleatori dins W, pi , vindrà donat per les seves coordenades (xi, yi). Aquest

punt pertanyerà també a la regió d’integració, V, si xi2+ yi

2 R

2. Llavors, per cada punt

generat caldrà comprovar si es compleix la inequació anterior per tal de tenir-ho en

compte. És clar que els punts “no vàlids” tenen el seu efecte: l’eq (5) ens diu que l’error

estimat serà major (en aquest cas el volum serà W, essent W > V).

Existeix encara una manera més intuïtiva d’aplicar la tècnica de Monte Carlo. Aquest

8 En aquest cas un canvi de variable a coordenades polars seria molt més eficient, però es tracta només

d’un exemple.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

105

pot ser el cas, per exemple, de determinar el volum de figures 3D complexes.

La manera de fer en aquest cas seria una generalització de l’esquema presentat a l’inici

del tema. En aquest cas es tractaria de trobar un volum multidimensional conegut, W,

que contingui el volum9 (integral) que busquem, V. Es generen els N nombres aleatoris

dins aquest volum es determinen quants d’aquest punts es troben dins el volum V. La

relació entre aquests punts “vàlids” i els totals ens donarà la relació entre els volums V i

W, i per tant V, que és el que busquem

Exemple 3

Per exemple, podem determinar el volum d’una esfera de radi R (com pots imaginar hi

ha mill maneres més eficients de fer-ho).

En aquest cas, el volum W podria ser el d’un cub de costat 2R, és a dir 8R3. Cada punt

aleatori dins W, pi , vindrà donat per les seves coordenades, en aquest cas (xi, yi, zi). En

aquest cas, el punt pertanyerà també al volum que busquem, V, si xi2+ yi

2 + zi

2 R

2.

Finalment V vindrà donat simplement pel producte de W per la fracció de punts que

han caigut dins el volum que buscàvem.

De fet, la funció 2D en coordenades cartesianes que defineix la superfície de l’esfera i

que integrada ens dóna el volum és simplement f(x,y)=R2 - xi

2- yi

2. Pots aplicar Monte

Carlo de manera anàloga a l’exemple 2 per tal de determinar-ne el volum per

integració de f(x,y). Sol: En surt la meitat, no? Per què?

9 Un volum N dimensional sempre es pot entendre com la integral d’una funció N-1 dimensional. Tot i

això, de vegades no és senzill trobar l’equació matemàtica que descriu la forma de l’objecte i que

integrada ens donaria el seu volum.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

106

Generació de nombres aleatoris en FORTRAN

El FORTRAN 77 standard no té cap funció o subrutina intrinseca que generi nombres

aleatoris. Existeixen algunes funcions no standard com, ran, rand o srand que son

proveïdes de fet pel propi compilador i que funcionen en entorns de hardware específic

(no PC’s... supercomputadors tipus IBM, Sillicon Graphics, CRAY, etc..).

El FORTRAN90 si que inclou subrutines intrínseques standard per generar nombres

aleatoris i, donat que de fet fem servir un compilador de FORTRAN95, les utilitzarem

com si fossin part del FORTRAN 77.

Per generar un nombre aleatori i emmagatzemar-lo en una variable de tipus REAL, x,

farem simplement

call random_number(x)

Cal tenir en compte que la sentència anterior ens genera un nombre aleatori només

dins l’interval [0,1]. Això no és cap restricció, si volem un nombre aleatori dins

l’interval [a,b] , a < b, només cal realitzar la transformació següent

x = x*(b - a) + a

Amb el factor multiplicatiu expandim/contraiem el rang inicial (una unitat) a la mida

desitjada, mentre que afegint a aconseguim ajustar el valor mínim possible que es pot

generar al menor valor de l’interval, en aquest cas a.

Per generar nombres aleatoris en un volum multidimensional caldrà determinar

cadascuna de les components del punt de manera aleatòria, mitjançant successives

crides a la subrutina.

Per exemple, per un punt dins un volum 3D donat per les components (x,y,z) caldrà fer

call random_number(x)

call random_number(y)

call random_number(z)

Val a dir també que cal incialitzar el generador de nombres aleatoris per tal de no

obtenir sempre la mateixa seqüència. Això es pot fer cridant a una altra subrutina

intrínseca un sol cop abans de començar a generar els nombres aleatoris . La

subrutina en qüestió es diu random_seed i pot ser cridada sense arguments. En concret

call random_seed( )

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

107

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

108

7. -Minimització de funcions i derivació

http://en.wikipedia.org/wiki/Finite_Differences

7.1. Derivació numèrica per diferències finites

Utilitzarem el programa MAPLE pervisualitzar l’efecte del step en l’obtenció de

derivades numèriques d’una funció per mitja de diferències finites.

Comencem

> restart:

Definim la funció

> f:=2.0*exp(-2*x)-sin(Pi*x);

:= f 2.0 e( )2 x

( )sin x

> plot(f,x=-0.1..4);

Especifiquel el punt on volem trobar el valor de les derivades

> val:=0.5;

:= val .5

> f1:=diff(f,x);

:= f1 4.0 e( )2 x

( )cos x

Primera derivada analitica (exacta)

> d1:=evalf(subs(x=val,f1));

:= d1 -1.471517764

> f2:=diff(f,x,x);

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

109

:= f2 8.0 e( )2 x

( )sin x 2

Segona derivada analitica (exacta)

> d2:=evalf(subs(x=val,f2));

:= d2 12.81263993

>

Ara ho farem numèric. Per la primera derivada utilitzem l’expressió de diferències

finites. Ens quedara en funció del paràmetre step, que controla quant ens movem per

determinar la derivada

> f1num:=(subs(x=val+step,f)-subs(x=val-step,f))/(2*step);

:= f1num1

2

2.0 e( ) 1.0 2 step

( )sin ( ).5 step 2.0 e( ) 1.0 2 step

( )sin ( ).5 step

step

Per un step de 0.001 ens dona força be

> evalf(subs(step=0.001,f1num));

-1.4715187

També podem intentar avaluar el límit per step zero. Dona gairebe igual al valor exacte

> limit(f1num,step=0);

-1.471517765

Per ultim podem dibuixar la dependencia del valor de la derivada amb el valor del

paràmetre. Els erros son força petits, pero podem veure com més petit és el valor del

step millor s’ajusta al valor exacte. Tot i axò, per valors molt petits es perdria precisió

> plot({f1num,d1},step=0..0.005);

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

110

Per a la segona derivada també poden fer diferències finites

> > f2num:=(subs(x=val+step,f)+subs(x=val-step,f)-

2*subs(x=val,f))/(step**2);

f2num 2.0 e( ) 1.0 2 step

( )sin ( ).5 step 2.0 e( ) 1.0 2 step

( )sin ( ).5 step ( :=

4.0 e( )-1.0

2 ( )sin .5 step 2)

Per un step de 0.001 ens dona una mica pitjor que per la primera derivada

> evalf(subs(step=0.001,f2num));

12.8124

El limit divergeix en aquest cas

> limit(f2num,step=0);

( )Float

Per ultim podem dibuixar la dependencia del valor de la derivada amb el valor del

paràmetre. Els erros son petits, pero més grans que el cas de la primera derivada

> plot({f2num,d2},step=0.001..0.01);

DE fet, la segona derivada la podem obtenir d’una altra manera també. El que farem és

ajustar a 3 punts una paràbola del tipus y = ax2+bx+c. La gràcia és que la segona

derivada de la funció ajustada és simplement 2a

Generem tres equacions (e1,e2 i e3) del tipus y = ax2+bx+c als punts x, x+step i x-step

> e1:=subs(x=val,f)=a*val^2+b*val+c;

:= e1 2.0 e( )-1.0

( )sin .5 .25 a .5 b c

> e2:=subs(x=val+step,f)=a*(val+step)^2+b*(val+step)+c;

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

111

:= e2 2.0 e( ) 1.0 2 step

( )sin ( ).5 step a ( ).5 step 2 b ( ).5 step c

> e3:=subs(x=val-step,f)=a*(val-step)^2+b*(val-step)+c;

:= e3 2.0 e( ) 1.0 2 step

( )sin ( ).5 step a ( ).5 step 2 b ( ).5 step c

> e4:=solve({e1,subs(step=0.001,e2),subs(step=0.001,e3)});

:= e4 { }, ,c 2.073083076 a 6.406259282 b -7.877778027

Ens queda un sistema de tres equacions amb tres incògnites (a, b i c). Ho resolem

> e5:=solve({e1,e2,e3},{a,b,c}):assign(e5);

El valor de la segona derivada sera 2 vegades el valor del coeficient a

> f2num2:=2*a:

Si representem el valor de la segona derivada en funció del parametre step

> plot({f2num2,d2},step=0.001..0.01);

Ara podem representar les dues aproximacions

> plot({f2num,f2num2,d2},step=0.001..0.01);

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

112

En aquest cas l’ajust del polinomi de segon grau dona lleugerament millor que

diferencies finites. Tot i això, no podem generalitzar.

7.2. Punts estacionaris.

7.3. Mètodes de gradient.

7.4. Mètode Newton-Raphson.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

113

8.- Inversió de Matrius

8.1 Algorisme general d’inversió de matrius quadrades

Partim d’una matriu quadrada, A, de dimensions NN i volem determinar la seva matriu

inversa, A-1

, és a dir la matriu amb la que es compleix

IAAAA 11 (1)

De fet, podríem plantejar el problema de trobar la matriu inversa com la resolució de N

sistemes d’equacions del tipus

N,ibAx ii 1 (2)

on

1

0

0

0

1

0

0

0

1

21...

b,...,...

b,...

b N

(3)

Si escrivim l’eq (2) de la següent manera

I

N

A

N b,...,b,bx,...,x,xA 2121

1

(4)

podem veure fàcilment que els vectors xi corresponen a les columnes de la matriu

inversa

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

114

NNNN

N

N

N

x...xx

............

x...xx

x...xx

x,...,x,xA

21

22221

11211

21

1

(4)

Podem trobar la inversa de la matriu resolent les N equacions simultàniament construint

la següent matriu auxiliar

100

0

010

001

21

22221

11211

...

.........

...

...

|

|

|

|

a...aa

............

a...aa

a...aa

B

NNNN

N

N

(5)

que construïm a partir de la matriu original, A, i la matriu identitat , I.

Ara, l’algorisme per determinar la matriu inversa és anàleg al de Gauss-Jordan per la

resolució de sistemes d’equacions que hem vist prèviament.

L’objectiu és, mitjançant la tècnica de l’eliminació Gaussiana, transformar el primer

bloc de la matriu en la matriu identitat. És a dir, el que farem és substituir files de la

matriu B per combinacions lineals de files de la pròpia matriu de tal manera que

aconseguim transformar el primer bloc de la matriu en una matriu diagonal.

Posteriorment, dividim cada fila per l’element de la diagonal del primer bloc per tal

d’aconseguir la matriu identitat. Arribats a aquest punt, al segon bloc de la matriu B hi

trobarem la matriu inversa que estàvem buscant.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

115

Per tant l’algorisme serà, pràcticament, anàleg al de Gauss-Jordan, amb la diferència

que la matriu sobre la que fem les transformacions tindrà 2N columnes

do Per cada fila de referència i

do Per totes les altres files k (ki)

N,ja

a

aa'a ij

ii

kikjkj 21

!Apliquem Gauss-Jordan

end do

end do

do Per cada fila i

N,ja

aa

ii

ij

ij 21 !Dividim cada fila per aconseguir

!matriu diagonal al primer bloc

end do

Nj'jaa 'ijij1

!Elements de la matriu inversa

Anàlogament al mètode de Gauss-Jordan, ens podem trobar amb zeros a la diagonal (del

primer bloc de la matriu B), que implicarien eventualment una divisió per zero. Aquests

elements nuls podem existir inicialment a la matriu A, o bé aparèixer a mesura que la

matriu original es va transformant. Tant en un cas com en un altre, podem evitar el

problema simplement seleccionant una altra fila de referència (veure pivotatge)

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

116

9.- Equacions seculars

9.1. Definicions

Les equacions seculars, o equacions de valors i vectors propis, son potser les equacions

matricials més importants i les seves aplicacions son il·limitades en el camp de l’àlgebra

lineal.

Suposem que tenim una matriu quadrada A de dimensió N i un vector columna v de la

mateixa dimensió. El resultat de multiplicar la matriu pel vector

wvA

(1)

serà una altre vector w, de la mateixa dimensió.

Direm que el vector v és un vector propi o eigenvector de la matriu A si es compleix

que

vvA

(2)

o bé desenvolupant el producte de matriu per vector

NivvAN

k

ikik ,1

(3)

a on és un escalar. És a dir, si el resultat de multiplicar una matriu per un vector

columna dona un múltiple d’aquest,

NNNNNNN

N

N

v

v

v

v

v

v

v

v

v

AAA

AAA

AAA

.........

...

............

...

...

2

1

2

1

2

1

21

22221

11211

(4)

el vector serà un vector propi de la matriu. Per tant, els vectors propis d’una matriu són

aquells que quan son transformats (multiplicats) per la matriu no canvien la seva

direcció.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

117

Per altra banda, l’escalar rep el nom de valor propi o eigenvalor associat al vector

propi.

Fixeu-vos que en una equació del tipus (2)-(4), les incògnites son tant el vector propi

(cada component) com el valor propi associat, el que provoca que la seva resolució, és a

dir, el procés de determinar valors i vectors propis no sigui trivial.

Els vectors propis d’una matriu A no estan únicament definits en el sentit de que si v és

un vector propi de A amb valor propi , un múltiple del vector v també serà vector propi

i tindrà associat el mateix valor propi. Si definim el vector w con un múltiple de v

NN v

v

v

v

w

w

w

w

......

2

1

2

1

(5)

i comprovem si és vector propi a partir de l’eq (2)

wvvvAvAwA

)()( (6)

veiem que en efecte es compleix la condició, on hem fet servir les propietats del

producte d’una matriu o vector per un escalar. Podem veure-ho també desenvolupant el

producte de la matriu pel vector, tal i com hem fet a l’equació (3)

Niw

vvvAvAwA

i

N

k

i

N

k

ikikkik

N

k

kik

,1

(7)

Així doncs, sempre podrem multiplicar un vector propi per un escalar i el resultat

seguirà essent un vector propi amb el mateix vector propi. No considerem però que

aquest nou vector sigui un altre vector propi diferent, és a dir, una altra solució de l’eq.

(2). A la pràctica això vol dir que podem triar la longitut (mòdul) de cada vector propi.

Normalment s’escullen de manera que la seva norma sigui la unitat, és a dir,

normalitzats.

Ara veurem algunes propietats i teoremes importants pel cas particular de les matrius

simètriques.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

118

9.2. Propietats

a) Una matriu quadrada i simètrica A de dimensió N sempre serà diagonalitzable,

és a dir, tindrà N vectors propis amb els seus valors propis corresponents. Per tant, l’eq.

(2) tindrà N solucions diferents

NivvA iii ,1

(8)

on el subíndex i ara fa referència a vectors diferents i no a la component i del vector.

Podem escriure en una sola equació matricial totes les solucions possibles de la forma

XXA (9)

a on la matriu X és una matriu quadrada de dimensió N que conté en les seves columnes

els vectors propis de A.

NNNN

N

N

N

vvv

vvv

vvv

vvvX

...

............

...

...

...

21

22221

11211

21

(10)

Per altra banda, la matriu és una matriu diagonal i conté a la diagonal principal els

corresponents valors propis associats a cada vector propi (columna de la matriu X)

N

...00

............

0...0

0...0

2

1

(11)

i en el mateix ordre. Per tant, 1 és el valor propi del vector propi v1, 2 és el valor propi

del vector propi v2, etc...

Les matrius i X no son úniques en el sentit que les seves columnes es poden reordenar

de manera arbitrària. Tot i això, si les columnes de X apareixen en un ordre determinat,

el mateix ha de ser per les de la matriu , de manera que per un determinat vector propi

que es trobi a la columna k de la matriu X, el seu corresponent valor propi ha d’ocupar

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

119

precisament la columna k de la matriu diagonal .

b) El conjunt de vectors propis diferents iv

formen una base de vectors de

dimensió N.

Per tant, els vectors propis són linealment independents entre sí.

c) Els vectors propis associats a valors propis diferents són ortogonals entre si.

Suposem que v i w son vectors propis de la matriu A amb valors propis i ,

respectivament.

wwAvvA

(12)

A partir de la primera equació anterior podem escriure

vwvwvAw TTT (13)

multiplicant a un cantó i altre de la igualtat pel vector w transposat (filera).

Fent el mateix a partir de la segona, en aquest cas multiplicant per l’esquerra pel vector

v transposat tenim

wvwAv TT (14)

Transposant ara a un canto i altre de l’equació (14)

TTTT wvwAv

(15)

i aplicant les propietats del transposat del producte i de les matrius simètriques

vwvAwvAw TTTT (16)

Comparant les equacions (13) i (16)

vwvw TT (17)

podem veure que si ≠ llavors forçosament

0vwT ,

és a dir que el producte escalar entre els dos vectors propis s’anul·la, i per tant són

ortogonals entre si.

d) Una combinació lineal entre dos o més vectors propis que tenen un mateix valor

propi associat és també vector propi i amb el mateix valor propi.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

120

Segons l’equació (17), en el cas de que = la ortogonalitat dels respectius vectors

propis no esta assegurada. De fet, quan els valors propis són degenerats (coincideixen)

els vectors propis no estan definits únicament i qualsevol combinació lineal entre ells

compleix també la condició de vector propi. Per veure-ho simplement definim un nou

vector com a combinació lineals dels altres dos

wvx

(18)

on i són escalars, i comprovem que en efecte és també vector propi de A

xwv

wvwAvAwvAxA

)(

(19)

i amb el mateix valor propi.

Així, quan hi hagi degeneració podrem combinar linealment entre sí els vectors propis

que comparteixen el mateix valor propi de tal manera que els vectors resultants siguin

ortogonals entre si.

Per tant, la conclusió final és que conjunt de vectors propis d’una matriu quadrada i

simètrica es poden triar de manera que formin una base ortogonalitzada de l’espai.

Això vol dir que el producte escalar entre diferents vectors propis s’anul·la, mentre que

el producte escalar entre un vector propi i ell mateix serà la unitat, perquè l’escollim

normalitzat. Per tant, podem escriure

ijj

T

i vv

(20)

En l’eq. (9) hem vist que els vectors propis ocupen les columnes de la matriu X. Si la

multipliquem per la esquerra per ella mateix transposada el resultat és precisament la

matriu que conté el productes escalars entre tots els vectors propis.

N

T

N

T

N

T

N

N

TTT

N

TTT

N

T

N

T

T

T

vvvvvv

vvvvvv

vvvvvv

vvv

v

v

v

XX

...

............

...

...

......

21

22212

12111

212

1

(21)

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

121

Llavors, segons l’eq. (20), el resultat del producte matricial és la matriu identitat

IXX T

1...00

............

0...10

0...01

(22)

i per tant, les matrius X que contenen els vectors propis d’una matriu simètrica són

matrius unitàries. Com veurem més endavant, aquest fet fa que el procés de

diagonalització es pugui fer servir com a pas previ per a la determinació de inverses de

matrius, determinants, funcions de matrius, etc...

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

122

9.3. Algorisme de diagonalització de matrius pel mètode de les

rotacions elementals de Jacobi.

Partim d’una matriu quadrada (NN) i simètrica A. L’objectiu és resoldre l’equació

matricial següent

XAX (1)

on X és una matriu unitària (tal que XT

= X-1

) i és una matriu diagonal.

La matriu diagonal conté a la seva diagonal principal els N valors propis de la matriu

original A, mentre que les columnes de la matriu X són els N vectors propis

corresponents.

Per tant, amb les matrius X i , multiplicant per un costat o altre a ambdós costats de

l’eq. (1) per XT obtenim les igualtats següents

TXXA (2)

o bé

AXX T (3)

Veiem ara com podem resoldre l’eq (1), és a dir, trobar la matriu diagonal és i la

matriu de transformació, X, aplicant l’anomenat mètode de les rotacions de Jaboi.

L’algorisme de Jacobi es basa en l’ús de matrius elementals de rotació, )(R pq .

Aquestes son matrius unitàries (com X) que tenen la forma següent

q

p

....

cos..sin..

..............

....

sin..cos..

..............

....

....

)(R

qp

pq

100000

0000

0

001000

0000

0

000010

000001

Si ens fixem, la matriu )(R pq és gairebé la matriu identitat, I, amb només quatre

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

123

elements de la matriu modificats, precisament els corresponents a les fileres i columnes

a què fan referència els superíndexos pq

.

Veiem amb un exemple què fan aquests tipus de matrius. Suposem que tenim un punt P

en l’espai 2D que ve donat per les coordenades P(x, y). En coordenades polars tindríem

)sin(ry

)rcos(x

a on r i representen el mòdul i angle respecte l’eix de les x, respectivament. Si

realitzen una rotació del vector en el pla de graus en el sentit de les agulles del rellotge

arribarem a un altre punt del pla que vindrà donat per altres coordenades P’(x’,y’)

x

y

(x,y)

(x’,y’ )

x

y

(x,y)

(x’,y’ )

Escrivint-lo en funció de les seves coordenades polars i fent ús de relacions

trigonomètriques conegudes i de l’expressió en coordenades polars del punt original

podem escriure

ycosθxsinθ)sinθcosαcosθr(sinαθ)sin(αry'

ysinθxcosθ)sinθsinαcosθr(cosαθ)rcos(αx'

En forma matricial tindrem

y

x

cossin-

inscos

y

x

'

'

XRX )('

Per tant, la matriu R() representa la rotació de graus en el sentit de les agulles del

rellotge.

Es pot comprovar que en un espai 3D, la mateixa rotació d’un punt repecte l’eiz z (és a

dir, en el pla xy) vindria donada per la matriu,

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

124

100

0cosθsinθ-

0sinθcosθ

per tant ja poden intuir que la matriu )(R pq és una generalització en un cas

multidimensional a on la rotació de graus es dona en el pla pq , i per tant només afecta

a les coordenades p i q del punt.

Una de les propietats de les matrius unitàries és que el producte entre dues matrius

unitàries qualsevol és també una matriu unitària. Per tant, podem representar una rotació

complexa com una sèrie de rotacions elementals, i la matrius unitària que correspon a

aquesta rotació complexa serà el producte de les respectives matrius de les rotacions

elementals de què consta.

Tenint en compte això, l’estratègia que segueix l’algorisme de Jacobi és la següent:

Amb una matriu de rotació )(pqRR escollida escaientment, transformem la matriu

inicial A de tal manera que

ARRA T' (4)

La nostra matriu A ha canviat (ara és A’). Degut a la forma particular de les matrius de

rotació (gairebé son la matriu identitat), els canvis només afectaran a les files i

columnes p i q de la matriu original A. En concret, anem a veure com canvia l’element

A(p,q). Desenvolupant el producte matricial de les tres matrius anteriors tenim

qqqqpqqp

T

pqqqpqpqpp

T

pp

k

qqkqpqkp

T

pk

lk

lqkl

T

pkpq

RARARRARAR

RARARRARA

,

'

(5)

Substituint els elements de la matriu de rotació R tenim

)cos(A)AA()sin(

sincosAsinAcosAsincosA'A

pqqqpp

qqqppqpppq

22

2

22

(6)

on hem fet servir la relació qppq AA , donat que A és simètrica.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

125

Per tant tenim una expressió per la forma final de l’element p,q de la matriu

transformada en funció de l’angle de rotació . El que farem es trobar l’angle tal

que provoca que l’element p,q de la matriu A’ esdevingui zero. És a dir, imposant

que A’pq= 0 tenim

qqpp

pq

qqpp

pq

pq

AA

A

AA

AA

2arctan

2

1

2)2tan()2cos(

2

)2sin(

(7)

Per tant, si fem la transfomació donada per l’eq (4) per aquest angle , aconseguirem

que l’element A’pq (i per simetria l’ A’qp) sigui zero.

Si la matriu A’ resultés ser diagonal, l’eq (4) seria equivalent a l’eq (3) i per tant ja

hauríem resolt el problema: la matriu de rotació R seria la matriu X i la matriu diagonal

A’ seria .

Excepte en algun cas particular (matrius 2x2), això no serà així. Tanmateix podríem dir

que la matriu A’ està, en principi, més a prop de ser diagonal ja que hem aconseguit

anular alguns dels seus elements.

L’estratègia és tornar a aplicar una altra vegada la transformació sobre la matriu

transformada A’ amb una altra matriu de rotació per tal d’aconseguir anular un altre

element, i així successivament fins que tots els elements de fora de la diagonal fossin

zero (o suficientment petits).

Així, en anar aplicant rotacions successives tindrem

k

''A

'A

TTT

k R...RARRR...R

2112

(8)

fins arribar a tenir una matriu diagonal.

Comparant l’eq.(8) amb la (3) poden veure fàcilment que la matriu de transformació X

que estem buscant

kR...RRX 21 (9)

seria el resultat del producte matricial de les successives rotacions que hem anat fent (i

en aquest ordre!).

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

126

La pregunta és: com escollim la matriu de rotació? El que farem és, en cada iteració

(transformació), determinar l’element de fora de la diagonal de la nostra matriu amb

un valor absolut més gran (per tant més diferent al nostre objectiu, el zero). La fila i

columna on es trobi aquest element determinarà el valor de p i q de la matriu de rotació,

mentre que l’eq (7) ens donarà l’angle tal que fa que l’element target s’anul·li en fer la

transformació.

Malauradament, quan es fa un transformació com la de l’eq (4), no només l’element Apq

canvia sinó que tots els elements de les files i columnes p i q també canvien. Per tant,

no podem esperar que amb un nombre determinat de transformacions aconseguim

diagonalitzar la matriu, excepte en el cas trivial d’una matriu 2x2. De tota manera, es

pot demostrar que aconseguirem el nostre objectiu si en cada iteració realitzem la

transformació de manera que anul·lem l’element més gran fora de la diagonal, i per tant

això és el que farem.

Per dur a terme la transfomació de l’eq (4) en cada iteració cal fer un producte matricial

de tres matrius. Tot i això, donada la simplicitat de les matrius de rotació, és més fàcil

determinar de quina manera canvien els elements de la matriu A desprès de la

transformació i introduir aquests canvis directament, en comptes de realitzar el producte

matricial. Amb un anàlisi anàleg al de les eq. (5) i (6) es troba que

qpiAAAA

AAAA

AAAAA

AAAAA

AA

iqipqiiq

iqippiip

pqqqppqqqq

pqqqpppppp

qppq

,cossin''

sincos''

2sinsin)('

2sinsin)('

0''

2

2

(10)

Per tant el que fem amb l’algorisme de Jacobi és recalcular els elements de la matriu A

que canvien en cada iteració (per tant, sobreescrivim la matriu original)

Finalment, hem vist que la matriu X es troba com a producte de les matrius de rotació

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

127

de cada transformació. Seria molt més eficient computacionalment el anar multiplicant

les matrius de rotació en cada iteració que no pas guardar-les totes i multiplicar-les al

final. Per tant, en cada iteració hauríem de fer el producte acumulatiu amb la nova

matriu. Però, tenint en compte l’estructura d’aquestes matrius, ens resulta encara més

eficient fer el mateix que amb la matriu A , és a dir, determinar quins elements de R1

canvien i de què manera quan es fes el producte X’ = R2 R1 i guardar-ho, per en la

següent iteració multiplicar-ho per R3 i així successivament

Es pot demostrar que si fem el producte X’ = R pq

() X, els únics elements diferents

entre les matrius X’ i X es troben a les fileres p i q i la seva relació és la següent

iXXX

XXX

iqipiq

iqipip

cossin'

sincos'

(11)

Només hem de vigilar amb la primera iteració, on la matriu X’ seria directament la

matriu R1. Tanmteix, podem fer servir l’eq. (11) en qualsevol cas si inicialitzem la

matriu X con a matriu identitat, I, ja que X = R1 I = R1.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

128

Per tant, el mètode de Jacobi es podria resumir amb l’algorisme següent

llegir matriu A

Inicialitzar matriu X a identitat

set toler

ilog=0

iter=0

do mentre (ilog=0)

trobar l’element maxim de fora de la diagonal (offdiag) i posició :fila p, columna q

if (offdiag>toler o maxim nombre d’iteracions exhaurit)

determinar l’angle de rotació

recalcular els nous elements de A (equacions 10)

Apq=Aqp=0

App, Aqq

Aip, Aiq ip,q

recalcular els elements de la matriu X (equacions 11)

Xip, Xiq

else

ilog=1

end if

iter = iter + 1

end do

escriure X i A

fi

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

129

Exemple 1:

Matriu topològica per a la molècula de ciclobutè:

0.0000 1.0000 0.0000 1.0000

1.0000 0.0000 1.0000 0.0000

0.0000 1.0000 0.0000 1.0000

1.0000 0.0000 1.0000 0.0000

Tolerància: 1.0e-6

Resultats:

Matriu després de la iteració 1:

-1.0000 0.0000 -0.7071 0.7071

0.0000 1.0000 0.7071 0.7071

-0.7071 0.7071 0.0000 1.0000

0.7071 0.7071 1.0000 0.0000

Iter 2

-1.0000 0.0000 -1.0000 0.0000

0.0000 1.0000 0.0000 1.0000

-1.0000 0.0000 -1.0000 0.0000

0.0000 1.0000 0.0000 1.0000

Iter 3

0.0000 0.0000 0.0000 0.0000

0.0000 1.0000 0.0000 1.0000

0.0000 0.0000 -2.0000 0.0000

0.0000 1.0000 0.0000 1.0000

Iter 4

0.0000 0.0000 0.0000 0.0000

0.0000 0.0000 0.0000 0.0000

0.0000 0.0000 -2.0000 0.0000

0.0000 0.0000 0.0000 2.0000

Matriu diagonal final:

0.0000 0.0000 0.0000 0.0000

0.0000 0.0000 0.0000 0.0000

0.0000 0.0000 -2.0000 0.0000

0.0000 0.0000 0.0000 2.0000

Matriu de vectors propis (X)

0.5000 0.5000 0.5000 0.5000

-0.5000 0.5000 -0.5000 0.5000

-0.5000 -0.5000 0.5000 0.5000

0.5000 -0.5000 -0.5000 0.5000

Error: (Element més gran de fora de la diagonal) 5.55E-17

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

130

Exemple 2:

Matriu topològica per a la molècula de benzè:

0.0000 1.0000 0.0000 0.0000 0.0000 1.0000

1.0000 0.0000 1.0000 0.0000 0.0000 0.0000

0.0000 1.0000 0.0000 1.0000 0.0000 0.0000

0.0000 0.0000 1.0000 0.0000 1.0000 0.0000

0.0000 0.0000 0.0000 1.0000 0.0000 1.0000

1.0000 0.0000 0.0000 0.0000 1.0000 0.0000

Tolerància: 1.0e-6

Matriu diagonal final (després de 32 iteracions):

-1.0000 0.0000 0.0000 0.0000 0.0000 0.0000

0.0000 1.0000 0.0000 0.0000 0.0000 0.0000

0.0000 0.0000 -2.0000 0.0000 0.0000 0.0000

0.0000 0.0000 0.0000 1.0000 0.0000 0.0000

0.0000 0.0000 0.0000 0.0000 -1.0000 0.0000

0.0000 0.0000 0.0000 0.0000 0.0000 2.0000

Matriu de vectors propis (X)

0.5136 0.5026 0.4082 -0.2841 0.2638 0.4082

-0.4852 0.4974 -0.4082 0.2932 0.3129 0.4082

-0.0284 -0.0053 0.4082 0.5773 -0.5767 0.4082

0.5136 -0.5026 -0.4082 0.2841 0.2638 0.4082

-0.4852 -0.4974 0.4082 -0.2932 0.3129 0.4082

-0.0284 0.0053 -0.4082 -0.5773 -0.5767 0.4082

Error: (Element més gran de fora de la diagonal) 9.7 E-7

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

131

Altres consideracions:

Cal tenir en compte que els valors propis d’una matriu són únics (tot i que poden ser

degenerats), però la matriu no és única ja que els valors propis es poden ordenar de

manera arbitrària a la diagonal principal. Per tant, hom pot arribar a una matriu diagonal

diferent a les que aquí es donen, però només pel que fa a l’ordre de les columnes. Tot i

això, si les columnes de la matriu diagonal es troben en un altre ordre, el mateix ha de

ser amb les columnes de la matriu de vectors propis.

Un altre factor a tenir en compte és que, com hem vist en la secció 1, els vectors propis

associat s a valors propis iguals (degenerats) no estan definits de manera única, de

manera que qualsevol combinació lineal entre vectors propis associats a un mateix valor

propi degenerat són també vectors propis vàlids.

Aplicat a l’exemple anterior de la matriu topològica del benzè això vol dir que podríem

substituir les columnes 2 i 4 de la matriu X per qualsevol combinació lineal entre elles

(sempre i quan els dos vectors columna finals siguin linealment independents). El

mateix succeeix per les columnes 1 i 5 de la mateixa matriu o per les columnes 1 i 2 de

la matriu X de l’exemple 1.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

132

9.4. Aplicacions de la diagonalització de matrius quadrades

simètriques

Ja hem vist que, si tenim una matriu quadrada (NN) i simètrica A, i resolem l’equació

secular següent

XAX (1)

podem escriure l’eq (1) com

TXXA (2)

on X és una matriu unitària (tal que XT

= X-1

) i és una matriu diagonal.

Ara veurem com el fet de poder expressar la nostra matriu original A en funció de les

matrius X i ens permetrà determinar-ne fàcilment la seva matriu inversa, determinant,

etc...

Determinant d’una matriu

Calcular el determinat d’una matriu de manera directa és força costos a més de

relativament difícil d’implementar. Tanmateix, tenint en compte que

)Bdet()Adet()ABdet( (3)

i si fem servir l’eq (2) i el fet que la matriu X és unitària tenim

)det()det()Idet(

)det()XXdet()det()Xdet()Xdet(

)Xdet()det()Xdet()Adet(

TT

T

(3)

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

133

Per tant, El determinat de la nostra matriu original A és igual que el de la matriu

diagonal . Però en el cas d’una matriu diagonal el determinat és trivial

i

iN...)det( 21 (5)

És a dir, el determinant és simplement el productori dels valors propis de la matriu.

En el cas que la matriu no sigui simètrica, podem determinar de manera similar el valor

absolut del seu determinant. Primer de tot, definim una nova matriu S així

AAS T (6)

Es pot demostrar fàcilment que aquesta nova matriu és simètrica. Per tant, es

diagonalitzable i llavors

ZSZ , o bé

TZZS

(7)

on Z és una matriu unitària i una matriu diagonal. Aleshores tenim que, donat que el

determinat d’una matriu i el de la seva transposta són equivalents (intercanviar files per

columnes no afecta el determinant) i aplicant l’eq. (3)

2)Adet()Adet()Adet()det()Sdet( T (8)

i per tant

)Sdet()Adet( (9)

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

134

Matriu Inversa

En aquest cas podem trobar la matriu inversa d’una matriu simètrica quadrada utilitzant

la relació (2). Tenim

TTT XXXX)XX(A 11111 (10)

on hem fet servir les propietats de la inversa del producte de matrius.

Per tant, si sabéssim la inversa de la matriu diagonal , podríem determinar igualment

la inversa de A fent el producte matricial TXX 1 . Tot i que pot semblar més

complicat, el càlcul de la matriu inversa d’una matriu diagonal és trivial. Es pot veure

fàcilment que la inversa d’una matriu diagonal és també una matriu diagonal a on els

elements de la diagonal no son més que la inversa dels elements de la diagonal de la

matriu original, és a dir ,

kk

kk

11

(11)

Així, l’expressió pels elements de la matriu inversa queda simplement

k kk

jkik

k

kj

T

kkik

k l

lj

T

klikij

XX

XXXXA 111

(12)

A partir de l’equació anterior veiem que una condició per a què una matriu sigui

invertible (no singular) és que tots el valors propis de la matriu siguin diferent de

zero.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

135

Potències d’una matriu

La diagonalització ens simplifica molt el càlcul de les potències de matrius. Per

exemple, anem a veure com determinar el quadrat de A. Aplicant l’eq. (2) tenim

T

T

I

TTT

XX

X)XX(X)XX)(XX(AAA

2

2

(13)

Per tant només cal determinar el quadrat de la matriu diagonal. Un altre cop, donada la

forma de la matriu diagonal el càlcul és immediat

22

2 0

iiiiii

k

kiikii

ijii

k

kjikij

(14)

Com es pot veure a l’expressió anterior, el quadrat d’una matriu diagonal és també

una matriu diagonal, on els elements de la diagonal són els quadrats dels elements de la

matriu original.

En el cas d’una potència qualsevol k

TkT

I

T

I

T

TTTk

XXX...)XX()XX(X

)XX)...(XX)(XX(A...AAA

(15)

on els elements de la matriu k és calculen simplement a partir dels elements de la

matriu diagonal

kiiii

k (16)

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

136

De fet, la diagonalització permet determinar no només potències de matrius sinó

qualsevol funció en general d’una matriu.

Per exemple, podem fer la exponencial d’una matriu A com

TA XXee (17)

essent la matriu e una matriu diagonal amb elements

iiee ii

(18)

Aplicacions avançades: Ortonormalització d’una base de vectors

Suposem que tenim un conjunt de N vectors linealment independents de dimensió N.

Amb aquests podem formar una matriu quadrada on les columnes de la matriu siguin

cadascun dels vectors.

)x...xx(X N21 (19)

Aquest conjunt de vectors (base) seria ortonormal si es complís que

jixx

ixx

j

T

i

i

T

i

0

1

(20)

és a dir que el producte escalar entre dos vectors diferents fos zero, i la norma de cada

vector fos la unitat. En forma matricial això equival a que es compleixi10

IXX T (21)

Suposem, però, que en un cas general, el nostre conjunt de vectors no és ortonormal.

10

Per tant podem dir que una base és ortonormal si la matriu dels vectors és unitària

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

137

Llavors tindríem

ISXX T (22)

on S rep el nom de matriu de la mètrica, i conté tots el productes escalars entre els

vectors. La pregunta és, com podem aconseguir un conjunt ortonormalitzat de vectors a

partir del conjunt que disposem? És a dir, com podem trobar un conjunt de vectors que

la seva matriu de la mètrica sigui la matriu identitat?

Anem a veure-ho. Primer definim una altra matriu transformada, Z, com

21 XSZ (23)

utilitzant la matriu21S (arrel quadrada de la matriu de la mètrica S).

Comprovem ara que la nova matriu Z conte vectors ortonormals en columnes

2121

21212121

SSS

XSXSXSXSZZ

T

TTTT

(24)

La matriu S, per construcció, és simètrica i per tant serà diagonalitzable. Podem

expressar tant S com 21S (una potència de S) com

T

T

UUS

UUSUSU

2121 (25)

i llavors substituint en (24) tenim

IUUUUUUUUUU

UUUUUUSSSZZ

TT

I

T

I

T

I

T

TTTTTT

21212121

21212121

(26)

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

138

on hem fet servir el fet que la transposada d’una matriu diagonal és ella mateixa i que

els elements del producte de matrius diagonals és el producte dels elements de la

diagonal de les respectives matrius.

Hem demostrat que la matriu Z conté vectors ortonormals, que és el que buscàvem. Així

doncs, per ortogonalitzar el nostre conjunts de vector inicial, X, només cal multiplicar la

matriu per la dreta per l’arrel quadrada de la matriu de la mètrica del conjunt de vectors

inicial

Tiótransfomac UUXXSZX 2121 (27)

i aquesta darrera la podem trobar a partir la diagonalització de la matriu de la mètrica.

Aquest procés rep el nom de ortogonalització de Löwdin i ´s’utilitza freqüentment en el

camp de la Química Quàntica.

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

139

Bibliografia

Press, Teukolsky,Vetterling, Flannerry, (1986,1992), “Numerical Recipes in

FORTRAN, the art of Scientific Computing”, Cambridge University Press

G. J. Borse (1989), “Programacion en FORTRAN77, con aplicaciones de calculo

numerico en ciencias e ingenieria”, Anaya Eds, Madrid

“Lahey FORTRAN90 Language Reference”, (1994), Lahey Computer Systems.

David M. Young, Robert T. Gregory (1972), “ A survey of Numerical

Mathematics”, Dover Publications, New York

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

140

PROGRAM GENPRIMO

LOGICAL ilog

WRITE(*,*) 'Calcul dels primers nombres primers. Quants en vol?'

READ(*,*) nprim

WRITE(*,*) 'Per definició, 1 es primer'

iprim=1

N=2

do WHILE(iprim.LE.nprim)

ilog=.true.

i=2

NN=SQRT(1.0*N)

do WHILE(ilog.AND.i.LE.NN)

j=N/i

ir=N-(i*j)

IF(ir.EQ.0) then

ilog=.false.

END if

i=i+1

end do

IF(ilog) then

WRITE(*,*) N,' es primer'

iprim=iprim+1

END if

N=N+1

end do

end

Aquest programa ens demana quants nombres primers es volen obtenir (nprim) i,

començant a partir del 2, comprova un a un si un nombre (N) és primer. En cas

afirmatiu, ho escriu per pantalla. Finalment, quant hagi trobat el nombre de números

primers desitjat, acaba.

Si li demanem que ens trobi els 100 primers nombres, el programa ho escriurà tan ràpid

per pantalla que no podrem veure els primers. A més, un cop tanquem la finestra on

treballem, perdrem aquesta llista.

La solució és escriure el llistat de nombres primers en un fitxer nou que el programa

generarà. Per fer això només cal fer el següent:

Mètodes Matemàtics Aplicats a la Química, Pedro Salvador

141

PROGRAM GENPRIMO

logical ilog

WRITE(*,*) 'Calcul dels primers nombres primers. Quants en vol?'

READ(*,*) nprim

OPEN(1,file=”genprimo.out”)

WRITE(1,*) 'Per definicio, 1 es primer'

iprim=1

N = 2

do WHILE(iprim.LE.nprim)

ilog = .true.

i=2

NN = DSQRT(real(N))

do WHILE(ilog.AND.i.LE.NN)

j = N/i

ir = N-(i*j)

IF(ir.EQ.0) then

ilog=.false.

END if

i=i+1

end do

IF(ilog) then

WRITE(1,*) N,' es primer'

iprim=iprim+1

END if

N=N+1

end do

end

De tal manera que, ara, si demanem al programa els 10 primers nombres, no escriurà res

en pantalla sinó que generarà un fitxer de text anomenat genprimo.out al directori de

treball que contindrà el següent

Per definicio, 1 es primer

2 es primer

3 es primer

5 es primer

7 es primer

11 es primer

13 es primer

17 es primer

19 es primer

23 es primer

29 es primer