In [1]:
%pylab
%matplotlib inline
import mpld3


Using matplotlib backend: MacOSX
Populating the interactive namespace from numpy and matplotlib

Vi skal tilnærme løsningen av $\ln(x)+cos(x)-1=0$.


In [2]:
def f(x):
    return log(x) + cos(x) - 1

Vi tegner for å finne $x_0$:


In [3]:
x = linspace(1,20,200)
y = f(x)
plot(x,y, lw=2)
plot([1,20],[0,0], lw=2, color='k')
ax = gca()
mpld3.display()


Out[3]:

Vi ser en løsning nær $4$, så vi velger $x_0=4$. Vi deriverer og finner at $f'(x)=1/x-\sin(x)$.


In [4]:
def fder(x):
    return 1/x - sin(x)

Vi kan beregne det en om en:


In [5]:
x0=4
x1=x0- f(x0)/fder(x0)
print(x1)
x2=x1-f(x1)/fder(x1)
print(x2)
x3=x2-f(x2)/fder(x2)
print(x3)


4.26554290538
4.24930879016
4.24926425674

Når stopper vi? Vi kan sjekke for x3:


In [6]:
f(x3)


Out[6]:
3.8805558766341619e-10

Liten nok? Da kan vi stoppe!

Ellers kan Python vurdere selv når vi kan stoppe, f.eks. når $|f(x_n)|$ er liten...


In [7]:
x=4
for i in range(100):
    x = x-f(x)/fder(x)
    if abs(f(x)) < 0.001:
        break
print(x)


4.24930879016