146 lines
3.4 KiB
Python
146 lines
3.4 KiB
Python
from matplotlib import pyplot as plt
|
|
import numpy as np
|
|
|
|
N = 16
|
|
|
|
Rs = np.arange(0,1600,100)
|
|
print(Rs)
|
|
|
|
Us = np.array([
|
|
0.1, 0.0, 1.7, 2.6, 3.4, 4.0, 4.6, 5.0, 5.4, 5.7, 6.0, 6.3, 6.5, 6.7, 6.9, 6.9
|
|
])
|
|
Is = np.array([
|
|
.015, .015, .012, .011, .010, .009, .008, .007, .007, .006, .006, .005, .005, .005, .005, .005
|
|
])
|
|
len(Us), len(Is)
|
|
|
|
plt.grid()
|
|
plt.scatter(Is, Us, marker="d", color="brown", s=6)
|
|
plt.xlabel("$I$")
|
|
plt.ylabel("U(I)")
|
|
|
|
coeffs_U = np.polyfit(Is, Us, 1) # линейная аппроксимация
|
|
approx_Is = np.linspace(min(Is), max(Is), 100)
|
|
approx_Us = np.polyval(coeffs_U, approx_Is)
|
|
plt.plot(approx_Is, approx_Us, '--', color="black", label="Аппроксимация")
|
|
plt.legend()
|
|
|
|
|
|
# plt.title("График зависимости U(I)")
|
|
# plt.show()
|
|
plt.savefig("1.png", bbox_inches="tight", dpi=300)
|
|
plt.show()
|
|
|
|
|
|
r, Epsilon = np.polyfit(Is, Us, 1)
|
|
r *= -1
|
|
print(f"r = {r}\tEpsilon = {Epsilon}")
|
|
|
|
P = Epsilon*Is
|
|
Pr = Us*Is
|
|
Ps = Is*Is*r
|
|
|
|
arr = (np.vstack((Us, Is, Pr, Ps, P))).T
|
|
np.set_printoptions(precision=3)
|
|
print(
|
|
arr
|
|
)
|
|
|
|
arr[:, 1:] *= 1000
|
|
for i in range(arr.shape[0]):
|
|
for j in range(arr.shape[1]):
|
|
print(f"[{arr[i, j]: .3f}]", end=', ')
|
|
print()
|
|
|
|
|
|
plt.scatter(Is, Pr, s=5, color="purple", marker="d", label="$P_R=P_R(I)$")
|
|
plt.scatter(Is, Ps, s=5, color="red", marker="s", label="$P_S=P_S(I)$")
|
|
plt.scatter(Is, P, s=5, color="blue", marker="o", label="$P=P(I)$")
|
|
plt.legend()
|
|
|
|
coeffs_Pr = np.polyfit(Is, Pr, 2) # квадратичная аппроксимация
|
|
approx_Pr = np.polyval(coeffs_Pr, approx_Is)
|
|
plt.plot(approx_Is, approx_Pr, '--', color="purple", alpha=0.3, label="Аппроксимация $P_R(I)$")
|
|
plt.legend()
|
|
|
|
|
|
# plt.title("Графики зависимости мощностей $P, P_R, P_S$ от силы тока")
|
|
plt.xlabel("$I$")
|
|
|
|
plt.grid()
|
|
# plt.show()
|
|
plt.savefig("2.png", bbox_inches="tight", dpi=300)
|
|
plt.show()
|
|
|
|
I_star = Epsilon/(2*r)
|
|
print(f"I* = {I_star:.4f}")
|
|
|
|
i = np.polyfit(Is, Pr, 2)
|
|
approx_Is = np.linspace(min(Is), max(Is))
|
|
approx = np.polyval(i, approx_Is)
|
|
|
|
|
|
plt.scatter(Is, Pr, s=5, color="purple", marker="d", label="$P_R=P_R(I)$")
|
|
plt.plot(approx_Is, approx, color="purple", alpha=.2, linestyle='--', label="Аппроксимация $P_r(I)$")
|
|
plt.grid()
|
|
|
|
|
|
plt.axvline([I_star], color="grey", linestyle='--', linewidth=1, alpha=.5, label="$X=I^*=0.0075$")
|
|
plt.legend()
|
|
|
|
# plt.show()
|
|
plt.savefig("3.png", bbox_inches="tight", dpi=300)
|
|
plt.show()
|
|
|
|
i = np.polyfit(Is, Pr, 2)
|
|
P_Rmax = np.polyval(i, I_star)
|
|
print(f"P_Rmax = {P_Rmax:.3f}")
|
|
|
|
plt.scatter(Is, Pr)
|
|
# plt.plot(np.linspace(Is[0], Is[-1]), )
|
|
|
|
R = P_Rmax / I_star**2
|
|
print(f"R = {R:.3f}")
|
|
|
|
plt.show()
|
|
|
|
eta = Pr / P
|
|
|
|
print(eta)
|
|
|
|
plt.scatter(Is, eta, s=5, color="blue", label="$\eta=\eta(I)$")
|
|
plt.xlabel("$I$")
|
|
plt.ylabel("$\eta (I)$")
|
|
# plt.title("Значения КПД")
|
|
|
|
plt.axhline([0.5], label="$\eta=0.5$", color="grey", linestyle="--", alpha=.5)
|
|
|
|
plt.xlim(0, 0.017)
|
|
# plt.ylim(0, 0.7)
|
|
|
|
approx_x = np.linspace(0, 0.0155)
|
|
i = np.polyfit(Is, eta, 1)
|
|
approx = np.polyval(i, approx_x)
|
|
|
|
plt.plot(approx_x, approx, color="blue", linestyle='--', alpha=.2, label="Аппроксимация $\eta=\eta (I)$")
|
|
|
|
|
|
plt.legend()
|
|
plt.grid()
|
|
|
|
# plt.show()
|
|
plt.savefig("4.png", bbox_inches="tight", dpi=300)
|
|
plt.show()
|
|
|
|
eta = np.reshape(eta, (16, 1))
|
|
eta
|
|
|
|
arr
|
|
|
|
arr = np.hstack((arr, eta))
|
|
|
|
for i in range(arr.shape[0]):
|
|
for j in range(arr.shape[1]):
|
|
print(f"[{arr[i, j]: .3f}]", end=', ')
|
|
print()
|