2023-24 2. Ara Sınav Çözümleri

2023-24 2. Ara Sınav Çözümleri#

22/12/2023

Dr. Emre S. Taşcı, emre.tasci@hacettepe.edu.tr
Fizik Mühendisliği Bölümü
Hacettepe Üniversitesi

import numpy as np
import matplotlib.pyplot as plt

1#

a,b ve c değişkenlerine [-5.5,5.5] aralığında rastgele (ondalık) değerler atayın ve bu değerleri ekrana yazdırın. Sonrasında,

\[x_{1,2} = \frac{-b\pm \sqrt{b^2-4ac}}{2a}\]

formülünden \(ax^2+bx+c=0\) denkleminin köklerini hesaplatıp ekrana yazdırın. Formülü kullanmadan önce \(b^2-4ac\ge0\) eşitsizliğinin sağlandığını kontrol edip, eğer sağlanmıyorsa kök bulma işlemine geçmeyip ekrana “Gerçek kök yoktur” yazdırıp, programı sonlandırın (yani kökleri hesaplattırmadan bitirin).

(a,b,c) = np.random.rand(3)*11-5.5
print(a,b,c)

Delta = b**2-4*a*c
if(Delta<0):
    print("Gerçek kök yoktur")
else:
    x1 = (-b + np.sqrt(Delta))/(2*a)
    x2 = (-b - np.sqrt(Delta))/(2*a)
    print(x1,x2)

#print(np.roots([a,b,c]))
-3.3413544773579575 2.9293000488538325 4.227900067251298
-0.7689159155269137 1.6455963362077088

2#

Değerleri [-10,10] aralığında değişen rastgele ondalıklı sayılardan (100 x 2)’lik bir ‘noktalar’ matrisi oluşturun. Bu matrisin her satırı bir noktanın x ve y koordinatlarına karşılık gelmektedir. Matristeki noktalardan orijine (0,0) 5 birimden daha yakın olanlarının indis numaralarını ‘yakinlar’ adındaki bir dizide biriktirin.

noktalar = np.random.rand(100,2)*20-10
# 'Uzun' yol
yakinlar = []

for i in np.arange(noktalar.shape[0]):
    if(np.sqrt(noktalar[i,0]**2 + noktalar[i,1]**2)<5):
        yakinlar.append(i)

print(yakinlar)
[0, 11, 17, 18, 24, 33, 35, 40, 51, 53, 56, 57, 70, 72, 74, 89, 93, 96]
# 'İnce' yol:
mesafeler = np.linalg.norm(noktalar,axis=1)
#print(mesafeler)

yakinlar = np.arange(noktalar.shape[0])[mesafeler<5]
print(yakinlar)
[ 0 11 17 18 24 33 35 40 51 53 56 57 70 72 74 89 93 96]

3#

\(\vec a = -2\hat\imath + 3\hat\jmath - \hat k\) ile \(\vec b = 3\hat\imath + 2\hat\jmath + 5\hat k\) vektörleri arasındaki açıyı hesaplayın.

a = np.array([-2,3,-1])
b = np.array([3,2,5])

aci = np.rad2deg(np.dot(a,b)/(np.linalg.norm(a)*np.linalg.norm(b)))
print(aci)
-12.42043540686238

4#

Taş-Kağıt-Makas oyunu, iki oyuncunun aynı anda bu üç seçenekten birini seçip söylemesiyle oynanır: taş, makası; makas, kağıdı; kağıt ise taşı yener.

Bilgisayara kendisiyle 50 kere taş-kağıt-makas oynattırın. Oyuncular her turda rastgele olarak bu üç seçenekten birini seçip söylesinler, kazandıkları durumda 1 puan, beraberlik veya kaybettikleri durumda 0 puan alsınlar.

a) Her bir oyunda ne söylediklerini ekrana yazdırın; sonrasında duruma göre “1. oyuncu kazandı”, “2. oyuncu kazandı” veya “Berabere kaldılar” yazılsın.
b) 50 turun sonunda iki oyuncunun da toplam skorunu yazdırın.

# 'Uzun' yol

skor_1 = 0
skor_2 = 0

tkm = ['taş','kağıt','makas']

for i in np.arange(50):
    oyuncu_1 = tkm[np.random.randint(0,3)]
    oyuncu_2 = tkm[np.random.randint(0,3)]
    print(i,". Tur: ",oyuncu_1," x ",oyuncu_2)
    if(oyuncu_1 == "taş"):
        if(oyuncu_2 == "kağıt"):
            skor_2 += 1
            print("2. oyuncu kazandı.")
        elif(oyuncu_2 == "makas"):
            skor_1 += 1
            print("1. oyuncu kazandı.")
        else:
            print("Berabere kaldılar.")
    elif(oyuncu_1 == "kağıt"):
        if(oyuncu_2 == "makas"):
            skor_2 += 1
            print("2. oyuncu kazandı.")
        elif(oyuncu_2 == "taş"):
            skor_1 += 1
            print("1. oyuncu kazandı.")
        else:
            print("Berabere kaldılar.")
    else:
        # 1. oyuncu makas
        if(oyuncu_2 == "taş"):
            skor_2 += 1
            print("2. oyuncu kazandı.")
        elif(oyuncu_2 == "kağıt"):
            skor_1 += 1
            print("1. oyuncu kazandı.")
        else:
            print("Berabere kaldılar.")
    print("----------------------")
