Taller de Matemàtiques (Càlcul 1) - mat-web.upc.edu · Dia 1. Introduccio al Matlab´ Practica...

22
Taller de Matem` atiques (C ` alcul 1) Jordi Villanueva Departament de Matem ` atica Aplicada I Universitat Polit` ecnica de Catalunya 21 de novembre de 2016 Jordi Villanueva (MA1) Taller de Matem` atiques (C ` alcul 1) 21 de novembre de 2016 1 / 22

Transcript of Taller de Matemàtiques (Càlcul 1) - mat-web.upc.edu · Dia 1. Introduccio al Matlab´ Practica...

Taller de Matematiques (Calcul 1)

Jordi Villanueva

Departament de Matematica Aplicada IUniversitat Politecnica de Catalunya

21 de novembre de 2016

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 1 / 22

Dia 1. Introduccio al MatlabPractica 3. Representacio grafica.Practica 5. Zeros i extrems de funcions.Practica 8. Integracio numerica.Practica 9. Control de flux.

Dia 2. Realitzacio de les practiques

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 2 / 22

Vectors en Matlab

• Opcio 1: Escriure el vector component a component>> x(1)=0; x(2)=1; x(3)=2; x(4)=3; % Fer clc per netejar la pantalla• Opcio 2: Omplir totes les components de cop>> x=[0,1,2,3]− Comentari: Si nomes volem omplir el vector x pero no volem veureles seves components per pantalla hem d’escriure>> x=[0,1,2,3];• Opcio 3: Quan les components son equi-espaiades un pas donat>> y=2:0.25:3.1− Obtenim per pantalla un vector y de 5 components.− La 1a. es 2 (el 1er nombre de y=2:0.25:3.1 ).− Les seguents components s’obtenen sumant, successivament, elpas=0.25 donat pel 2on. nombre.− L’ultima component, 3 , es mes petita o igual que 3.1 (3er. nombre).− Si volem un vector de 5 components on la 1a. sigui 2 i la darrerasigui 3.1 hem de usar el pas=(3.1-2)/4=0.275 .>> y=2:0.275:3.1

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 3 / 22

• Opcio 4: Components equi-espaiades sense donar el pas>> v=linspace(2,3.1,5)− v te 5 components (3er. nombre) que van de 2 (el 1er.) a 3.1 (el2on.) amb pas=(3.1-2)/4=0.275.• Opcio 5: Aplicar una funcio a un vector ja definit>> x=-pi:pi/10:pi; y=sin(x)− y es un vector de 21 components que s’obte aplicant la funciosinus a les components del vector x (que no veiem per pantalla)− Tame podem omplir x sense donar el pas, pas=pi/10 , fent:>> x=linspace(-pi,pi,21)

Comentari (Com obtenim mes precisio en els resultats)− Per defecte el Matlab dona els resultats amb 5 decimals.− Si volem 15 decimals hem de fer previament:>> format long;Feu-ho sempre a l’inici de la sessio!!!− Ara sı que veiem 15 decimals dels resultats:>> pi>> exp(1) % El nombre e

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 4 / 22

Operacions en Matlab que porten . al davant

Producte: . ∗ Divisio: ./ Exponent: .∧

(No cal escriure . al davant de la suma.)

Exemple

Avaluar y = e−1/x sin( √

x1 + x2

)quan x = 1 .

>> x=1;>> y=exp(-1./x).*sin(sqrt(x)./(1+x.∧2))De fet, en aquest cas el . no cal, ja que x pren un valor numericconcret. Nomes es estrictament necessari si x es una variable.

− Si volem avaluar y = e−1/x sin( √

x1 + x2

)per a molts valors de x

(p. ex., per pintar la seva grafica) es raonable definir la funcio donadaper aquesta formula.− En Matlab les funcions les podem definir mitjancant els anomenatsfitxers tipus .m .

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 5 / 22

Defincicio de funcions via fitxers tipus .m

− Volem definir una funcio per avaluar y = e−1/x sin( √

x1 + x2

).

− 1er. Pas: Triar nom per la funcio, p. ex. g , de forma que y=g(x) .− La tria del nom de la funcio determina el nom del fitxer .m quegenerem. En aquest cas, g.m− El nom triat per la funcio no es, en sı, important! Si volem que lafuncio es digui, p. ex., patata , simplement amomenem l’arxiupatata.m i avaluem la funcio fent patata(x) .− Per generar el fitxer g.m escrivim:>> edit('g.m')− Aixo obre un editor on hem de picar la formula de la funcio g :function y=g(x)y=exp(-1./x).*sin(sqrt(x)./(1+x.∧2)); % Aquı Sı cal el .− Recordeu el ; al final! Ara SALVEM el fitxer i TANQUEM l’editor.− Ara podem avaluar, p. ex.:>> g(1)

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 6 / 22

