Professional Documents
Culture Documents
Pràctica 1
Introducció a OCTAVE (Primera part)
1 Introducció
Octave és un software lliure que permet la programació d’alt nivell per al còmput numèric. Té
una sintaxi similar al paquet comercial MATLAB, amb el qual és pràcticament compatible.
Es va dissenyar cap al 1988 per a ser utilitzat en un curs de disseny de reactors quı́mics
per alumnes d’Enginyeria Quı́mica de la Universitat de Texas i de la Universitat de Wisconsin-
Madison.
Actualment disposa d’una gran quantitat d’eines que permeten resoldre numèricament pro-
blemes d’àlgebra lineal i de càlcul en una i diverses variables. Permet realitzar gran quantitat
de gràfics en dues i tres dimensions basat en l’aplicació Gnuplot.
Exemple
>> help save % recordar que se surt del paginador amb q
Es poden posar lı́nies de comentaris començant amb el caràcter ’#’ o ’%’.
1
1.2 Nombres i operacions aritmètiques
Per defecte, Octave treballa amb els nombres en format de punt flotant en doble precissió. Els
nombres reals els podem representar en format decimal o en format exponencial. Per exemple,
el nombre 1131/8 el podem representar
- en format decimal com 141.375
- en format exponencial com 1.41375e + 2 (representa 1.41375 · 102 ).
(Nota: La lletra e en les constants numèriques en format exponencial indica l’exponent de 10).
Per representar un nombre complex amb part real 2.5 i part imaginària 3 escriurem -2+3i
o -2+3j.
Octave té algunes constants predefinides per exemple, pi, e per als nombres π i exp(1).
Els càlculs es fan amb 16 dı́gits (aproximadament) però en principi només es mostren 5 dı́gits
significatius. Per veure mes dı́gits cal usar format. Les opcions són les següents:
Exemple
Per al nombre 1/17 s’obtenen els següents resultats segons el format
format short retorna 0.058824
format long e retorna 5.88235294117647e-02
1.3 Variables
Una variable és un nom simbòlic que identifica una part de la memòria on podem guardar dades.
El contingut el podem recuperar i modificar les vegades que convingui. El nom d’una variable
ha d’estar format per lletres i/o nombres, començant sempre amb una lletra. Distingeix entre
majúscules i minúscules. Convé no posar noms que corresponguin a variables predefinides, com
ara, pi, e, ans, ni comandes o funcions propies d’Octave (per exemple, quit, exp,...).
2
Algunes comandes adicionals
Exemple
>> a= 23e-5, b= aˆ2 % s’assignen valors a les variables a i b
a = 2.3000e-04 b = 5.2900e-08
>> clear a b % es netejen les variables a i b
Exercici 1.1
Netejeu totes les variables i repetiu l’exemple anterior però substituint la última lı́nea per
>> clear a,b
Quina resposta dona l’Octave ? Podeu donar una explicació ?
Exercici 1.2
Definiu quatre variables amb els valors següents: a = 2.1, b = −0.067, c = 10−4 , d = 1/7 i
calculeu el valor de
b
c+d − a + b
1 b
a + c
abs(x) % |x|
√
sqrt(x) % x
exp(x) % e
x
sin(x) % sin(x)
cos(x) % cos(x)
tan(x) % tan(x)
atan(x) % arctan(x)
Exercici 1.3
Comproveu que
4 arctan(1) π p
3
=− , 3 ln e2 + 2e − ln(e + 2) = 1.
2 + log2 (1/32) 3
3
També podem definir les nostres pròpies funcions. La manera més simple de fer-ho és mitjançant
l’operador @ de la forma següent
nom =@(arguments de la funció) expressió
Per avaluar-la en un punt x = a només cal fer
nom(a)
Exemple
A continuació definim la funció f (x) = x2 sin(x) que anomenem fprova i l’avaluem en els punts x = 1 i
x = π/4
>> fprova=@(x) xˆ2*sin(x)
>> fprova(1), fprova(pi/4)
Exercici 1.4
1. Definiu la funció
f (x) = cos(3x) − 4 cos3 x + 3 tan x,
√
avalueu-la
√ en els punts 0, π/6, π/3, 1.32 i comproveu que f (π/6) = − 3/2 i f (π/3) =
3( 3 − 1/2).
2. Calculeu g(0), g(π/6), g(1.32) on
g(x) = cos(3x) − 4 cos3 x + 3 sin x.
3. Definiu la funció
f (x, y) = 3 sin(xy) + 4 cos(x)
i avalueu-la en els punts (0, 0), (π/2, 5), (−2, 8)
1.5 Polinomis
Els polinomis es representen amb un vector fila que té com elements els coeficients del polinomi
en ordre descendent. Aixı́ el polinomi p(x) = c1 xn−1 +c2 xn−2 +. . .+cn−1 x+cn es representa
amb el vector
4
Exemple
>> p = [1,3,-5]; % definició del polinomi p = x2 + 3x − 5
>> polyout(p), roots(p)
1 ∗ s2 + 3 ∗ s1 − 5 % representació del polinomi en la variable s
ans = -4.1926 1.1926 % arrels del polinomi
>> q=[1,1,1]; polyval(q,[5,0])
ans = 31 1 % càlcul de q(5) i q(0) per q(x) = x2 + x + 1
Exercici 1.5
Considereu el polinomi
A la finestra d’edició podem obrir el fitxer ’maria’. Aquı́ hi trobarem totes les instruccions i respostes entre
’diary on’ i ’diary off’ (no la instrucció c=27), és a dir
diary on
titol = ’sessio de prova’;
a=1/4-3/5
a = -0.35000
diary off
El fitxer ’maria’ no és executable (a la pràctica 2 veurem un altre tipus de fitxers que sı́ són executables).
Guardar variables
També podem salvar variables en un fitxer de manera que puguin ser recuperades posterior-
ment. Per salvar variables podem usar la comanda save i per recuperar-les la comanda load.
La forma general és
save nom.m v1 v2 ... vn % guarda les variables v1 v2 ... vn en el fitxer
nom.m. Si no s’especifiquen variables guarda
totes les de la sessió.
load nom.m % recupera les variables anteriors
5
2 Matrius
2.1 Format bàsic
El tipus bàsic de dades amb que treballa Octave és la matriu rectangular de n files i m columnes.
Un vector és una matriu amb una única fila (vector fila) o una única columna (vector columna).
Per construir un vector fila escrivim les seves components entre claudàtors ([ ]), separades per
comes o espais en blanc.
Exemple
>> v = [-2,0,1,3] % crea el vector fila v = (−2, 0, 1, 3)
Per introduir un vector columna escrivim les seves components entre claudàtors, separats per
”punt i coma”.
Exemple −2
0
>> v = [-2;0;1;3] % crea el vector columna v =
1
Per definir una matriu podem introduir les seves files com a vectors fila i separem una fila d’altre
amb ”punt i coma”.
Exemple −2
13 1
0 −5 2
>> A = [-2,13,1;0,-5,2;10,0,-1;3,7,21] % crea la matriu A =
10 0 −1
Per obtenir l’element que està a la fila 2, columna 3 posem 3 7 21
>> A(2,3)
Per obtenir una fila (o una columna) completa d’una matriu podem usar els dos punts :
Exemple
>> v=A(2,:) % retorna la segona fila de la matriu A en el vector v
Podem generar un vector fila de nombres equiespaiats (d’una successió aritmètica) amb el for-
mat
3 5 7 9 11
A= 0 1 4 10 8
−2 −3 −4 −5 30
Exercici 2.1
Genereu un vector fila que tingui com a elements tots els múltiples de 3 entre 50 i 100.
6
2.2 Operacions amb matrius
Les podem classificar com:
matricials, operen amb les matrius d’acord amb la seva definició matemàtica
A+B % suma de matrius, les dimensions han de coincidir,
A−B % resta de matrius, les dimensions han de coincidir,
A∗B % producte de matrius, el nombre de columnes de A ha de ser igual al
nombre de files de B,
A/B % multiplicació a la dreta per la inversa de B, és a dir, AB
−1 ,
Observeu que per a les operacions element a element es fan servir els mateixos operadors
que per a les operacions matricials però ara precedits per un punt (.+ .- .* ./ . \)
Exemple
>> v=[2,0,4,-1]; w=[1,3,-5,-2]; v+w, v-w
ans = 3 3 -1 -3
ans = 1 -3 9 1
>> v = [1,2,3]; u=[2,5,4]; v.*u, v./u
ans = 2 10 12
ans = 0.50000 0.40000 0.75000
Exercici 2.2
Per a les matrius
1 2 −1 5 1 −1
A = 0 3 −1 B = 0 2 −3
0 0 4 0 0 −1
compareu els resultats de les operacions ’∗’ i ’.∗’
zeros(n,m) % retorna una matriu de n files i m columnes amb tots els elements zero.
eye(n) % retorna la matriu identitat de n files i n columnes.
diag(v) % retorna una matriu que té a la diagonal el vector v i la resta zeros.
rand(n,m) % retorna una matriu de n files i m columnes amb elements aleatòris amb
7
linspace(inicial,final,n) % genera un vector fila de n nombres equiespaiats entre
el valor inicial i el valor final incloent els extrems.
A diferència del cas del rang [inicial:increment:final]
en què es coneix la separació dels elements (increment),
ara es coneix el nombre d’elements però no la seva separació.
Exemple
>> x=linspace(-2,7,10) % Genera un vector de 10 nombres equiespaiats entre -2 i 7
>> y=x.ˆ2 % Crea un vector y de 10 elements que conté els quadrats
dels elements del vector x. Observeu que cal usar l’operador amb
punt ’.ˆ’
>> z=sin(x) % Genera un vector que conté el sinus dels valors de x.
>> y=sin(x.ˆ2) % Genera un vector que conté el sinus dels quadrats dels valors de x.
2 5
>> x=logspace(2,5,4) % Genera un vector de 4 elements entre 10 i 10 equiespaiats
logarı́tmicament
x = 100 1000 10000 100000
Exercici 2.3
1. Genereu un vector v de 21 valors equiespaiats entre 0 i 10.
2. Genereu una matriu A que tingui com a primera fila el vector v de l’apartat anterior, com
a segona fila els valors de la funció f (x) = cos(x) en els punts de v i com a tercera fila
3
els valors de la funció g(x) = en els punts de v.
1 + x2
especificada a dim
prod(v) % retorna el producte dels elements del vector v
8
Exemple
En aquest exemple veiem com usar la funció sum per matrius i vectors. Introduim el vector v = [−1, 0, −2, 3, 4]
i la matriu
1 2 3 4
A=
5 6 7 8
>> v=[-1,0,-2,3,4]
>> A = [1,2,3,4; 5,6,7,8]
>> sum(v) % retorna la suma dels elements del vector v
>> sum(A,1) % retorna la suma de les columnes de la matriu A
>> sum(A,2) % retorna la suma de les files de la matriu A
>> sum(A(:)) % retorna la suma de tots els elements de la matriu A
Exercici 2.4
Calculeu 200
P
k=1 k amb una sola lı́nia de codi. Comproveu el resultat obtingut usant la fòrmula
N
X
k = N (N + 1)/2
k=1
Exercici 2.5
Donades les matrius
1 −2 3 2 3 6
A = 2 −2 3 , B = 3 3 6 ,
3 −3 3 6 6 6
3 Gràfics
3.1 Gràfiques bidimensionals
La comanda plot
Permet representar un conjunt de punts al pla (xi , yi ), i = 1, ...n. La forma bàsica és
plot(x,y,’nm’)
on x i y són vectors d’igual longitud que contenen les coordenades xi , yi dels punts.
’nm’ són dos caracters que, de manera opcional, especifiquen el color i l’estil de punt. Si no
s’especifica, els punts s’uneixen amb segments (estil lı́nia).
Exemple
>> x=[1,0.25,0,-0.25,-1,-0.25,0,0.25,1]; y=[0,0.25,1,0.25,0,-0.25,-1,-0.25,0];
>> plot(x,y,’r*’) % representa les parelles de punts (xi , yi ) donats pels vectors x,y
>> plot(x,y) % compareu amb la representació anterior
9
Exemple
Per fer la gràfica de la funció y = x cos(x) a l’interval [−5, 5] primer generem un vector x amb punts
equiespaiats a l’interval [−5, 5], i un vector y amb els valors de la funció x cos(x) en aquests punts.
>> x=[-5:0.1:5];
>> y=x.*cos(x); % Observeu que cal usar l’operador (amb punt) ’.*’ per obtenir y ja que cal
fer les operacions per a cada element del vector x,
>> plot(x,y)
>> x(2),y(2)
ans = -4.9000
ans = -0.91391 % Observem que x(2) = −4.9 i y(2) = −4.9 cos(−4.9)
També s’accepta
>> x=[-5:0.1:5]; plot(x,x.*cos(x))
Exemple.
>> x=linspace(2,10,50); plot(x,exp(1./x).*sin(x),x,exp(1./x).*cos(x));
>> plot(x,exp(1./x).*sin(x),’r’,x,exp(1./x).*cos(x),’m’,x,x.*sin(x),’b+’);
En el segon cas, la gràfica de la funció e1/x sin(x) es fa en vermell i amb estil lı́nia, la gràfica de e1/x cos(x)
en magenta i la de x sin(x) en blau i amb estil de punts amb sı́mbol +.
Exemple
>> x=linspace(2,10,50); plot(x,cos(x),"m*","markersize",8)
Noteu que el gràfic de l’exemple anterior s’ha fet a la finestra [2, 10] × [−1, 1]. Si es vol que el
gràfic surti en una finestra diferent podem usar
axis([minx,maxx,miny,maxy])
Exemple
>> x=linspace(0,5,30); plot(x,sin(x))
>> axis([1,7,-2,2]); % refà el gràfic anterior a la finestra [1, 7] × [−2, 2].
Observeu que els punts que es representen són (x, sin(x)) per x ∈ [0, 5].
Podeu utilitzar la comanda help plot per veure les diferents opcions de color i estil per fer
representacions gràfiques.
10
Exercici 3.1
La comanda ezplot
Per fer la gràfica d’una funció y = f (x) també podem usar ezplot. La forma general és
ezplot(’f’,[a,b],n)
on f és una expressió que defineix la funció f (x), [a,b] és l’interval, i n és el nombre de punts
usat per fer la gràfica. Tant [a,b] com n son opcionals. Si no s’especifica l’interval, per defecte
fa la gràfica a l’interval [−2π, 2π]. Per defecte usa 500 punts.
Exemple
>> ezplot(’x*cos(x)’) % gràfica de y = x cos(x) a l’interval [−2π, 2π]
>> ezplot(’x*cos(x)’,[-10,10]) % gràfica de f (x) = x cos(x) per x ∈ [−10, 10]
>> xlabel(’variable x’) % fa la gràfica amb l’etiqueta ’variable x’ a l’eix x
>> ylabel(’variable y’) % fa la gràfica amb l’etiqueta ’variable y’ a l’eix y
Exercici 3.2
Feu la gràfica de la funció f (x) = sin(x2 −3x) a l’interval [−2, 6] amb ezplot sense especificar
el nombre de punts, i també usant 200, 1000 i 1500 punts.
Per representar gràficament una funció de dues variables f (x, y) i les seves corbes de nivell
podem utilizar ezmesh i ezcontour. Les formes bàsiques són
>> ezmeshc(’1/exp(xˆ2+0.2*yˆ2)’,[-2,2])
11
Exercici 3.3
12