print(skor_1," :: ",skor_2)
0 . Tur:  makas  x  makas
Berabere kaldılar.
----------------------
1 . Tur:  taş  x  makas
1. oyuncu kazandı.
----------------------
2 . Tur:  kağıt  x  makas
2. oyuncu kazandı.
----------------------
3 . Tur:  taş  x  taş
Berabere kaldılar.
----------------------
4 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
5 . Tur:  makas  x  kağıt
1. oyuncu kazandı.
----------------------
6 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
7 . Tur:  makas  x  kağıt
1. oyuncu kazandı.
----------------------
8 . Tur:  kağıt  x  makas
2. oyuncu kazandı.
----------------------
9 . Tur:  makas  x  kağıt
1. oyuncu kazandı.
----------------------
10 . Tur:  makas  x  kağıt
1. oyuncu kazandı.
----------------------
11 . Tur:  kağıt  x  makas
2. oyuncu kazandı.
----------------------
12 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
13 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
14 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
15 . Tur:  makas  x  makas
Berabere kaldılar.
----------------------
16 . Tur:  taş  x  taş
Berabere kaldılar.
----------------------
17 . Tur:  makas  x  makas
Berabere kaldılar.
----------------------
18 . Tur:  kağıt  x  taş
1. oyuncu kazandı.
----------------------
19 . Tur:  taş  x  kağıt
2. oyuncu kazandı.
----------------------
20 . Tur:  kağıt  x  makas
2. oyuncu kazandı.
----------------------
21 . Tur:  kağıt  x  kağıt
Berabere kaldılar.
----------------------
22 . Tur:  taş  x  makas
1. oyuncu kazandı.
----------------------
23 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
24 . Tur:  taş  x  taş
Berabere kaldılar.
----------------------
25 . Tur:  kağıt  x  taş
1. oyuncu kazandı.
----------------------
26 . Tur:  kağıt  x  makas
2. oyuncu kazandı.
----------------------
27 . Tur:  kağıt  x  taş
1. oyuncu kazandı.
----------------------
28 . Tur:  taş  x  taş
Berabere kaldılar.
----------------------
29 . Tur:  taş  x  makas
1. oyuncu kazandı.
----------------------
30 . Tur:  kağıt  x  taş
1. oyuncu kazandı.
----------------------
31 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
32 . Tur:  kağıt  x  makas
2. oyuncu kazandı.
----------------------
33 . Tur:  taş  x  makas
1. oyuncu kazandı.
----------------------
34 . Tur:  makas  x  makas
Berabere kaldılar.
----------------------
35 . Tur:  taş  x  makas
1. oyuncu kazandı.
----------------------
36 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
37 . Tur:  kağıt  x  makas
2. oyuncu kazandı.
----------------------
38 . Tur:  taş  x  taş
Berabere kaldılar.
----------------------
39 . Tur:  makas  x  kağıt
1. oyuncu kazandı.
----------------------
40 . Tur:  kağıt  x  taş
1. oyuncu kazandı.
----------------------
41 . Tur:  taş  x  makas
1. oyuncu kazandı.
----------------------
42 . Tur:  makas  x  kağıt
1. oyuncu kazandı.
----------------------
43 . Tur:  kağıt  x  makas
2. oyuncu kazandı.
----------------------
44 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
45 . Tur:  taş  x  taş
Berabere kaldılar.
----------------------
46 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
47 . Tur:  taş  x  taş
Berabere kaldılar.
----------------------
48 . Tur:  taş  x  taş
Berabere kaldılar.
----------------------
49 . Tur:  makas  x  makas
Berabere kaldılar.
----------------------
17  ::  19
# 'İnce' yol

skor_1 = 0
skor_2 = 0

tkm = ['taş','kağıt','makas']

OlasiOyunSkoru = np.array([[[0,0],[0,1],[1,0]], # t-t,t-k,t-m
                           [[1,0],[0,0],[0,1]], # k-t,k-k,k-m
                           [[0,1],[1,0],[0,0]]]) # m-t,m-k,m-m
OlasiOyunSonucu=np.array([[0,2,1],
                          [1,0,2],
                          [2,1,0]])
Sonuclar = ['Berabere kaldılar.','1. oyuncu kazandı.','2. oyuncu kazandı.']