Calcul de zeros de funcions

Exemple

Useu fzero per trobar x0 el zero de f (x) = x3 + cos(x)− 2 .Comproveu que x0 verifica |f (x0)| < 10−6 .

• 1er. Pas: Dibuixar la grafica de f (x) en un interval prou gran per talque contingui el zero. L’interval el trobem “per tanteix”.− Veurem, graficament, que en aquest cas [−2,2] va be.

Metode 1: Usem la comanda plot per fer el dibuix− Pintem la grafica de f (x) a partir de 100 valors de la funcio:>> x=linspace(-2,2,100); % x vector/taula de punts equi-espaiats>> y=x.∧3+cos(x)-2;>> plot(x,y)− Tambe podem definir previament un fitxer .m per avaluar f (x) :>> edit('f.m') % Obrim l’editor per picar la funciofunction y=f(x)y=x.∧3+cos(x)-2; % Recordeu: ; al final, salvar i tancar l’editor

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 7 / 22

− Usem l’arxiu f.m per pintar de nou la grafica de f (x) usant arauna taula de valors de x ∈ [−2,2] separats per un pas=0.01 :>> x=-2:0.01:2;>> y=f(x);>> plot(x,y)− Veiem, graficament, que el zero x0 es dins de l’interval [1,1.5] .− Potser [1,1.5] es un interval massa gran.Metode 2: Usem ara la comanda fplot per millorar l’interval.− El 1er. pas es generar un fitxer .m amb la formula de la funcio.− En el nostres cas ja ho hem fet. Es el fitxer f.m .− Usem fplot per dibuixar f (x) en l’interval [1,1.5] :>> fplot(@f,[1,1.5]) % Usant fplot no cal generar els vectors x i y− Ara refinem l’interval a [1.1,1.2] :>> fplot(@f,[1.1,1.2])− Sembla que x0 ∈ [1.17,1.18] . Usant una graella es mes clar>> fplot(@f,[1.1,1.2]); hold on; % Podem afegir coses al dibuix>> grid on; hold off % Afegim la graella i tanquem el dibuix

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 8 / 22

− Per garantir que, efectivament, x0 ∈ [1.17,1.18] calculem:>> f(1.17)*f(1.18)− Resultat amb signe menys =⇒ per Bolzano f te un zero.• 2on. Pas: Busquem x0 usant la comanda fzero .>> [arrel,farrel]=fzero(@f,[1.17,1.18])− arrel ens retorna el valor numeric de x0 en l’interval [1.17,1.18] .− Veure que el zero x0 existeix i que es l’unic zero en l’interval[1.17,1.18] ha estat feina nostra!− farrel retorna el valor numeric de f (x0)>> f(arrel)− En aquest cas, el resultat per x0 donat per farrel es tant bo que,numericament, obtenim f(arrel)=0 amb la precisio usada.− Obtenir que f(arrel)=0 no es un resultat normal! En l’enunciat ensconformavem amb obtenir |f(arrel)| < 10−6 .− fzero tambe funciona si, enlloc d’un interval, tenim nomes un puntprou proper al zero x0 . P. ex.:>> [arrel,farrel]=fzero(@f,1.17)

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 9 / 22

Punt de tall de dues grafiques com a zero d’una funcio

ExempleTrobeu el punt on es tallen les grafiques de g(x) = e−x i h(x) = x .

− Generem 3 fitxers .m : per g(x) , h(x) i f (x) = h(x)− g(x) .

>> edit('g.m')function y=g(x)y=exp(-x);

>> edit('h.m')function y=h(x)y=x;

>> edit('f.m')function y=f(x)y=x-exp(-x);

− Dibuixem les gafiques de g(x) i h(x) en [0,2] en colors diferents>> fplot(@g,[0,2],'b'); hold on; % ’b’ es color blau>> fplot(@h,[0,2],'r'); hold off; % ’r’ es color vermell− Veiem, graficament, que el punt de tall es a l’interval [0.4,0.8] .− El busquem com a zero de la funcio diferencia f (x) = h(x)− g(x) :>> [arrel,farrel]=fzero(@f,[0.4,0.6])− arrel ens retorna el valor numeric del punt de tall.

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 10 / 22

Maxims i mınims relatius d’una funcio

ExempleTrobeu tots els maxims i mınims de h(x) = sin(sin(sin(x) + 1) + 1) en[−π, π] (sense comptar els extrems de l’interval).

• 1e. Pas: Generem un fitxer h.m amb la defincio de h(x) :>> edit('h.m')function y=h(x)y=sin(sin(sin(x)+1)+1);• 2on. Pas: Dibuixem h(x) en [−π, π] :>> fplot(@h,[-pi,pi])− Veiem que hi ha 3 mınims relatius i 3 maxims relatius.• 3er. Pas: Generem 6 intervals diferents que continguin, exactament,un dels maxims o un dels mınims.− P. ex.: h(x) te un mınim relatiu en [−2,−1] :>> fplot(@h,[-2,-1])− P. ex.: h(x) te un maxim relatiu en [1,2] .

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 11 / 22

