Vissza

4. labor

  1. Írjunk egy Python függvényt, amely meghatározza a következő számok első 500 tizedesjegyét: sqrt(2), sqrt(n), sqrt(5), (1 + sqrt(5))/2, pi, euler-szám, phi, ln(n), sin(n), cos(n), tg(n), ctg(n).
  2. Írjunk egy Python függvényt, amely meghatározza a következő számok lánctörtjegyeit: 1.4142135623730951, 2.23606797749979, 3.141592653589793, 2.718281828459045, 1.618033988749895. Példa
  3. Írjunk egy Python függvényt, amely meghatározza több, billentyűzetről beolvasott szám, k-ik gyökét, alkalmazva a következőket, ahol az iterációt addig kell végezni, amíg xn+1 nem egyenlő (vagy alig különbözik) xn-nel:
    x0 = 1
    xn+1 = (2·xn + nr/(xn·xn))/3
  4. Írjunk egy Python függvényt, amely meghatározza egy másodfokú egyenlet komplex gyökeit.
  5. Írjunk egy-egy Python függvényt, amely meghatározza a komplex számokkal végezhető alapműveletek eredményeit: összeadás, kivonás, szorzás, osztás, abszolutérték, hatványozás. A komplex számokat valós értékpárokként kezeljük.
  6. Írjunk egy Python függvényt, amely különböző c komplex számok esetében kirajzolja a képernyőre a Mandelbrot, és Julia fraktált. (segédlink) (Pygame). A Julia fraktál megjelenítését a következő c értékekre is végezzük el:
    c = complex (0.285, 0.013)
    c = complex (-0.295, -0.55)
    c = complex (-0.63, -0.407)
    c = complex (-0.624, 0.435)
    c = complex (-1, -0.25)
    c = complex (-1, -0)


Megoldott feladatok
1. A pi értékének meghatározása:
from decimal import Decimal, getcontext
def lanct_pi(p):
getcontext().prec = 50
temp = Decimal(0)
for x in range(p + 1, 0, -1):
temp = x*x / (2*x + 1 + temp)
return 4 / (1 + temp)

2. Egy szám négyzetgyöke:
from decimal import Decimal, getcontext
def my_sqrt(nr, precision):
getcontext().prec = precision
nr = Decimal(nr)
x0 = 1
while True:
xn = (x0 + nr/x0) / 2
if xn == x0: return xn
x0 = xn

3. A Mandelbrot fraktál grafikus megjelenítése:
from pygame.locals import *
import pygame

def mainMa():
width, height = 600, 600
screen = pygame.display.set_mode((width,height),DOUBLEBUF)
xaxis = width / 1.5
yaxis = height / 2
scale = 190
iterations = 40
for iy in range(height):
for ix in range(width):
c = complex((ix - xaxis)/scale, (iy - yaxis)/scale)
z = c
for i in range(iterations):
z = z**2 + c
if abs(z) > 2:
color = (255, 255, 255)
break #end for
if abs(z) <= 2:
color = (0, 0, 0)
screen.set_at((ix, iy), color)
screen.set_at((ix, height - iy), color) #end for, for

pygame.display.update()
while True:
event = pygame.event.poll()
if event.type == QUIT or event.type == KEYDOWN and event.key == K_ESCAPE:
break #end def

mainMa()
pygame.quit()

3. A Julia fraktál grafikus megjelenítése:
from pygame.locals import *
import pygame

def mainJu():
width, height = 600, 600
screen = pygame.display.set_mode((width,height),DOUBLEBUF)
xaxis = width / 2
yaxis = height / 2
scale = 170
iterations = 40
c = complex (0, -0.8)
for iy in range(height):
for ix in range(width):
z = complex((ix - xaxis)/scale, (iy - yaxis)/scale)
for i in range(iterations):
z = z**2 + c
if abs(z) > 2.0:
color = (i%16, i%16*8, i%16*16)
break
if abs(z) <= 2: color = (0, 0, 0)
screen.set_at((ix, iy), color)
screen.set_at((width, height), color) #end for, for

pygame.display.update()
while True:
event = pygame.event.poll()
if event.type == QUIT or event.type == KEYDOWN and event.key == K_ESCAPE:
break

mainJu()
pygame.quit()

A belső for-ban a színezés megváltoztatása végett cseréljük le a kódsort a következőkre:
if abs(z) > 2.0:
v = 765*i /40
if v > 510:
color = (255, 255, v%255)
elif v > 255:
color = (255, v%255, 0)
else:
color = (v%255, 0, 0)