import math
def kedjebråk(x):
if x == 0: return 1
#sum = 100
#sum = (1+math.sqrt(5))/2
sum = (1-math.sqrt(5))/2
for i in range(x, 0, -1):
sum = 1 + 1/(sum)
return sum
print (kedjebråk(1))
print (kedjebråk(10))
print (kedjebråk(76))
print (kedjebråk(77))
print (kedjebråk(78))
print (kedjebråk(100))
Diagram för olika initialvärden sum och efter x iterationer:
| sum | x | returns |
|---|---|---|
| 1 | 1 | 2.0 |
| 1 | 1000 | 1.6180339887498_95 |
| 2 | 1 | 1.5 |
| 2 | 2 | 1.6666666666666665 |
| 2 | 50 | 1.6180555555555556 |
| 2 | 100 | 1.6180339887498_95 |
| 10 | 1 | 1.1 |
| 10 | 10 | 1.6181506849315068 |
| 10 | 100 | 1.6180339887498_95 |
| 20 | 1 | 1.05 |
| 20 | 10 | 1.6181657848324515 |
| 20 | 100 | 1.6180339887498_95 |
| 1+sqrt(5)/2 | 1 | 1.6180339887498_95 |
| 1-sqrt(5)/2 | 1 | -0.6180339887498947 |
| 1-sqrt(5)/2 | 10 | -0.6180339887509818 |
| 1-sqrt(5)/2 | 50 | 1.61812184348574740 |
| 1-sqrt(5)/2 | 77 | 1.6180339887498945 |
| 1-sqrt(5)/2 | 78 | 1.6180339887498_95 |
Kedjebråket får, efter 1000 iterationer, värdet 1.618033988749895 Som man kan se i diagrammet så blir svaret några decimaler större, men skillnaden blir mindre och mindre ju högra initialvärde vi väljer att använda. Använder vi 1+sqrt(5)/2 som argument skickas 1.618033988749895 ut redan efter första iterationen. Om vi stoppar in den andra fixpunkten 1-sqrt(5)/2 skickas ett annat värde ut: -0.6180339887498947.
I diagrammet ser man tydligt att $\frac{1+\sqrt5}{2}$ är en attraherande fixpunkt medans $\frac{1-\sqrt5}{2}$ är en reppelerande.
import math
def kedjesqrt(x):
sum = 1.6180339887498950
if x == 1:
return math.sqrt(1)
for i in range(x):
sum = math.sqrt(1 + sum)
return sum
print (kedjesqrt(2))
print (kedjesqrt(32))
Diagram som visar resultat från chainsqrt med x antal iterationer:
| x | kedjesqrt(x) | sum |
|---|---|---|
| 2 | 1.4142135623730951 | 0 |
| 10 | 1.6180165422314876 | 0 |
| 37 | 1.6180339887498950 | 0 |
| 1000 | 1.6180339887498950 | 0 |
| 2 | 1.5537739740300374 | 1 |
| 10 | 1.6180285974702324 | 1 |
| 10 | 1.6180165422314876 | 1 |
| 31 | 1.6180339887498950 | 1 |
| 31 | 1.6180339887498951 | 5 |
| 32 | 1.6180339887498950 | 5 |
| 32 | 1.6180339887498951 | 9 |
| 33 | 1.6180339887498950 | 9 |
| 33 | 1.6180339887498951 | 89 |
| 33 | 1.6180339887498953 | 999 |
| 33 | 1.6180339887498956 | 10000 |
| 2 | 1.6180339887498956 | 1.6180.. |
Som vi ser har denna funktion samma fixpunkter som kedjebråk(x).
Om man väljer ett högre initialvärde krävs det fler iterationer för att få fram fixpunkten. Använder vi fixpunkten som startvärde får man fram fixpunkten redan efter 2 iterationer
Det approximativt värde på cos som jag räknat ut är 0.7390851332151607. Detta är efter 92 iterationer och startvärde 0. Efter det ändras inte längre några siffror. Gränsvärdet måste därför vara det svaret man får efter så många iterationer, dvs det är en fixpunkt till rekursionen. Testar man att använda den fixpunkten som argument returnerar den fixpunkten direkt.
Det spelar ingen roll om man ökar startvärdet, approx. förblir densamma efter 92 iteration.
import math
def cosIter(n):
summa = 0
if n == 0:
return 1
summa = math.cos(cosIter(n-1))
return summa
print (cosIter(91))
print (math.cos(0.7390851332151607))
def funktion(x):
return x**3-2*x**2+1
def fprime(x):
return 3*x**2-4*x
def fun(f, x):
return abs(0-f(x))
def Newton(f, df, n, e):
delta = dx(f,n)
while delta > e:
n = n - (f(n)/df(n))
delta = dx(f,n)
print ('första rot är: ', n)
print ("f(x) roten är: ", f(n), "\n" )
nList = [.5, 1, 2, 5, 10]
for n in nList:
print(Newton(funktion,fprime,n, 1e-5))
from random import random
def logistik(r,x_start=random(),itteration=250):
print ('Value x:' ,x_start)
if (itteration==0):
return x_start
else:
x=x_start
for i in range(itteration-1):
x= r*x*(1-x)
return x
print(logistik(1))
För $ r≤1 $ har den logistiska avbildningen två fixpunkter, den första är $x_1$=0 och den andra är $x_2$=$\frac{r-1}{r}$ Och i just detta intervallet är det $x_1$ som är den attraherande fixpunkten, som kan kan ses i tabellen nedanför. Däremot krävs det fler itterationer då r=1 för att det lika tydligt ska ses att även då går swn logistiska avbildningen mot 0.
| r | xstart | x_250 |
|---|---|---|
| 0.2 | 0.25074654873341484 | 1.6209419248852563e-175 |
| 0.4 | 0.4203637355618177 | 1.6975159743459639e-10 |
| 0.6 | 0.002625733749145986 | 1.4999122135064112e-58 |
| 0.8 | 0.07290833196098168 | 3.9145508905531837e-26 |
| 1 | 0.38734930413593427 | 0.0038991671029242492 |
För 1 < $r$ < 3 ser man att funktionen konvergerar mot 0.6. För $r$ = 3.2, 3,5 och 3,8 verkar det enligt enligt Geogebra att funktionen inte konvergerar mot några fixpunkter. Den når aldrig in till någon mittpunkt/fixpunkt