In [98]:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import labwork

In [2]:
V = np.array([
    0.06,
    4.04,
    8.08,
    12.13,
    16.08,
    20.08,
    24.00,
    28.03,
    32.03,
    35.94,
    39.98,
    44.09,
    46.00,
    48.07,
    52.03,
    56.07,
    60.04,
    64.07,
    66.15,
    68.30, # WARNING
    72.21,
    75.99,
    79.65,
    18.01, # DOUBLE
    19.02,
    21.06,
    22.00,
    24.00,
    34.00,
    35.02,
    36.09,
    37.03, 
    38.06,
    39.04,
    61.11,
    62.04,
    64.09,
    65.,
    66.06,
    67.14,
    68.05,
    69.,
    70.,
    60.00,
    56.17,
])

I = np.array([
    0.,
    7.5,
    24.5,
    37,
    49,
    55,
    27.5,
    36.5,
    58.,
    77.,
    75.,
    64.,
    63.,
    64.,
    74.,
    87.,
    97.5,
    100.,
    100.,
    92.5,
    95.,
    100.,
    106., # AVG
    53.5, # DOUBLE
    54.5,
    50.5,
    45.5,
    25.5,
    65.0,
    70.0,
    74.0,
    75.5,
    75.,
    74.5,
    91.,
    92.,
    93.5,
    94.,
    94,
    94.,
    94.5,
    95.,
    96.,
    92.,
    83.,
])


print(V.shape)
print(I.shape)


(45,)
(45,)

In [3]:
l_VI = list(zip(V, I))
l_VI.sort()
VI = np.array(l_VI)
VI.sort()

In [4]:
for p in VI:
    print(list(p), ",")


[0.0, 0.059999999999999998] ,
[4.04, 7.5] ,
[8.0800000000000001, 24.5] ,
[12.130000000000001, 37.0] ,
[16.079999999999998, 49.0] ,
[18.010000000000002, 53.5] ,
[19.02, 54.5] ,
[20.079999999999998, 55.0] ,
[21.059999999999999, 50.5] ,
[22.0, 45.5] ,
[24.0, 25.5] ,
[24.0, 27.5] ,
[28.030000000000001, 36.5] ,
[32.030000000000001, 58.0] ,
[34.0, 65.0] ,
[35.020000000000003, 70.0] ,
[35.939999999999998, 77.0] ,
[36.090000000000003, 74.0] ,
[37.030000000000001, 75.5] ,
[38.060000000000002, 75.0] ,
[39.039999999999999, 74.5] ,
[39.979999999999997, 75.0] ,
[44.090000000000003, 64.0] ,
[46.0, 63.0] ,
[48.07, 64.0] ,
[52.030000000000001, 74.0] ,
[56.07, 87.0] ,
[56.170000000000002, 83.0] ,
[60.0, 92.0] ,
[60.039999999999999, 97.5] ,
[61.109999999999999, 91.0] ,
[62.039999999999999, 92.0] ,
[64.069999999999993, 100.0] ,
[64.090000000000003, 93.5] ,
[65.0, 94.0] ,
[66.060000000000002, 94.0] ,
[66.150000000000006, 100.0] ,
[67.140000000000001, 94.0] ,
[68.049999999999997, 94.5] ,
[68.299999999999997, 92.5] ,
[69.0, 95.0] ,
[70.0, 96.0] ,
[72.209999999999994, 95.0] ,
[75.989999999999995, 100.0] ,
[79.650000000000006, 106.0] ,

In [35]:
VI = np.array([
    [0.0, 0.059999999999999998] ,
    [4.04, 7.5] ,
    [8.0800000000000001, 24.5] ,
    [12.130000000000001, 37.0] ,
    [16.079999999999998, 49.0] ,
    [18.010000000000002, 53.5] ,
    [19.02, 54.5] ,
    [20.079999999999998, 55.0] ,
    [21.059999999999999, 50.5] ,
    [22.0, 45.5] ,
#    [24.0, 25.5] ,
    [24.0, 27.5] ,
    [28.030000000000001, 36.5] ,
    [32.030000000000001, 58.0] ,
    [34.0, 65.0] ,
    [35.020000000000003, 70.0] ,
#    [35.939999999999998, 77.0] ,
    [36.090000000000003, 74.0] ,
    [37.030000000000001, 75.5] ,
    [38.060000000000002, 75.0] ,
    [39.039999999999999, 74.5] ,
    [39.979999999999997, 75.0] ,
    [44.090000000000003, 64.0] ,
    [46.0, 63.0] ,
#    [48.07, 64.0] ,
    [52.030000000000001, 74.0] ,
    [56.07, 87.0] ,
#    [56.170000000000002, 83.0] ,
#    [60.0, 92.0] ,
    [60.039999999999999, 97.5] ,
#    [61.109999999999999, 91.0] ,
#    [62.039999999999999, 92.0] ,
    [64.069999999999993, 100.0] ,
#    [64.090000000000003, 93.5] ,
#    [65.0, 94.0] ,
#    [66.060000000000002, 94.0] ,
    [66.150000000000006, 100.0] ,
#    [67.140000000000001, 94.0] ,
#    [68.049999999999997, 94.5] ,
#    [68.299999999999997, 92.5] ,
#    [69.0, 95.0] ,
    [70.0, 96.0] ,
    [72.209999999999994, 95.0] ,
    [75.989999999999995, 100.0] ,
    [79.650000000000006, 106.0] ,
])

