Računanje ničle z bisekcijo - Derive

Računanje ničle z bisekcijo - Derive

Avtor: Aktivna matematika

Težavnost:

Učni cilji: Učni list na temo iskanja ničel funkcije z metodo bisekcije.

Na voljo imamo datoteko  num_bt.mth  , v kateri so zbrane funkcije, s katerimi lahko izvajamo razne račune.

Izračunajmo najmanjšo ničlo funkcije

Najprej naložimo DERIVE z datoteko  num_bt.mth 


File/Load/Utility File/num_bt.mth 

Vnesemo funcijo in jo s  Plot  narišemo. Iz slike razberemo, da je najmanjša ničla lahko tam nekje pri . S pritiskanjem na tipko F9 (Zoom) razjasnimo zadevo - tu ni ničle. Oglejmo si to sliko

(slika1.PNG)

Najmanjša ničla je torej nekje pri . Odtipkamo

 num_bism(-2.1,-1.9,9) 

pa dobimo

Slika iz programa

Sedaj lahko poiščemo še natančnejše približke te ničle, tako da povečujemo tretji parameter v funkciji. Ta pove število iteracij bisekcije.

Parametri funkcije  num_bism(a,b,n)  so:

  • - levo krajišče intervala na katerem leži ničla funkcije .
  • - desno krajišče intervala z ničlo.
  • - število korakov bisekcije.

Rezultat je matrika, ki jo sestavlja vrstic in stolpci. Vsaka vrstica je rezultat iteracije pri bisekciji. V prvem stolpcu je levo krajišče intervala na katerem leži ničla funkcije , v drugem stolpcu pa vrednost funkcije pri tem krajišču. V tretjem in četrtem stolpcu sta ustrezni vrednosti za desno krajišče intervala.

Funkcija  num_bis(a,b,n)  pa nam vrne le zadnjo iteracijo bisekcije.

Dijake spodbudimo, da predlagajo, kaj naj še izračunamo in da razmislijo, koliko iteracij je potrebno, da ničlo ujamemo v interval določene širine.

(slika2.PNG)

Primer datoteke  num_bt.mth   iz programa Derive

 "datoteka num_bt - bisekcija in tangentna metoda za"
"racunanje nicel"

"Natancnost racunanja"
Precision := Approximate
PrecisionDigits := 6

f(x) :=

"bisekcija"
"izbira intervala na katerem je nicla"
novi_i(v) := if( (element(v,2)*element(v,4) = 0), v,č
if( (f(element(v,1))*f( (element(v,1) + element(v,3))/2 ) > 0),č
[(element(v,1)+element(v,3))/2, f((element(v,1)+element(v,3))/2 ),č
element(v,3),element(v,4)],č
[element(v,1),element(v,2),č
(element(v,1)+element(v,3))/2,f((element(v,1)+element(v,3))/2)]))

"n-krat razpolovimo interval [a,b] - izpisemo matriko"
num_bism(a,b,n) := append([["a","f(a)","b","f(b)"]],č
iterates(novi_i(v),v,[a,f(a),b,f(b)],n))

"n-krat razpolovimo interval [a,b]"
num_bis(a,b,n) := append([["a","f(a)","b","f(b)"]],č
[iterate(novi_i(v),v,[a,f(a),b,f(b)],n)])

"tangentna metoda"
"n-krat ponovimo iteracijo - izpisemo vektor"
num_tanm(f,x,x0,n) := iterates(x - f/dif(f,x),x,x0,n)

"n-krat ponovimo iteracijo"
num_tan(f,x,x0,n) := iterate(x - f/dif(f,x),x,x0,n)  

0%
0%