for i in np.arange(50):
    oyuncu_1 = np.random.randint(0,3)
    oyuncu_2 = np.random.randint(0,3)
    skor_1 += OlasiOyunSkoru[oyuncu_1,oyuncu_2][0]
    skor_2 += OlasiOyunSkoru[oyuncu_1,oyuncu_2][1]
    print(i,". Tur: ",tkm[oyuncu_1]," x ",tkm[oyuncu_2])
    print(Sonuclar[OlasiOyunSonucu[oyuncu_1,oyuncu_2]])
    print("----------------------")
print(skor_1," :: ",skor_2)
    
0 . Tur:  makas  x  makas
Berabere kaldılar.
----------------------
1 . Tur:  kağıt  x  makas
2. oyuncu kazandı.
----------------------
2 . Tur:  taş  x  kağıt
2. oyuncu kazandı.
----------------------
3 . Tur:  kağıt  x  makas
2. oyuncu kazandı.
----------------------
4 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
5 . Tur:  makas  x  makas
Berabere kaldılar.
----------------------
6 . Tur:  kağıt  x  kağıt
Berabere kaldılar.
----------------------
7 . Tur:  makas  x  kağıt
1. oyuncu kazandı.
----------------------
8 . Tur:  kağıt  x  taş
1. oyuncu kazandı.
----------------------
9 . Tur:  kağıt  x  taş
1. oyuncu kazandı.
----------------------
10 . Tur:  kağıt  x  makas
2. oyuncu kazandı.
----------------------
11 . Tur:  taş  x  makas
1. oyuncu kazandı.
----------------------
12 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
13 . Tur:  makas  x  kağıt
1. oyuncu kazandı.
----------------------
14 . Tur:  taş  x  kağıt
2. oyuncu kazandı.
----------------------
15 . Tur:  kağıt  x  makas
2. oyuncu kazandı.
----------------------
16 . Tur:  taş  x  makas
1. oyuncu kazandı.
----------------------
17 . Tur:  makas  x  kağıt
1. oyuncu kazandı.
----------------------
18 . Tur:  taş  x  kağıt
2. oyuncu kazandı.
----------------------
19 . Tur:  taş  x  taş
Berabere kaldılar.
----------------------
20 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
21 . Tur:  makas  x  kağıt
1. oyuncu kazandı.
----------------------
22 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
23 . Tur:  taş  x  makas
1. oyuncu kazandı.
----------------------
24 . Tur:  taş  x  makas
1. oyuncu kazandı.
----------------------
25 . Tur:  makas  x  makas
Berabere kaldılar.
----------------------
26 . Tur:  taş  x  kağıt
2. oyuncu kazandı.
----------------------
27 . Tur:  makas  x  kağıt
1. oyuncu kazandı.
----------------------
28 . Tur:  makas  x  kağıt
1. oyuncu kazandı.
----------------------
29 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
30 . Tur:  makas  x  kağıt
1. oyuncu kazandı.
----------------------
31 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
32 . Tur:  kağıt  x  taş
1. oyuncu kazandı.
----------------------
33 . Tur:  taş  x  kağıt
2. oyuncu kazandı.
----------------------
34 . Tur:  makas  x  kağıt
1. oyuncu kazandı.
----------------------
35 . Tur:  makas  x  kağıt
1. oyuncu kazandı.
----------------------
36 . Tur:  taş  x  makas
1. oyuncu kazandı.
----------------------
37 . Tur:  taş  x  kağıt
2. oyuncu kazandı.
----------------------
38 . Tur:  taş  x  makas
1. oyuncu kazandı.
----------------------
39 . Tur:  taş  x  taş
Berabere kaldılar.
----------------------
40 . Tur:  taş  x  taş
Berabere kaldılar.
----------------------
41 . Tur:  taş  x  taş
Berabere kaldılar.
----------------------
42 . Tur:  taş  x  kağıt
2. oyuncu kazandı.
----------------------
43 . Tur:  kağıt  x  taş
1. oyuncu kazandı.
----------------------
44 . Tur:  taş  x  makas
1. oyuncu kazandı.
----------------------
45 . Tur:  taş  x  kağıt
2. oyuncu kazandı.
----------------------
46 . Tur:  kağıt  x  makas
2. oyuncu kazandı.
----------------------
47 . Tur:  makas  x  makas
Berabere kaldılar.
----------------------
48 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
49 . Tur:  makas  x  taş
2. oyuncu kazandı.
----------------------
20  ::  21

5#

M = 0.5 kg kütleli bir cisim, L = 1 m uzunluğunda bir ipe asılarak bir sarkaç oluşturulmuştur. Küçük açı yaklaşımıyla, \(\omega=\sqrt{g/L}\) açısal frekansı olmak üzere, hareket denklemi \(\theta(t) = \theta_{max} \cos(\omega t+\phi)\) olarak verilmektedir. Burada \(\theta_{max}\) salınımın genliği, \(\phi\) ise faz açısı olup, başlangıç koşullarından bulunmaktadır.