• 4art. Pas: Calculem els mınims relatius de h(x) en cadascun delssub-interval usant la comanda fminbnd .− P. ex., calculem el mınim de h(x) en l’interval [−2,−1] :>> [xmin,hmin]=fminbnd(@h,-2,-1)− xmin dona el valor numeric del mınim de h(x) en [−2,−1]− hmin dona el valor de h(xmin) :>> h(xmin)• 5e. Pas: Calculem els maxims relatius de h(x) en cada sub-interval− Matlab no te cap comanda especıfica per calcular maxims.− Els mınims relatius de −h(x) son els maxims relatius de h(x) .− Generm un fitxer h1.m amb la definicio h1(x) = −h(x) :>> edit('h1.m')function y=h1(x)y=-h(x);− Calculem el maxim relatiu de h(x) en [1,2] com a mınim de h1(x)>> [xmax,hmaxneg]=fminbnd(@h1,1,2)− xmax dona el mınim relatiu de h1(x) =⇒ maxim relatiu de h(x)− hmaxneg dona el valor de h1(xmax) que es, de fet, −h(xmax) .

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 12 / 22

Integracio numerica de funcions

Exemple

Calculeu la integral I =∫ π/3

0log(cos(x))dx usant:

(a) El metode dels trapezis compost amb n = 8 intervals

( pas h =π/3− 0

8).

(b) El metode del Simpson compost amb n = 16 intervals

( pas h =π/3− 0

16).

(c) Quadratura adaptativa de Gauss-Lobato amb tolerancia 10−10 .

− En primer lloc generem un fitxer f.m amb la defincio de la funciof (x) que integrem:>> edit('f.m')function y=f(x)y=log(cos(x)); % log es el logarıtme neperia ln

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 13 / 22

(a) Pel metode dels trapezis compost usem la comanda trapz .>> a=0; b=pi/3; n=8; h=(b-a)/n; % [a,b] interval i h es el pas>> x=a:h:b; % x es una taula de punts equi-espaiats en [a,b]>> y=f(x); % y es una taula de valors de f en els punts de x>> trapezis8=trapz(x,y) % Resultat del metode− Si volem tornar a aplicar el metode dels trapezis a la integral I ,per valors de n diferents, podem generar un fitxer trapezis.m quefaci tots els calculs de forma compacta:>> edit('trapezis.m')function [trapezisn,hn]=trapezis(n,a,b)hn=(b-a)/n; x=a:hn:b; y=f(x);trapezisn=trapz(x,y);− Si volem re-calcular I usant trapezis amb n=8 podem fer:>> [trapezis8,h8]=trapezis(8,0,pi/3)

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 14 / 22

(b) No hi ha cap comanda de matlab pel metode de Simpson.− Per calcular I per Simpson hem d’aplicar dos cops trapezis.− 1er. pas: Apliquem trapezis amb el valor de n de l’enunciat deSimpson (sempre parell). En el nostre cas n=16 :>> [trapezis16,h16]=trapezis(16,0,pi/3)− 2on. pas: Apliquem trapezis amb n

2 . En el nostre cas n2 = 8 :

>> [trapezis8,h8]=trapezis(8,0,pi/3)− 3er. pas: Usem la formula que relaciona Simpson i trapezis:>> simpson16=(4*trapezis16-trapezis8)/3

(c) El metode de quadratura adaptativa es molt mes facil d’usar i esel que dona millors resultats:>> I10=quadl(@f,0,pi/3,1.e-10)− I10 dona el valor de la quadratura adaptativa de Gauss-Lobatoper f(x) en l’interval [0, π/3] i amb la tolerancia 10−10 .

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 15 / 22

Control del flux: les instruccions for , if , else , elseif

ExempleQuant val x30 solucio de l’equacio en diferencies seguent:

xn+2 + xn+1 + xn = cos(n), x1 = 1, x2 = 1.

− Aıllem xn+2 en l’equacio: xn+2 = cos(n)− xn − xn+1 .− Tractem de fer els calculs a ma:>> clear x; % Netejem el vector x usat anteriorment>> x(1)=1; x(2)=1; % Valors inicial de l’enunciat>> x(3)=cos(1)-x(1)-x(2); % Fem n=1 en la formula per xn+2>> x(4)=cos(2)-x(2)-x(3); % Fem n=2>> x(5)=cos(3)-x(3)-x(4); % Fem n=3− Si volem veure, p. ex., el valor de x5 calculat fem:>> x(5) % xn en Matlab s’escriu x(n)− Si volem obtenir x(30) a ma hem de continuar fins n=28 . Uf!!!

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 16 / 22