In [36]:
VIs = [None, None, None]
VIs[0] = VI
plt.figure(figsize=(14, 7))
plt.plot(VI[:, 0], VI[:, 1], marker="o")
plt.xlabel("V")
plt.ylabel("I")
plt.grid()
plt.show()



In [37]:
k = 69. / 60.
VI = np.array([
    [0.06, 0.],
    [4.01, 2.5],
    [8.00, 26.5],
    [12.01, 53.5],
    [16.11, 77.5],
    [19.03, 93],
    [20.01, 95.5],
    [20.51, 95.5],
    [20.94, 95.],
    [22.11, 88.5],
    [23.06, 75.5],
    [23.46, 66.],
    [24.07, 20.5],
    [26.09, 13.],
    [27.00, 16.5],
    [28.12, 25.],
    [32.14, 70.],
    [36.02, 106.],
#    [36.09, 91 * k],
    [37.04, 93* k],
    [38.01, 94 *k],
    [39.0, 92 * k],
    [40.16, 86.5 * k],
    [44.04, 71. * k],
    [48.03, 58.5 * k],
    [52.08, 64 * k], 
    [56.06, 79 * k],
    [60.07, 90.5 * k],
    [62.01, 91.5 * k],
    [63.02, 92. * k], 
    [63.54, 92. * k],
    [64.09, 92. * k],
    [65.05, 91 * k],
    [66.05, 90 * k],
    [66.94, 89.5 * k],
    [68.14, 88 * k],
])

In [38]:
VIs[1] = VI
plt.figure(figsize=(14, 7))
plt.plot(VI[:, 0], VI[:, 1], marker="o")
plt.xlabel("V")
plt.ylabel("I")
plt.grid()
plt.show()



In [39]:
VI = np.array([
    [0.07, 0.],
    [04.07, 0.0],
    [08.08, 12.5],
    [12.09, 44.],
    [16.08, 73.],
    [19.04, 92.],
    [20.10, 96.],
    [21.07, 97.5],
    [21.51, 97.5],
    [22.07, 96.],
    [22.40, 94.],
    [23.03, 90.],
    [24.04, 24.],
    [27.93, -5],
    [32.04, 32.5],
    [36.03, 78.8],
    [37.01, 82.],
    [38.00, 83.5],
    [38.5, 84.5],
    [38.95, 84.],
    [39.9, 81.],
    [40.03, 78.0],
    [44.05, 58.],
    [48.15, 36.],
    [52.05, 30.],
    [56.16, 43.5],
    [60.18, 50.],
    [61.01, 51.],
    [62.05, 54.],
    [63.09, 54.],
    [64.08, 53.5],
    [66.16, 50.5],
])

VIs[2] = VI
plt.figure(figsize=(14, 7))
plt.plot(VI[:, 0], VI[:, 1], marker="o")
plt.xlabel("V")
plt.ylabel("I")
plt.grid()
plt.show()



In [60]:
def locMax(X):
    res = []
    for i in range(1, len(X) - 1):
        if (X[i - 1] <= X[i]) and (X[i] > X[i + 1]):
            res.append(i)
    return res

In [61]:
locMax(VIs[0][:, 1]), locMax(VIs[1][:, 1]), locMax(VIs[2][:, 1])


Out[61]:
([7, 16, 19, 26], [7, 19, 30], [8, 18, 29])

In [75]:
lMs = ([7, 16, 26], [7, 19, 30], [8, 18, 29])

In [77]:
lMXYs[0]


