Punov/Analize.py
2022-09-25 17:45:59 +03:00

117 lines
4.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from contextlib import redirect_stderr
import numpy as np
from matplotlib import pyplot as plt
import csv
import scipy.constants as sp
def main():
print("Code is running.")
plot_UI(open_CSV("U(I).csv"))
plot_UIs(open_CSV("1,5mA.csv"), '[1,5mA]')
plot_UIs(open_CSV("3mA.csv"), '[3mA]')
plot_UIs(open_CSV("5mA.csv"), '[5mA]')
def open_CSV(filename):
with open('/home/dmitrii/Physics Labs/3.5.1/' + filename, newline="") as csvfile:
datareader = csv.reader(csvfile, delimiter=",", quotechar="|")
data = []
for row in datareader:
res = [float(i) for i in row]
data.append(res)
data = np.array(data)
return data
def plot_UI(data):
plt.scatter(data[:, 1][0:23], data[:, 0][0:23], color="g")
plt.scatter(data[:, 1][23:len(data)], data[:, 0]
[23:len(data)], color="orange")
plt.xticks(np.arange(min(data[:, 1])-0.25, max(data[:, 1])+0.25, 0.25))
plt.yticks(np.arange(min(data[:, 0])-1, max(data[:, 0])+1, 1))
A = np.vstack([data[:, 1][5:12], np.ones(len(data[:, 1][5:12]))]).T
alpha = np.dot((np.dot(np.linalg.inv(np.dot(A.T, A)), A.T)),
data[:, 0][5:12])
var = str(round(alpha[1]*10**3))
delta = str(abs(round(alpha[0]*10**3)))
print("Максимальное дифференциальное сопротивление разряда: {}".format(
var) + u" \u00B1 " + "{}, Ом".format(delta))
plt.plot(data[:, 1][5:12], alpha[0]*data[:, 1][5:12]+alpha[1], 'r')
plt.ylabel('U, В', fontsize=20)
plt.xlabel('I, мкА', fontsize=20)
plt.grid()
plt.savefig('U(I).png')
plt.show()
def centre(data):
xdiff = [data[n]-data[n-1] for n in range(1, len(data))]
return sum(xdiff)/2
def bfl(data):
line = np.polyfit(data[:, 0], data[:, 1], 1)
return line
def plot_UIs(data, num):
ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['left'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('zero')
plt.scatter(data[:, 0], data[:, 1], color="g",
marker="+", s=100) # Make a scatter plot
data = np.array(sorted(data, key=lambda x: x[0], reverse=True))
line1 = bfl(data[len(data)-5:len(data)])
line2 = bfl(data[0:5])
aprox = bfl(data[4:len(data)-5])
x1 = (line1[1]-aprox[1])/(aprox[0]-line1[0])
y1 = line1[0]*x1+line1[1]
plt.plot(x1, y1, marker='+', color='red')
x2 = (line2[1]-aprox[1])/(aprox[0]-line2[0])
y2 = line2[0]*x2+line2[1]
plt.plot(x2, y2, marker='+', color='red')
plt.plot((data[:, 0][len(data)-5:len(data)]), (data[:, 0]
[len(data)-5:len(data)]*line1[0]+line1[1]), color="orange")
plt.plot([x1, 0], [y1, line1[1]], linestyle="dashed", color="orange",
label='Ток насыщения: ' + str(round(line1[1], 2)) + ' ,А')
plt.plot(data[:, 0][0:5], data[:, 0]
[0:5]*line2[0]+line2[1], color="orange")
plt.plot([x2, 0], [y2, line2[1]], linestyle="dashed", color="orange",
label='Ток насыщения: ' + str(round(line2[1], 3)) + ' ,А')
S = sp.pi*0.2*10**-4*5.2*10**-4
me = 22*1.66*10**-27
Te = x2/2*11400
ni = line2[1]/0.4/sp.e/S/np.sqrt(2*sp.k*Te/me)/10**14
wp = np.sqrt(4*np.pi*ni*sp.e**2/me)*10**10
rde = np.sqrt(sp.k*Te/4/sp.pi/ni/sp.e**2)*10**-5
rd = np.sqrt(sp.k*300/4/sp.pi/ni/sp.e**2)
Nd = 4/3*sp.pi*rd**3*ni
print("-----Exp{}-----".format(num))
print("Ток насыщения: {},{}".format(
round(line1[1], 3), round(line2[1], 3)))
print("Te = {}".format(Te ))
print("Ni = {}".format(ni))
print("wp = {}".format(wp))
print("rde = {}".format(rde))
print("rd = {}".format(rd))
print("Nd = {}".format(Nd))
print("---------------")
plt.xlabel('U, В', fontsize=20)
plt.ylabel('I, мкА', fontsize=20)
plt.grid()
ax.legend()
plt.savefig(num + '.png')
plt.show()
return plt
def plotAll(plot1, plot2, plot3):
return True
if __name__ == "__main__":
main()