− Sistematitzem els calculs usant for per generar un bucle:>> x(1)=1; x(2)=1;>> for n=1:28 % No poseu ; al final del for>> x(n+2)=cos(n)-x(n)-x(n+1); % Al final ; per no veure el resultat>> end % Tanca el bucle for i tampoc porta ; al final>> x(30) % Veiem x30 per pantalla− L’instruccio for repeteix el calcul x(n+2)=cos(n)-x(n)-x(n+1) per alsvalors de n=1,2,. . . ,28 .− El darrer valor calculat es x(30) .

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 17 / 22

Exemple

Sumeu els 150 primers termes de la serie I =∞∑

n=1

(−1)n

nsin(n) .

− Concretament, volem sumar I150 =∑150

n=1 xn on xn = (−1)n

n sin(n) .− Usem for per generar el vector x = (x1, . . . , x150) i despres sumemles seves components.>> clear x; % Per sı de cas, alliverem el vector x>> for n=1:150 % repetim el calcul per n = 1,2, . . . ,150>> x(n)=((-1).∧n).*sin(n)./n; % Recordeu el . davant ∧ i *>> end>> I150=sum(x) % Sumem les components del vector x− Tambe podem fer el calcul sense usar for :>> n=1:1:150; % n es el vector n=(1,2,. . . ,150)>> x=((-1).∧n).*sin(n)./n; % Generem el vector x a partir del vector n>> I150=sum(x)

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 18 / 22

ExempleFeu una funcio signe.m que retorni el valor de la funcio signe:

signe(x) =

+1, si x > 0−1, si x < 0

0, si x = 0

>> edit('signe.m')function y=signe(x)if x>0

y=1; % Quan x>0 retornem el valor y=1 i fi de la funcioelse % Tot el que segueix aplica a quan x≤0

if x<0 % Obrim un nou if / else per separar x<0 de x=0y=-1; % Quan x<0 retornem y=-1 i fi de la funcio

else % Tot el que segueix aplica a quan x=0y=0; % Quan x=0 retornem el valor y=0 i fi de la funcio

end % tanca el if x<0 / elseend % tanca el if x>0 / else

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 19 / 22

− Tambe podem usar elseif per simplificar l’estructura:>> edit('signe.m')function y=signe(x)if x>0

y=1;elseif x<0 % El que segueix aplica a quan falla x>0 pero val x<0

y=-1;else % El que segueix aplica a quan falla x>0 i x<0

y=0;end

ComentariSi volem fer una comparacio del tipus ”if x=0”, (resp., ”if x 6=0” ), hemd’escriure if x==0 (resp., if x∼=0 ).P. ex. la seguent expressio retorna y=1:>> x=1; if (x=1) y=1; else y=0; end; yP. ex. la seguent expressio retorna y=0:>> x=1; if (x∼=1) y=0; else y=1; end; y

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 20 / 22

ExempleRepresenteu en [−3/2,3/2] la funcio definida a trossos:

f (x) =

cosh(4 ∗ arccosh(−x)), si x < −1cos(4 ∗ arccos(x)), si − 1 ≤ x ≤ 1cosh(4 ∗ arccosh(x)), si x > 1

Vegeu, graficament, que coincideix amb T (x) = 8x4 − 8x2 + 1 .

− Generem un fitxer f.m per avaluar f>> edit('f.m')function y=f(x)if x<-1

y=cosh(4.*acosh(-x));elseif x>1

y=cosh(4.*acosh(x));else

y=cos(4.*acos(x));end

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 21 / 22

− Generem un fitxer T.m per avaluar T>> edit('T.m')function y=T(x)y=8*x.∧4-8*x.∧2+1;− Dibuixem, simultniament, T (amb plot ) i f (amb fplot ).>> close; % Si hi ha alguna figura oberta la tanquem>> x=linspace(-3/2,3/2,200); % x taula de 200 punts en [−3/2,3/2]>> y=T(x); % Avaluem T en els punts de la taula x>> plot(x,y,'r'); hold on; % Pintem T en vermell>> fplot(@f,[-3/2,3/2],'g'); hold off; % Pintem a sobre f en verd>> close; % Tanquem la figura

Comentari (Defincio de funcions a la lınia de comandes)Molts cops podem evitar generar un fitxer .m per usar una funcio.Si ens fixem en la funcio T (x) = 8x4 − 8x2 + 1 , podem fer, p. ex.:>> fplot(@(x) 8*x.∧4-8*x.∧2+1,[-1,1])>> [arrel,farrel]=fzero(@(x) 8*x.∧4-8*x.∧2+1,-1)>> quadl(@(x) 8*x.∧4-8*x.∧2+1,-1,1,1.e-12)

Jordi Villanueva (MA1) Taller de Matematiques (Calcul 1) 21 de novembre de 2016 22 / 22