Out[77]:
array([[ 21.07,  97.5 ],
       [ 37.01,  82.  ],
       [ 60.18,  50.  ]])

In [91]:
ans = []
plt.figure(figsize=(14, 7))
for i, VI in enumerate(VIs):
    ans_i = []
    plt.plot(VI[:, 0], VI[:, 1], label="{} volts".format(4 + i*2), marker=["o", "v", "*"][i])
    for lM in lMs[i]:
        if VI[lM, 1] == VI[lM - 1, 1]:
            x = VI[lM - 1: lM + 1, 0].mean()
        else:
            x = VI[lM, 0]
        plt.scatter(x, VI[lM, 1], color="red", s=100)
        ans_i.append(x)
    ans.append(ans_i)
ans = np.array(ans)
plt.xlabel("V [В]")
plt.ylabel("I (у.е.)")
plt.legend()
plt.grid()
plt.savefig("francl-hertz.png", dpi=300)
plt.show()



In [105]:
Ans = ans[:, 1] - ans[:, 0]
labwork.sciPrintR(Ans.mean(), 0.05) # Theory
labwork.sciPrintR(Ans.mean(), Ans.std() / Ans.mean() / (3 ** 0.5))  # est


17.3033333333 +- 0.865166666667 ( 5.0 %)
17.3033333333 +- 0.192373094292 ( 1.11176899032 %)

In [86]:
ans[:, 2] - ans[:, 1]


Out[86]:
array([ 28.08 ,  25.805,  24.07 ])

In [94]:
df = pd.DataFrame()
df["V"] = VIs[0][:, 0]
df["I"] = VIs[0][:, 1]
df


Out[94]:
V I
0 0.00 0.06
1 4.04 7.50
2 8.08 24.50
3 12.13 37.00
4 16.08 49.00
5 18.01 53.50
6 19.02 54.50
7 20.08 55.00
8 21.06 50.50
9 22.00 45.50
10 24.00 27.50
11 28.03 36.50
12 32.03 58.00
13 34.00 65.00
14 35.02 70.00
15 36.09 74.00
16 37.03 75.50
17 38.06 75.00
18 39.04 74.50
19 39.98 75.00
20 44.09 64.00
21 46.00 63.00
22 52.03 74.00
23 56.07 87.00
24 60.04 97.50
25 64.07 100.00
26 66.15 100.00
27 70.00 96.00
28 72.21 95.00
29 75.99 100.00
30 79.65 106.00

In [95]:
df = pd.DataFrame()
df["V"] = VIs[1][:, 0]
df["I"] = VIs[1][:, 1]
df


Out[95]:
V I
0 0.06 0.000
1 4.01 2.500
2 8.00 26.500
3 12.01 53.500
4 16.11 77.500
5 19.03 93.000
6 20.01 95.500
7 20.51 95.500
8 20.94 95.000
9 22.11 88.500
10 23.06 75.500
11 23.46 66.000
12 24.07 20.500
13 26.09 13.000
14 27.00 16.500
15 28.12 25.000
16 32.14 70.000
17 36.02 106.000
18 37.04 106.950
19 38.01 108.100
20 39.00 105.800
21 40.16 99.475
22 44.04 81.650
23 48.03 67.275
24 52.08 73.600
25 56.06 90.850
26 60.07 104.075
27 62.01 105.225
28 63.02 105.800
29 63.54 105.800
30 64.09 105.800
31 65.05 104.650
32 66.05 103.500
33 66.94 102.925
34 68.14 101.200

In [96]:
df = pd.DataFrame()
df["V"] = VIs[2][:, 0]
df["I"] = VIs[2][:, 1]
df


Out[96]:
V I
0 0.07 0.0
1 4.07 0.0
2 8.08 12.5
3 12.09 44.0
4 16.08 73.0
5 19.04 92.0
6 20.10 96.0
7 21.07 97.5
8 21.51 97.5
9 22.07 96.0
10 22.40 94.0
11 23.03 90.0
12 24.04 24.0
13 27.93 -5.0
14 32.04 32.5
15 36.03 78.8
16 37.01 82.0
17 38.00 83.5
18 38.50 84.5
19 38.95 84.0
20 39.90 81.0
21 40.03 78.0
22 44.05 58.0
23 48.15 36.0
24 52.05 30.0
25 56.16 43.5
26 60.18 50.0
27 61.01 51.0
28 62.05 54.0
29 63.09 54.0
30 64.08 53.5
31 66.16 50.5

In [ ]: