Цель работы: В работе исследуются условия образования стоячих волн в закреплённой с двух концов натянутой струне. Снимается зависимость частоты колебаний стоячих волн различных конфигураций от величины натяжения струны. Определяется скорость распространение поперечной волны в натянутой струне.
В работе используются: рейка со струной, звуковой генератор, постоянный магнит, разновесы.
In [1]:
import numpy as np
import scipy as ps
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
Известные величины
$D_{струны} = 0.3 мм$, $\rho_{100 см} = 568.4 мг$, $М_{подвес}=60,6 г$, $l = 50 см$, $F_2 = 9.856 Н$, $F_3 = 14.744 Н$, $F_4 = 19.529 Н$
Теоретические формулы
$\lambda_n = \frac{2l}{n}$, $f_n = \frac{u}{\lambda_n} = \frac{un}{2l}$, $u=\sqrt{\frac{T}{\rho_l}}$
Построение графиков
In [2]:
F_2 = 9.856
print('F_2 = {} Н'.format(F_2))
data2 = pd.read_excel('lab-1-5.xlsx', 'table-1')
data2.head(len(data2))
Out[2]:
In [3]:
F_3 = 14.744
print('F_3 = {} Н'.format(F_3))
data3 = pd.read_excel('lab-1-5.xlsx', 'table-2')
data3.head(len(data3))
Out[3]:
In [4]:
F_4 = 19.529
print('F_4 = {} Н'.format(F_4))
data4 = pd.read_excel('lab-1-5.xlsx', 'table-3')
data4.head(len(data4))
Out[4]:
In [5]:
grid = np.linspace(0, 5, 50)
x2 = np.array([1, 2, 3, 4, 5])
y2 = data2.values[:, 1]
x3 = np.array([1, 3, 5])
y3 = data3.values[:, 1]
x4 = np.array([1, 3, 5])
y4 = data4.values[:, 1]
dy2 = data2.values[:, 2]
dy3 = data3.values[:, 2]
dy4 = data4.values[:, 2]
In [6]:
k2, b2 = np.polyfit(x2, y2, deg=1)
k3, b3 = np.polyfit(x3, y3, deg=1)
k4, b4 = np.polyfit(x4, y4, deg=1)
In [7]:
print(k2, b2)
print(k3, b3)
print(k4, b4)
In [8]:
c = np.array([-1, 0, 1])
k2max, b2max = np.polyfit(x2, y2 + dy2 * [-1, -0.5, 0, 0.5, 1], deg=1)
k2min, b2min = np.polyfit(x2, y2 - dy2 * [-1, -0.5, 0, 0.5, 1], deg=1)
k3max, b3max = np.polyfit(x3, y3 + c * dy3, deg=1)
k3min, b3min = np.polyfit(x3, y3 - c * dy3, deg=1)
k4max, b4max = np.polyfit(x4, y4 + c * dy4, deg=1)
k4min, b4min = np.polyfit(x4, y4 - c * dy4, deg=1)
In [9]:
print(k2min, k3min, k4min)
print(k2max, k3max, k4max)
print(b2min, b3min, b4min)
print(b2max, b3max, b4max)
plt.figure(figsize=(17, 12)) plt.grid(linestyle='--')
plt.title('Зависимость $f_n$ от $n$', fontweight='bold', fontsize=20) plt.xlabel('$n$', fontsize=16) plt.ylabel('$f_n$, Гц', fontsize=16)
plt.plot(grid, k2 grid + b2, label='$F_2 =$ {} Н'.format(F_2), color='r') plt.plot(grid, k3 grid + b3, label='$F_3 =$ {} Н'.format(F_3), color='g') plt.plot(grid, k4 * grid + b4, label='$F_4 =$ {} Н'.format(F_4), color='b')
plt.errorbar(x2, y2, yerr=dy21.5, fmt='o', color='r') plt.errorbar(x3, y3, yerr=dy31.5, fmt='o', color='g') plt.errorbar(x4, y4, yerr=dy4*1.5, fmt='o', color='b')
plt.plot(grid, k2min grid + b2min, '--', alpha=0.5, color='r') plt.plot(grid, k2max grid + b2max, '--', alpha=0.5, color='r') plt.plot(grid, k3min grid + b3min, '--', alpha=0.5, color='g') plt.plot(grid, k3max grid + b3max, '--', alpha=0.5, color='g') plt.plot(grid, k4min grid + b4min, '--', alpha=0.5, color='b') plt.plot(grid, k4max grid + b4max, '--', alpha=0.5, color='b')
plt.legend(fontsize=16)
plt.show()
In [27]:
l = 0.5
F = np.array([F_2, F_3, F_4])
u = np.array([k2, k3, k4]) * 2 * l
du = (np.array([k2max, k3max, k4max]) - np.array([k2min, k3min, k4min])) / 2
print('Натяжения =', F)
print('Скорости =', u)
print(du)
In [28]:
k, b = np.polyfit(F, u * u, deg=1)
In [29]:
dF = np.array([0.005, 0.005, 0.005])
du2 = (u * u) * (2 * du / u)
print(du2)
In [30]:
kmax, bmax = np.polyfit(F - c * dF, u * u + c * du2/2, deg=1)
kmin, bmin = np.polyfit(F + c * dF, u * u - c * du2/2, deg=1)
print(kmax, kmin, bmax, bmin)
In [32]:
plt.figure(figsize=(12, 8))
plt.grid(linestyle='--')
grid2 = np.linspace(9, 20, 100)
plt.title('Зависимость $u^2$ от $F$', fontweight='bold', fontsize=20)
plt.ylabel('$u^2$, $\\frac{м^2}{с^2}$', fontsize=16)
plt.xlabel('$F$, $Н$', fontsize=16)
plt.plot(grid2, k * grid2 + b, color='b')
plt.errorbar(F, u * u, xerr=dF*20, yerr=du2, fmt='o', color='b')
plt.plot(grid2, kmax * grid2 + bmax, '--', color='b', alpha=0.5)
plt.plot(grid2, kmin * grid2 + bmin, '--', color='b', alpha=0.5)
plt.show()
In [33]:
dk = (kmax - kmin) / 2
print(dk)
In [34]:
rho = 1.0 / k
drho = rho * (dk / k)
print(rho, drho)
Таким образом, по измерениям получили $\rho_l = (532.4 \pm 66.5)$ мг, в то время как истинное значение составляет $568.4$ мг. Оно укладывается в заданный диапазон.
In [ ]: