Sorular çeşitli varyanslarla sorulmuş olup, sonrasında başka değişkenler/bileşenler de eklenmiştir. Tabii ki birden fazla çözüm şekli vardır, aşağıdakiler bir fikir vermesi açısından sunulmaktadır.
import numpy as np
import matplotlib.pyplot as plt
Soru 1. -20 ile 30 arasında tek sayılardan oluşan dizi üretin.
dizi = list(range(-19,30,2))
print(dizi)
[-19, -17, -15, -13, -11, -9, -7, -5, -3, -1, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29]
dizi = np.arange(-19,30,2)
print(dizi)
[-19 -17 -15 -13 -11 -9 -7 -5 -3 -1 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29]
dizi = np.arange(-20,30)
dizi = dizi[dizi%2 != 0]
print(dizi)
[-19 -17 -15 -13 -11 -9 -7 -5 -3 -1 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29]
# Sizlerden en çok gelen çözüm şekli
dizi = []
for i in range(-20,30):
if (i%2 != 0):
dizi.append(i)
print(dizi)
[-19, -17, -15, -13, -11, -9, -7, -5, -3, -1, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29]
Soru 2. $x^3-6x^2-x+30$ fonksiyonunun -3'ten büyük köklerinden birini hesaplayınız.
(Başka bir varyant: (-3,6) aralığındaki köklerinden birini hesaplayınız)
def f(x):
return x**3 - 6*x**2 - x +30
delta = 1E-3
x0 = -3
f_x0 = f(x0)
x1 = x0 + delta
f_x1 = f(x1)
# iki noktadaki fonksiyon degerleri
# ayni isaretliyse, arada kok olma garantisi yok,
# carpimlarinin isareti de + olmak zorunda,
# onu kontrol ediyoruz
while(f_x0 * f_x1 > 0):
x0 = x1
f_x0 = f_x1
x1 = x0 + delta
f_x1 = f(x1)
# while dongusu kirildigina gore
# aradigimiz kok [x0,x1] araliginda
kok = (x0+x1)/2
print("kok:",kok," Hata:",delta)
kok: -1.9995000000001102 Hata: 0.001
Soru 3: $x^3-6x^2-x+30$ fonksiyonunu $-3<x<6$ arasında çizdiriniz.
def f(x):
return x**3 - 6*x**2 - x +30
x = np.linspace(-3,6,100)
plt.plot(x,f(x),"-b")
plt.show()
Soru 4: 120'den sonraki ilk üç asal sayıyı hesaplatınız.
asallar = []
sayi = 120
while (len(asallar)<3):
flag_asal_mi = True
for bolenler in range(2,sayi):
if(sayi%bolenler == 0):
flag_asal_mi = False
break
if(flag_asal_mi == True):
asallar.append(sayi)
sayi = sayi + 1
print(asallar)
[127, 131, 137]
Soru 5: 8,10 başlangıç -> 8. Fibonacci sayısını hesaplatınız.
fibo = [8,10]
while(len(fibo)<8):
fibo.append(fibo[-1]+fibo[-2])
#print(fibo)
print(fibo[-1])
194
Soru 6: x ekseni etrafında 90 derece dönüş operatörü ile y ekseni etrafında 90 derece dönüş operatörünü tanımlayınız.
(Buradaki amaç, ezberi ne kadar kırabildiğinizi, soruyu ne kadar anlayabildiğinizi görmekti. Derste alışık olduğunuz üzere hep iki boyutta (ve dolayısıyla z-ekseni etrafında) dönüş tanımladık. Beklenen cevap üç boyuta çıkmanızdı.)
Sizlerden gelen cevaplarda "x-ekseni etrafındaki dönüşü" saat yönünün tersine; "y-ekseni etrafındaki dönüşü" de saat yönünde olarak aldınız. Biz de daha kolay sorularla devam ettik. 8)
# x ekseni etrafında döndürünce (1,0,0), (0,1,0) ve (0,0,1)
# noktalarının gideceği yerler, sırasıyla,
# (1,0,0), (0,0,1), (0,-1,0)
R90_x = np.array([[1,0,0],[0,0,-1],[0,1,0]])
print(R90_x)
# y ekseni etrafında döndürünce (1,0,0), (0,1,0) ve (0,0,1)
# noktalarının gideceği yerler, sırasıyla,
# (0,0,-1), (0,1,0), (1,0,0)
R90_y = np.array([[0,0,1],[0,1,0],[-1,0,0]])
print(R90_y)
[[ 1 0 0] [ 0 0 -1] [ 0 1 0]] [[ 0 0 1] [ 0 1 0] [-1 0 0]]
Soru 7: (1,0) vektörünün 30 derecelik dönüşlerini hesaplayınız.
vektor = np.array([1,0])
theta = np.deg2rad(30)
R90 = np.array([[np.cos(theta),-np.sin(theta)],
[np.sin(theta),np.cos(theta)]])
# 360 / 30 = 12
for i in range(12):
vektor = np.dot(R90,vektor)
print(vektor)
[0.8660254 0.5 ] [0.5 0.8660254] [2.77555756e-16 1.00000000e+00] [-0.5 0.8660254] [-0.8660254 0.5 ] [-1.00000000e+00 5.55111512e-16] [-0.8660254 -0.5 ] [-0.5 -0.8660254] [-8.32667268e-16 -1.00000000e+00] [ 0.5 -0.8660254] [ 0.8660254 -0.5 ] [ 1.00000000e+00 -1.11022302e-15]
Soru 8: (-1,1) arasında rasgele değerler alan 100x2'lik matris oluşturup grafiğini çizdirip, kaç noktasının orijine olan mesafesinin 0.5'ten küçük olduğunu hesaplayın.
noktalar = np.random.rand(100,2)*2-1
plt.plot(noktalar[:,0],noktalar[:,1],"ob")
plt.show()
mesafeler = np.linalg.norm(noktalar,axis=1)
filtre = mesafeler < 0.5
#print(noktalar[filtre])
print(len(noktalar[filtre]))
23
plt.plot(noktalar[:,0],noktalar[:,1],"ob")
plt.plot(noktalar[filtre][:,0],noktalar[filtre][:,1],"or")
plt.show()
Soru 9: 0.8'den büyük oluncaya kadar (0,1) aralığında rasgele sayılar oluşturun, 0.8'den büyüğe denk geldiğinde bir önceki attığı sayıyı da göstersin.
onceki = "yok"
sayi = np.random.rand()
#print(sayi)
while sayi < 0.8:
onceki = sayi
sayi = np.random.rand()
#print(sayi)
print("onceki:", onceki)
print("buyuk olan:", sayi)
onceki: 0.03533370956123327 buyuk olan: 0.8910535771259295