Başlangıç açısı \(\theta_0=-\tfrac{\pi}{6}\) rad ve ilk hızı \(\dot\theta_0 = 0.1\) rad/s olarak belirtilmiş sarkacın, \(\theta_{max}\) ve \(\phi\) parametrelerini bulup, açı-zaman ve hız zaman grafiklerini bir periyot boyunca 300 nokta kullanarak çizdiren kod yazın. ( g = 9.81 m/s2 alın ve aman dikkat edin: \(\theta_{max}\) başlangıç açısına eşit değil!)

M = 0.5 # kg
L = 1 # m
g = 9.81 # m/s^2

theta_0 = -np.pi/6 # rad
omega_0 = 0.1 # rad/s
omega = np.sqrt(g/L)
T = 2*np.pi/omega # Periyot
print(omega,T)
3.132091952673165 2.006066680710647

Açısal konum denkleminin zamana göre türevi bize açısal hız denklemini verir:

\[\begin{split}\begin{align*} \theta(t) &= \theta_{max} \cos(\omega t+\phi)\\ \dot\theta(t) &= -\omega\theta_{max} \sin(\omega t+\phi)\\ \end{align*}\end{split}\]

Başlangıç koşulları (\(t=0\)) uygulanırsa:

\[\begin{split}\begin{align*} \theta(0) &= \theta_{max} \cos(\phi)\quad&(1)\\ \dot\theta(0) &= -\omega\theta_{max} \sin(\phi)\quad&(2)\\ \end{align*}\end{split}\]

İkinci denklemi birinci denkleme böldüğümüzde:

\[\frac{-\omega\sin\phi}{\cos\phi}=\frac{\dot\theta(0)}{\theta(0)}\rightarrow \tan{\phi}=-\frac{1}{\omega}\frac{\dot\theta(0)}{\theta(0)}\]
phi = np.arctan(-omega_0/(omega*theta_0))
print(np.rad2deg(phi))
3.489410839946685

Artık elimizde \(\phi\) olduğundan, birinci veya ikinci denklemde yerine koyup \(\theta_{max}\)’ı da bulabiliriz:

theta_max = theta_0 / np.cos(phi)
print(theta_max)
-0.5245712971559564

normalde, genlikler pozitif olarak alınır, yani aslında arctan’ı uygulayıp \(\phi\)’yi 1. bölgede bulduğumuzda, aynı değerin 3. bölgede de \((\phi+\pi)\) bulunacağını göz önüne almalıyız ki, bu durumda \(\phi\) 183.489 derece olurdu ve buradan ilerleseydik:

phi_alternatif = np.arctan(-omega_0/(omega*theta_0)) + np.pi
print("phi_alternatif: ",np.rad2deg(phi_alternatif))

theta_max_alternatif = theta_0 / np.cos(phi_alternatif)
print("theta_max_alternatif: ",theta_max_alternatif)
phi_alternatif:  183.4894108399467
theta_max_alternatif:  0.5245712971559564

olarak bulunur, denklemimiz de fiziksel açıdan daha doğru olurdu. Ama sınav sorusu olduğundan, bu kadar ince eleyip sık dokumamış olmanız puan kaybettirmeyecektir ;)

Grafiğini çizdirirsek:

t = np.linspace(0,T,300)
theta_t = theta_max_alternatif*np.cos(omega*t+phi_alternatif)
theta_dot_t = -omega*theta_max_alternatif*np.sin(omega*t+phi_alternatif)

plt.plot(t,theta_t,"b-")
plt.xlabel("Zaman (s)")
plt.ylabel("Açısal konum (rad)")
plt.show()

plt.plot(t,theta_dot_t,"r-")
plt.xlabel("Zaman (s)")
plt.ylabel("Açısal hız (rad/s)")
plt.show()

plt.plot(t,np.rad2deg(theta_t),"b-")
plt.xlabel("Zaman (s)")
plt.ylabel("Açısal konum (derece)")
plt.show()
_images/7c03ddbde60af8497c8249e496f8702484263dc79aa2a0964e19eb003088f58d.png _images/57901001abbe3ca2f88296ba9d5521900b773bf50fd63d6d7182cfa72b5f572e.png _images/5286d1a6465205de13ad9b663b50cc11e330bb5d79db291d1185b1b517a282d9.png

İlk hızımız sıfırdan farklı olduğundan, sarkaç başlangıç açısından \((\tfrac{\pi}{6}=30^o)\) daha fazla açı tarar:

th_max = np.max(theta_t)
print(th_max,np.rad2deg(th_max))
0.5245529367689089 30.05466940805122