init repo
This commit is contained in:
parent
17875d57cb
commit
719f5816e9
@ -2,7 +2,10 @@ from binseq import REAL
|
|||||||
from math import isqrt # integer sqrt
|
from math import isqrt # integer sqrt
|
||||||
|
|
||||||
# Theorem 3.1 (2)
|
# Theorem 3.1 (2)
|
||||||
|
# Es gibt eine berechenbare Folge (qn)n∈N rationaler Zahlen, die schnell gegen x konvergiert.
|
||||||
|
# d.h. |x − qi| < 2^(−i) für alle i ∈ N.
|
||||||
|
|
||||||
|
# bin_seq(1/3) = 0.010101...
|
||||||
def one_third(n):
|
def one_third(n):
|
||||||
if n == 1: return "."
|
if n == 1: return "."
|
||||||
if n % 2 == 0: return "0"
|
if n % 2 == 0: return "0"
|
||||||
|
Binary file not shown.
@ -2,6 +2,7 @@ from decidable import REAL
|
|||||||
from gmpy2 import mpq
|
from gmpy2 import mpq
|
||||||
|
|
||||||
# Theorem 3.1 (5)
|
# Theorem 3.1 (5)
|
||||||
|
# Es gibt eine ganze Zahl z ∈ Z und eine entscheidbare Menge A ⊆ N mit x = z + xA, wobei xA := SUMi∈A 2^(−i−1)
|
||||||
|
|
||||||
print(REAL.from_rational(mpq(1,3)).as_str(10))
|
print(REAL.from_rational(mpq(1,3)).as_str(10))
|
||||||
print(REAL.from_rational(mpq(41,5)).as_str(10))
|
print(REAL.from_rational(mpq(41,5)).as_str(10))
|
||||||
|
Binary file not shown.
@ -3,6 +3,7 @@ from dedekint import REAL
|
|||||||
from gmpy2 import mpq
|
from gmpy2 import mpq
|
||||||
|
|
||||||
# Theorem 3.1 (4)
|
# Theorem 3.1 (4)
|
||||||
|
# Die Menge {q ∈ Q | q < x} ist eine entscheidbare Menge rationaler Zahlen (Dedekind’scher Schnitt)
|
||||||
|
|
||||||
def sqrt_two(q):
|
def sqrt_two(q):
|
||||||
if q <= 0 or q * q < 2: return True
|
if q <= 0 or q * q < 2: return True
|
||||||
|
BIN
chapter-03/interval/__pycache__/interval.cpython-313.pyc
Normal file
BIN
chapter-03/interval/__pycache__/interval.cpython-313.pyc
Normal file
Binary file not shown.
25
chapter-03/interval/interval.py
Normal file
25
chapter-03/interval/interval.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
class REAL: # nested.py
|
||||||
|
def __init__(self, l, u):
|
||||||
|
self.lower = l
|
||||||
|
self.upper = u
|
||||||
|
|
||||||
|
def asString(self, n):
|
||||||
|
l = self.lower(n)
|
||||||
|
u = self.upper(n)
|
||||||
|
return ("[ " + l.numerator.digits() + "/" + l.denominator.digits() +
|
||||||
|
", " + u.numerator.digits() + "/" + u.denominator.digits() + "]")
|
||||||
|
|
||||||
|
def __add__(self, y):
|
||||||
|
return REAL_add(self, y)
|
||||||
|
|
||||||
|
|
||||||
|
class REAL_add(REAL):
|
||||||
|
def __init__(self, x, y):
|
||||||
|
self.x = x
|
||||||
|
self.y = y
|
||||||
|
|
||||||
|
def lower(self, n):
|
||||||
|
return self.x.lower(n) + self.y.lower(n)
|
||||||
|
|
||||||
|
def upper(self, n):
|
||||||
|
return self.x.upper(n) + self.y.upper(n)
|
17
chapter-03/interval/main.py
Normal file
17
chapter-03/interval/main.py
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
from interval import REAL
|
||||||
|
from gmpy2 import mpq # rationale Zahlen
|
||||||
|
|
||||||
|
|
||||||
|
def lower_one(n):
|
||||||
|
return mpq(1,1)-mpq(1,n)
|
||||||
|
def upper_one(n):
|
||||||
|
return mpq(1,1)+mpq(1,n)
|
||||||
|
|
||||||
|
x = REAL(lower_one,upper_one); y = x + x
|
||||||
|
|
||||||
|
print ("x: "+x.asString(10))
|
||||||
|
print ("y: "+y.asString(10))
|
||||||
|
|
||||||
|
|
||||||
|
print ("x: "+x.asString(10000))
|
||||||
|
print ("y: "+y.asString(10000))
|
11
chapter-03/ratseq/binseq.py
Normal file
11
chapter-03/ratseq/binseq.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
from collections.abc import Callable
|
||||||
|
|
||||||
|
class REAL:
|
||||||
|
def __init__(self, f: Callable[[int], str]) -> None:
|
||||||
|
self.binseq = f
|
||||||
|
|
||||||
|
def as_string(self, w: int) -> str:
|
||||||
|
s = ""
|
||||||
|
for n in range(w):
|
||||||
|
s += self.binseq(n)
|
||||||
|
return s
|
66
chapter-03/ratseq/main.py
Normal file
66
chapter-03/ratseq/main.py
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
from gmpy2 import mpq # rationale Zahlen
|
||||||
|
from binseq import REAL as REAL_bs
|
||||||
|
from ratseq import REAL as REAL_ra
|
||||||
|
|
||||||
|
|
||||||
|
def ra_oneThird(p):
|
||||||
|
return mpq(1, 3)
|
||||||
|
|
||||||
|
|
||||||
|
x = REAL_ra(ra_oneThird)
|
||||||
|
print("x: " + x.asString(-50))
|
||||||
|
|
||||||
|
# Theorem 3.1 (3)
|
||||||
|
# Es gibt eine berechenbare Intervallschachtelung von Intervallen mit rationalen Endpunkten, die gegen x konvergiert
|
||||||
|
# d.h. es gibt berechen-
|
||||||
|
# bare Folgen (an)n∈N und (bn)n∈N
|
||||||
|
|
||||||
|
class REAL_ra_from_bs(REAL_ra): # Subklasse
|
||||||
|
def __init__(self, x):
|
||||||
|
self.x = x
|
||||||
|
|
||||||
|
def approx(self, p):
|
||||||
|
n = 0
|
||||||
|
q = mpq(0, 1)
|
||||||
|
v = mpq(1, 1)
|
||||||
|
while True:
|
||||||
|
c = self.x.binseq(n)
|
||||||
|
if c == "-": v = mpq(-1, 1)
|
||||||
|
if c == ".": break
|
||||||
|
q = 2 * q
|
||||||
|
if c == "1": q += v
|
||||||
|
n = n + 1
|
||||||
|
k = 1
|
||||||
|
while k <= -p:
|
||||||
|
v = v / 2
|
||||||
|
c = self.x.binseq(n + k)
|
||||||
|
if c == "1": q += v
|
||||||
|
k = k + 1
|
||||||
|
return q
|
||||||
|
|
||||||
|
|
||||||
|
def bs_one_third(n):
|
||||||
|
if n == 1: return "."
|
||||||
|
if n % 2 == 0: return "0"
|
||||||
|
return "1"
|
||||||
|
|
||||||
|
|
||||||
|
def bs_almost_one(n):
|
||||||
|
if n == 0: return "1"
|
||||||
|
if n == 1: return "."
|
||||||
|
if n < 40: return "0"
|
||||||
|
return "1"
|
||||||
|
|
||||||
|
|
||||||
|
# Create binseq
|
||||||
|
y1 = REAL_bs(bs_almost_one)
|
||||||
|
# Create rational approx of the created binseq
|
||||||
|
z1 = REAL_ra_from_bs(y1)
|
||||||
|
|
||||||
|
# Create binseq
|
||||||
|
y2 = REAL_bs(bs_one_third)
|
||||||
|
# Create rational approx of the created binseq
|
||||||
|
z2 = REAL_ra_from_bs(y2)
|
||||||
|
|
||||||
|
print("y1: " + y1.as_string(50) + "\nz1: " + z1.asString(-50))
|
||||||
|
print("y2: " + y2.as_string(50) + "\nz2: " + z2.asString(-50))
|
6
chapter-03/ratseq/ratseq.py
Normal file
6
chapter-03/ratseq/ratseq.py
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
class REAL:
|
||||||
|
def __init__(self, f): self.approx = f
|
||||||
|
|
||||||
|
def asString(self, p):
|
||||||
|
q = self.approx(p)
|
||||||
|
return q.numerator.digits() + "/" + q.denominator.digits()
|
Loading…
Reference in New Issue
Block a user