Càlcul dels zeros d'una funció:
En aquesta pràctica veurem com es poden calcular numèricament els zeros d'una funció.
Teorema de Bolzano: Canvis de signe
Donada una funció f(x), per calcular els seus zeros haurem de fer:
- Triar el rang del domini en el que estudiem la funció: [xmin,xmax]
- Avaluar la funció en un conjunt de punts d'aquest domini
- Determinar els canvis de signe de la funció (per Bolzano sabem que allà hi haurà els zeros)
- Calcular els zeros
% funció f(x) definida com a inline
%rang de valors que estudiem
%-------------------------------------------------------------
% pintem la funció per tenir una idea dels zeros
%-------------------------------------------------------------
semieix_y=1.1*max(abs(y)); %ajustem els eixos als valors de la funció
axis([xmin xmax -semieix_y semieix_y]);
line([xmin xmax],[0 0],'Color','k','LineWidth',2)
line([0 0],[-semieix_y semieix_y],'Color','k','LineWidth',2)
Determinació de l'interval de canvi de signe
%-------------------------------------------------------------
% Determinem els possibles zeros de la funció.
%-------------------------------------------------------------
% Fem un estudi del numero de zeros a partir dels canvis de signe de la
disp(['zero ', num2str(nzeros)]);
disp(['interval [' num2str(x(j)) ',' num2str(x(j+1)) ']']);
intervals=[intervals; x(j), x(j+1)]; %guardem els intervals en una matriu
Mètode de la Bisecció
Es basa en dividir succesivament la meitat l'interval inicial [a,b],
en el que hi ha un canvi de signe i anar descartant la meitat que ja no conté el canvi de signe (trobareu el codi al final del guió). Iteracions de la bisecció
Càlcul del zero a cada interval
Ara per cada interval cridarem una funció que calculi el zero fins a una determinada tolerància d'error
. Aquest criteri és suficient si la funció és prou vertical però en general és més precís utilitzar que
que sempre donarà un valor més proper al zero real. tol = 1.e-8; % demanem 10^(-8) de precisió en el càlcul
numZeros = size(intervals,1); %cada fila és un interval [xa, xb] de canvi de signe
z(i) = biseccio(f, xa, xb, tol); %s'ha de triar el mètode a utilitzar
%z(i) = secant(f, xa, xb, tol);
%z(i) = newton(f, df, xa, xb, tol);
end
iter = 1 x= -3.1250000000000000e+00 f(x)= -1.659189e-02
iter = 2 x= -3.1625000000000001e+00 f(x)= 2.090582e-02
iter = 3 x= -3.1437499999999998e+00 f(x)= 2.157345e-03
iter = 4 x= -3.1343749999999999e+00 f(x)= -7.217591e-03
iter = 5 x= -3.1390624999999996e+00 f(x)= -2.530151e-03
iter = 6 x= -3.1414062499999997e+00 f(x)= -1.864036e-04
iter = 7 x= -3.1425781250000000e+00 f(x)= 9.854713e-04
iter = 8 x= -3.1419921874999996e+00 f(x)= 3.995339e-04
iter = 9 x= -3.1416992187499995e+00 f(x)= 1.065652e-04
iter = 10 x= -3.1415527343749998e+00 f(x)= -3.991921e-05
iter = 11 x= -3.1416259765624996e+00 f(x)= 3.332297e-05
iter = 12 x= -3.1415893554687497e+00 f(x)= -3.298121e-06
iter = 13 x= -3.1416076660156245e+00 f(x)= 1.501243e-05
iter = 14 x= -3.1415985107421873e+00 f(x)= 5.857152e-06
iter = 15 x= -3.1415939331054688e+00 f(x)= 1.279516e-06
iter = 16 x= -3.1415916442871090e+00 f(x)= -1.009303e-06
iter = 17 x= -3.1415927886962889e+00 f(x)= 1.351065e-07
iter = 18 x= -3.1415922164916990e+00 f(x)= -4.370981e-07
iter = 19 x= -3.1415925025939941e+00 f(x)= -1.509958e-07
iter = 20 x= -3.1415926456451415e+00 f(x)= -7.944652e-09
--------------------------------
iter = 1 x= 2.5000000000000355e-02 f(x)= 2.499740e-02
iter = 2 x= -1.2499999999999734e-02 f(x)= -1.249967e-02
iter = 3 x= 6.2500000000003109e-03 f(x)= 6.249959e-03
iter = 4 x= -3.1249999999997113e-03 f(x)= -3.124995e-03
iter = 5 x= 1.5625000000002998e-03 f(x)= 1.562499e-03
iter = 6 x= -7.8124999999970579e-04 f(x)= -7.812499e-04
iter = 7 x= 3.9062500000029698e-04 f(x)= 3.906250e-04
iter = 8 x= -1.9531249999970440e-04 f(x)= -1.953125e-04
iter = 9 x= 9.7656250000296291e-05 f(x)= 9.765625e-05
iter = 10 x= -4.8828124999704056e-05 f(x)= -4.882812e-05
iter = 11 x= 2.4414062500296117e-05 f(x)= 2.441406e-05
iter = 12 x= -1.2207031249703969e-05 f(x)= -1.220703e-05
iter = 13 x= 6.1035156252960739e-06 f(x)= 6.103516e-06
iter = 14 x= -3.0517578122039478e-06 f(x)= -3.051758e-06
iter = 15 x= 1.5258789065460631e-06 f(x)= 1.525879e-06
iter = 16 x= -7.6293945282894233e-07 f(x)= -7.629395e-07
iter = 17 x= 3.8146972685856038e-07 f(x)= 3.814697e-07
iter = 18 x= -1.9073486298519098e-07 f(x)= -1.907349e-07
iter = 19 x= 9.5367431936684699e-08 f(x)= 9.536743e-08
iter = 20 x= -4.7683715524253140e-08 f(x)= -4.768372e-08
iter = 21 x= 2.3841858206215780e-08 f(x)= 2.384186e-08
iter = 22 x= -1.1920928659018680e-08 f(x)= -1.192093e-08
iter = 23 x= 5.9604647735985499e-09 f(x)= 5.960465e-09
--------------------------------
iter = 1 x= 3.1750000000000007e+00 f(x)= -3.340113e-02
iter = 2 x= 3.1375000000000006e+00 f(x)= 4.092642e-03
iter = 3 x= 3.1562500000000009e+00 f(x)= -1.465682e-02
iter = 4 x= 3.1468750000000005e+00 f(x)= -5.282322e-03
iter = 5 x= 3.1421875000000004e+00 f(x)= -5.948464e-04
iter = 6 x= 3.1398437500000007e+00 f(x)= 1.748903e-03
iter = 7 x= 3.1410156250000005e+00 f(x)= 5.770286e-04
iter = 8 x= 3.1416015625000004e+00 f(x)= -8.908910e-06
iter = 9 x= 3.1413085937500007e+00 f(x)= 2.840598e-04
iter = 10 x= 3.1414550781250004e+00 f(x)= 1.375755e-04
iter = 11 x= 3.1415283203125002e+00 f(x)= 6.433328e-05
iter = 12 x= 3.1415649414062505e+00 f(x)= 2.771218e-05
iter = 13 x= 3.1415832519531257e+00 f(x)= 9.401637e-06
iter = 14 x= 3.1415924072265629e+00 f(x)= 2.463632e-07
iter = 15 x= 3.1415969848632814e+00 f(x)= -4.331273e-06
iter = 16 x= 3.1415946960449221e+00 f(x)= -2.042455e-06
iter = 17 x= 3.1415935516357427e+00 f(x)= -8.980459e-07
iter = 18 x= 3.1415929794311528e+00 f(x)= -3.258414e-07
iter = 19 x= 3.1415926933288576e+00 f(x)= -3.973906e-08
iter = 20 x= 3.1415925502777102e+00 f(x)= 1.033121e-07
iter = 21 x= 3.1415926218032837e+00 f(x)= 3.178651e-08
iter = 22 x= 3.1415926575660706e+00 f(x)= -3.976277e-09
--------------------------------
z
-3.141592645645142e+00 5.960464773598550e-09 3.141592657566071e+00
Exercici 1:
Canvieu el criteri de detecció del zero de bisecció per la condició
. Hint: En aquest cas només cal fer
i només calen un parell més d'iteracions. Agafeu la funció
en
que és una funció molt plana (tota ella està per sota de
) i mireu la diferència entre els dos criteris (el segon sempre és més precís!!) Exercici 2: Mètode de la secant (regula falsi)
Implementeu el mètode de la secant creant una funció de Matlab
function zero = secant(f, xa, xb, tol)
i substituiu en el programa anterior la crida a biseccio per la crida a secant.
Mètode de la secant:
Anàlogament al que es fa en el mètode de bisecció, es pot fer el mateix però triant com a punt intermedi c, el punt de tall de l'eix x (y=0) amb la recta que uneix els dos punts (a,f(a)) i (b,fb)).
Podeu comprovar que la fórmula és:
A partir d'aquí es procedeix exactament igual que a bisecció, es descarta el subinterval que no conté el zero.
(source https://planetcalc.com/3712/)
Solució: Pel primer dels zeros només calen dues iteracions i donen:
iter = 1 x= -3.1415994094031583e+00 f(x)= 6.755813e-06
iter = 2 x= -3.1415926532799121e+00 f(x)= -3.098811e-10
Exercici 3: Mètode de Newton
Implementeu el mètode de Newton creant una funció de Matlab
function zero = newton(f, df, a, b, tol)
i substituiu en el programa anterior la crida a biseccio per la crida a newton.
Mètode de Newton:
Anàlogament al que es fa en el mètode de secant, es pot fer el mateix però triant com a punt intermedi c, el punt de tall de l'eix x (y=0) amb la recta tangent en un punt inicial
de l'interval [a,b]. Per exemple el punt mig de [a,b],
. Això requereix, entre d'altres coses, el càlcul de la derivada de la funció f(x) i definir-la també com una funció inline.
La fórmula matemàtica del mètode en aquest cas és:
A partir d'aquí es procedeix exactament igual que a bisecció, es descarta el subinterval que no conté el zero.
(source Animation of Newton's method by Ralf Pfeifer (https://commons.wikimedia.org/wiki/File:NewtonIteration_Ani.gif))
Solució: Pel primer dels zeros només calen dues iteracions i donen:
iter = 1 x= -3.1415941764993582e+00 f(x)= -1.659189e-02
iter = 2 x= -3.1415926535897931e+00 f(x)= -1.224647e-16
Noteu que el valor de f(x) obtingut és molt millor, de l'ordre de
en comptes del
del mètode de la secant. Exercici 2: Calcul dels zeros d'una funció
Calculeu els zeros de la funció
dins l'interval [-5,-1.5], pas entre les x de 0.02 i amb una tol = 1.e-10
Solució: Hi ha un total de 7 zeros
Exercicis:(by P. Gutiérrez)
(1) Representeu, a l'interval
la gràfica de la funció
(en color vermell), i la gràfica del seu polinomi de Taylor de grau 3 a l'origen,
(en línia discontínua de color negre), totes dues a la mateixa finestra. %close all %tanquem figures anteriors (optatiu)
hold on %per fer les dues grafiques sobre la mateixa figura
plot(x,y2) %tambe podem fer directament "plot(x,y,x,y2)"
(2) Representeu la funció
a l'interval
, prenent 0.001 com a increment de l'interval d'abscisses
Visualment, compteu el nombre de zeros i d'extrems relatius (màxims i mínims) de la funció. %close all %tanquem figures anteriors (optatiu)
f=@(x) log(x.^2-x+2).*cos(x);
grid %hi ha 8 zeros, 4 maxims i 4 minims
Sabent que el conjunt de valors
tals que
és un interval
trobeu els valors aproximats de a i 
a=x(imin)
a =
1.195400000000000e+01
b=x(imax)
b =
1.323500000000000e+01
(3) Considereu la funció
Representeu, a l'interval
la gràfica de
prenent un increment h=0.1 en els valors de la variable
Localitzeu visualment quants zeros té la funció, i on es troben. %close all %tanquem figures anteriors (optatiu)
f=@(x) 2*sqrt(2*x.^2+x+3)+sin(x.^2+2)-8;
grid %observem que te 4 zeros
Determineu intervals de longitud h=0.1 on la funció presenti un canvi de signe i, per tant, tingui un zero.
intervals=[]; %cada fila de la matriu correspondra a un interval
N=length(x); %nombre de punts
nzeros=nzeros+1; %nombre de zeros trobats fins ara
intervals=[intervals; x(j),x(j+1)]; %afegim una fila a la matriu
fprintf('interval %d: [%f,%f]\n',nzeros,x(j),x(j+1))
plot(x(j),y(j),'r*') %asterisc vermell a l'esquerra del punt
plot(x(j+1),y(j+1),'go') %cercle verd a la dreta del punt
end
interval 1: [-3.200000,-3.100000]
interval 2: [-2.700000,-2.600000]
interval 3: [-2.500000,-2.400000]
interval 4: [2.100000,2.200000]
Calculeu el zero a cadascun dels intervals trobats aplicant el mètode de bisecció amb una tolerància d'error tol=1e-8. Utilitzeu la funció donada al fitxer biseccio.m .
(Primer heu de crear el fitxer biseccio.m , copiant-lo del final del guió i guardant-lo.)
numZeros=size(intervals,1);
%nombre de files i, per tant, d'intervals trobats
xa=intervals(i,1); %copiem xa i xb d'una fila de la matriu
z(i)=biseccio(f,xa,xb,tol); %anem omplint un vector z amb els zeros
end
iter = 1 x= -3.1499999999999999e+00 f(x)= 2.755143e-01
iter = 2 x= -3.1250000000000000e+00 f(x)= 9.262973e-02
iter = 3 x= -3.1124999999999998e+00 f(x)= 7.965043e-03
iter = 4 x= -3.1062499999999997e+00 f(x)= -3.255253e-02
iter = 5 x= -3.1093750000000000e+00 f(x)= -1.244819e-02
iter = 6 x= -3.1109374999999999e+00 f(x)= -2.279953e-03
iter = 7 x= -3.1117187499999996e+00 f(x)= 2.832980e-03
iter = 8 x= -3.1113281250000000e+00 f(x)= 2.741186e-04
iter = 9 x= -3.1111328125000002e+00 f(x)= -1.003516e-03
iter = 10 x= -3.1112304687500001e+00 f(x)= -3.648486e-04
iter = 11 x= -3.1112792968749998e+00 f(x)= -4.540242e-05
iter = 12 x= -3.1113037109374999e+00 f(x)= 1.143487e-04
iter = 13 x= -3.1112915039062496e+00 f(x)= 3.447081e-05
iter = 14 x= -3.1112854003906247e+00 f(x)= -5.466388e-06
iter = 15 x= -3.1112884521484370e+00 f(x)= 1.450207e-05
iter = 16 x= -3.1112869262695311e+00 f(x)= 4.517803e-06
iter = 17 x= -3.1112861633300781e+00 f(x)= -4.743013e-07
iter = 18 x= -3.1112865447998046e+00 f(x)= 2.021749e-06
iter = 19 x= -3.1112863540649416e+00 f(x)= 7.737231e-07
iter = 20 x= -3.1112862586975099e+00 f(x)= 1.497107e-07
iter = 21 x= -3.1112862110137938e+00 f(x)= -1.622953e-07
iter = 22 x= -3.1112862348556520e+00 f(x)= -6.292291e-09
--------------------------------
iter = 1 x= -2.6499999999999995e+00 f(x)= -2.033587e-02
iter = 2 x= -2.6249999999999996e+00 f(x)= 3.407065e-02
iter = 3 x= -2.6374999999999993e+00 f(x)= 7.970860e-03
iter = 4 x= -2.6437499999999994e+00 f(x)= -5.920977e-03
iter = 5 x= -2.6406249999999991e+00 f(x)= 1.092155e-03
iter = 6 x= -2.6421874999999995e+00 f(x)= -2.397834e-03
iter = 7 x= -2.6414062499999993e+00 f(x)= -6.486672e-04
iter = 8 x= -2.6410156249999992e+00 f(x)= 2.227903e-04
iter = 9 x= -2.6412109374999995e+00 f(x)= -2.126772e-04
iter = 10 x= -2.6411132812499991e+00 f(x)= 5.121923e-06
iter = 11 x= -2.6411621093749993e+00 f(x)= -1.037613e-04
iter = 12 x= -2.6411376953124992e+00 f(x)= -4.931561e-05
iter = 13 x= -2.6411254882812489e+00 f(x)= -2.209582e-05
iter = 14 x= -2.6411193847656240e+00 f(x)= -8.486695e-06
iter = 15 x= -2.6411163330078118e+00 f(x)= -1.682322e-06
iter = 16 x= -2.6411148071289055e+00 f(x)= 1.719816e-06
iter = 17 x= -2.6411155700683588e+00 f(x)= 1.875087e-08
iter = 18 x= -2.6411159515380853e+00 f(x)= -8.317847e-07
iter = 19 x= -2.6411157608032223e+00 f(x)= -4.065167e-07
iter = 20 x= -2.6411156654357906e+00 f(x)= -1.938828e-07
iter = 21 x= -2.6411156177520745e+00 f(x)= -8.756597e-08
iter = 22 x= -2.6411155939102167e+00 f(x)= -3.440754e-08
iter = 23 x= -2.6411155819892880e+00 f(x)= -7.828334e-09
--------------------------------
iter = 1 x= -2.4500000000000002e+00 f(x)= 7.559849e-02
iter = 2 x= -2.4249999999999998e+00 f(x)= 2.424472e-02
iter = 3 x= -2.4124999999999996e+00 f(x)= -6.914183e-03
iter = 4 x= -2.4187499999999997e+00 f(x)= 9.116930e-03
iter = 5 x= -2.4156249999999995e+00 f(x)= 1.213829e-03
iter = 6 x= -2.4140624999999996e+00 f(x)= -2.822123e-03
iter = 7 x= -2.4148437499999993e+00 f(x)= -7.971257e-04
iter = 8 x= -2.4152343749999994e+00 f(x)= 2.101080e-04
iter = 9 x= -2.4150390624999991e+00 f(x)= -2.930699e-04
iter = 10 x= -2.4151367187499995e+00 f(x)= -4.137119e-05
iter = 11 x= -2.4151855468749996e+00 f(x)= 8.439586e-05
iter = 12 x= -2.4151611328124996e+00 f(x)= 2.151920e-05
iter = 13 x= -2.4151489257812493e+00 f(x)= -9.924282e-06
iter = 14 x= -2.4151550292968746e+00 f(x)= 5.797886e-06
iter = 15 x= -2.4151519775390620e+00 f(x)= -2.063091e-06
iter = 16 x= -2.4151535034179683e+00 f(x)= 1.867424e-06
iter = 17 x= -2.4151527404785149e+00 f(x)= -9.782646e-08
iter = 18 x= -2.4151531219482418e+00 f(x)= 8.848006e-07
iter = 19 x= -2.4151529312133784e+00 f(x)= 3.934875e-07
iter = 20 x= -2.4151528358459466e+00 f(x)= 1.478306e-07
iter = 21 x= -2.4151527881622306e+00 f(x)= 2.500211e-08
iter = 22 x= -2.4151527643203727e+00 f(x)= -3.641217e-08
iter = 23 x= -2.4151527762413014e+00 f(x)= -5.705029e-09
--------------------------------
iter = 1 x= 2.1499999999999995e+00 f(x)= -7.901041e-02
iter = 2 x= 2.1749999999999998e+00 f(x)= 8.412914e-02
iter = 3 x= 2.1624999999999996e+00 f(x)= 2.958821e-03
iter = 4 x= 2.1562499999999996e+00 f(x)= -3.793627e-02
iter = 5 x= 2.1593749999999998e+00 f(x)= -1.746506e-02
iter = 6 x= 2.1609374999999997e+00 f(x)= -7.247040e-03
iter = 7 x= 2.1617187499999995e+00 f(x)= -2.142569e-03
iter = 8 x= 2.1621093749999996e+00 f(x)= 4.085135e-04
iter = 9 x= 2.1619140624999993e+00 f(x)= -8.669314e-04
iter = 10 x= 2.1620117187499996e+00 f(x)= -2.291848e-04
iter = 11 x= 2.1620605468749998e+00 f(x)= 8.967040e-05
iter = 12 x= 2.1620361328124997e+00 f(x)= -6.975567e-05
iter = 13 x= 2.1620483398437500e+00 f(x)= 9.957743e-06
iter = 14 x= 2.1620422363281246e+00 f(x)= -2.989887e-05
iter = 15 x= 2.1620452880859373e+00 f(x)= -9.970540e-06
iter = 16 x= 2.1620468139648437e+00 f(x)= -6.392551e-09
--------------------------------
fprintf('zero: %.8f\n',z(i)) %escrivim els zeros, amb 8 decimals
end
zero: -3.11128623
zero: -2.64111558
zero: -2.41515278
zero: 2.16204681
Feu el mateix aplicant el mètode de la secant, creant un nou fitxer secant.m . En aquest fitxer caldrà substituir la fórmula xc=(xa+xb)/2 (que correspon al mètode de bisecció) per la fórmula del mètode de la secant. Observeu com es redueix el nombre d'iteracions necessàries.
(Primer heu de crear el fitxer secant.m , copiant-lo del final del guió.)
numZeros=size(intervals,1);
%nombre de files i, per tant, d'intervals trobats
xa=intervals(i,1); %copiem xa i xb d'una fila de la matriu
z(i)=secant(f,xa,xb,tol); %anem omplint un vector z amb els zeros
end
iter = 1 x= -3.1094764985737191e+00 f(x)= -1.179001e-02
iter = 2 x= -3.1110058784548626e+00 f(x)= -1.833212e-03
iter = 3 x= -3.1112430457840721e+00 f(x)= -2.825735e-04
iter = 4 x= -3.1112795880036535e+00 f(x)= -4.349756e-05
iter = 5 x= -3.1112852127218482e+00 f(x)= -6.694344e-06
iter = 6 x= -3.1112860783666174e+00 f(x)= -1.030237e-06
iter = 7 x= -3.1112862115862869e+00 f(x)= -1.585494e-07
iter = 8 x= -3.1112862320882479e+00 f(x)= -2.440008e-08
iter = 9 x= -3.1112862352434139e+00 f(x)= -3.755071e-09
--------------------------------
iter = 1 x= -2.6343306118158334e+00 f(x)= 1.480629e-02
iter = 2 x= -2.6402051106162832e+00 f(x)= 2.024306e-03
iter = 3 x= -2.6409976232553642e+00 f(x)= 2.629006e-04
iter = 4 x= -2.6411003691900423e+00 f(x)= 3.390943e-05
iter = 5 x= -2.6411136185806203e+00 f(x)= 4.369811e-06
iter = 6 x= -2.6411153259421631e+00 f(x)= 5.630604e-07
iter = 7 x= -2.6411155459388742e+00 f(x)= 7.255058e-08
iter = 8 x= -2.6411155742855330e+00 f(x)= 9.348154e-09
--------------------------------
iter = 1 x= -2.4237537314549300e+00 f(x)= 2.130064e-02
iter = 2 x= -2.4157168020557762e+00 f(x)= 1.449207e-03
iter = 3 x= -2.4151883865882682e+00 f(x)= 9.170845e-05
iter = 4 x= -2.4151550209630153e+00 f(x)= 5.776419e-06
iter = 5 x= -2.4151529196613968e+00 f(x)= 3.637308e-07
iter = 6 x= -2.4151527873473477e+00 f(x)= 2.290305e-08
iter = 7 x= -2.4151527790159277e+00 f(x)= 1.442135e-09
--------------------------------
iter = 1 x= 2.1628404123872191e+00 f(x)= 5.180666e-03
iter = 2 x= 2.1620593343448022e+00 f(x)= 8.175254e-05
iter = 3 x= 2.1620470111343764e+00 f(x)= 1.281144e-06
iter = 4 x= 2.1620468180179446e+00 f(x)= 2.007460e-08
iter = 5 x= 2.1620468149919496e+00 f(x)= 3.145537e-10
--------------------------------
fprintf('zero: %.8f\n',z(i)) %escrivim els zeros, amb 8 decimals
end
zero: -3.11128624
zero: -2.64111557
zero: -2.41515278
zero: 2.16204681
Funcions dels mètodes de Bisecció, Secant i Newton
function zero = biseccio(f, xa, xb, tol)
%-------------------------------------------------------------
%-------------------------------------------------------------
if (ya*yb >= 0) %descartem aquest cas però mirem si algun dels punts ja és un zero
error('interval incorrecte');
xc = (xa+xb)/2; %el punt mig
iter=1; %escribim la primera iteració
disp(['iter = ',num2str(iter),' x= ',num2str(xc,'%24.16e'),' f(x)= ',num2str(yc,'%e')]);
disp(['iter = ',num2str(iter),' x= ',num2str(xc,'%24.16e'),' f(x)= ',num2str(yc,'%e')]);
disp('--------------------------------');
function zero = secant(f, xa, xb, tol)
%-------------------------------------------------------------
%-------------------------------------------------------------
if (ya*yb >= 0) %descartem aquest cas però mirem si algun dels punts ja és un zero
error('interval incorrecte');
xc = xb - f(xb)*(xb-xa)/(f(xb)-f(xa));
iter=1; %escribim la primera iteració
disp(['iter = ',num2str(iter),' x= ',num2str(xc,'%24.16e'),' f(x)= ',num2str(yc,'%e')]);
xc = xb - f(xb)*(xb-xa)/(f(xb)-f(xa));
disp(['iter = ',num2str(iter),' x= ',num2str(xc,'%24.16e'),' f(x)= ',num2str(yc,'%e')]);
disp('--------------------------------');
function zero = newton(f, df, xa, xb, tol)
%-------------------------------------------------------------
%-------------------------------------------------------------
xn = x0; %farem la primera iteració pel valor inicial
disp(['iter = ',num2str(iter),' x= ',num2str(xm1,'%24.16e'),' f(x)= ',num2str(ym1,'%e')]);
disp(['iter = ',num2str(iter),' x= ',num2str(xm1,'%24.16e'),' f(x)= ',num2str(ym1,'%e')]);
(c) Numerical Factory, 2023