Введение
Хорошо известно применение струны в качестве источника звука в различных музыкальных инструментах. Однако струна хорошо себя зарекомендовала в качестве чувствительного элемента при измерении давлений и перемещений. В большинстве таких измерительных устройств струна работает в режиме ударного возбуждения по запросу.
Это продляет срок службы струны. Причём изготовление струны со специальными утолщениями на концах решает проблему её вытягивания из креплений.
Например, до настоящего времени в фундаментах Днепрогэса остались замурованными струнные датчики, замеряющие деформацию бетонных конструкций. Системы возбуждения струн в таких датчиках создают определённую начальную форму колебаний струны.
В современных системах контроля используются специальные струнные датчики, имеющие цифровой выход, которые крепятся на трубопроводную обвязку и передают в режиме реального времени значения деформации и температуру контролируемого оборудования. Полученные с датчиков данные по протоколу ModBus через интерфейс RS-485 передаются в систему MasterSCADA, которая следит одновременно за более чем 300 параметрами состояния трубопроводной обвязки.
Постановка задачи
Методом конечных разностей в явной форме решить дифференциальное уравнение свободных колебаний струны единичной длинны для послойной визуализации изгибной линии струны.
Особенности программной реализации на Python
В начале хочу немного напомнить разностную схему решения с целью облегчения комментирования последующего листинга.
Уравнение колебаний струны единичной длины с закрепленными концами::
Начальные условия:
Нулевые граничные условия:
Двумерная сетка:
Расчётная формула:
Для решения задачи нужно построить сетку из 11 узлов по x (i = 0, 1,… 10) и провести вычисления для 16 слоев по t (j = 0, 1,… 16). Вычисления выполнить с шагом h по х, равным 0.1 и шагом t по t, равным 0.05.
Для начальных условий f(x), например, для электромагнитной системы импульсного возбуждения f(x)=x**3-x.
Листинг программной реализации
#!/usr/bin/env python
# -*- coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
h=0.1#шаг по x
t=0.05#шаг по t
a=1#отношение начального натяжения T к массе единице длинны
l=(a*t/h)**2#расчётный коэффициент
n=11#сетка из 11 узлов по x (i = 0, 1, ... 10)
m=17#провести вычисления для 16 слоев по t (j = 0, 1, ... 16).
x=[h*i for i in range(0,n)]# координата x
U= np.zeros([m,n])# матрица для размещения расчётных значений
for j in range(0,m): #внесение условий
for i in range(0,n):
U[0,i]=x[i]*(x[i]**2-1)#начальные условия
U[1,i]=U[0,i]#начальные условия
U[j,0]=0#граничные условия
U[j,10]=0#граничные условия
for j in range(1,m-1):#внесение решения
for i in range(1,n-1):
U[j+1,i]=2*(1-l)*U[j,i]+l*(U[j,i+1]+U[j,i-1])-U[j-1,i]
y0=[];y5=[];y10=[];y16=[]#списки для вывода слоёв
for i in range(0,n):
y0.append(U[0,i])
y5.append(U[5,i])
y10.append(U[10,i])
y16.append(U[16,i])
plt.title(' Решение задачи на 0ом, 5-см, 10-см и 16-см \n временных слоях', size=12)
plt.plot(x, y0, label="слой -0")
plt.plot(x, y5, label="слой -5")
plt.plot(x, y10, label="слой -10")
plt.plot(x, y16, label="слой -16")
plt.legend()
plt.grid()
plt.show()
Результат
![](https://habrastorage.org/web/0f8/a14/b3d/0f8a14b3d5f643489e74ebbb062df225.png)
Ввод начальных и граничных условий, а также расчёт реализованы на одной матрице, что упрощает их смену.
Выводы
Программная реализация численного решения уравнения колебаний струны совместно с публикациями [1,2,3] образуют единый комплекс учебных и исследовательских программ который я надеюсь будет способствовать популяризации свободно распространяемого языка программирования Python.
Спасибо всем за внимание!
Ссылки
- От двух камертонов из опытов Лиссажу к одной эллиптической уровнемерной трубке с шагом в столетия и всё на Python.
- Модель колебательного звена в режиме резонансных колебаний на Python.
- Модель колебательного звена с применением символьного и численного решений дифференциального уравнения на SymPy и NumPy.