Введение


Хорошо известно применение струны в качестве источника звука в различных музыкальных инструментах. Однако струна хорошо себя зарекомендовала в качестве чувствительного элемента при измерении давлений и перемещений. В большинстве таких измерительных устройств струна работает в режиме ударного возбуждения по запросу.



Это продляет срок службы струны. Причём изготовление струны со специальными утолщениями на концах решает проблему её вытягивания из креплений.



Например, до настоящего времени в фундаментах Днепрогэса остались замурованными струнные датчики, замеряющие деформацию бетонных конструкций. Системы возбуждения струн в таких датчиках создают определённую начальную форму колебаний струны.

В современных системах контроля используются специальные струнные датчики, имеющие цифровой выход, которые крепятся на трубопроводную обвязку и передают в режиме реального времени значения деформации и температуру контролируемого оборудования. Полученные с датчиков данные по протоколу 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()   


Результат




Ввод начальных и граничных условий, а также расчёт реализованы на одной матрице, что упрощает их смену.

Выводы


Программная реализация численного решения уравнения колебаний струны совместно с публикациями [1,2,3] образуют единый комплекс учебных и исследовательских программ который я надеюсь будет способствовать популяризации свободно распространяемого языка программирования Python.
Спасибо всем за внимание!

Ссылки


  1. От двух камертонов из опытов Лиссажу к одной эллиптической уровнемерной трубке с шагом в столетия и всё на Python.
  2. Модель колебательного звена в режиме резонансных колебаний на Python.
  3. Модель колебательного звена с применением символьного и численного решений дифференциального уравнения на SymPy и NumPy.

Комментарии (0)