-Поиск по дневнику

Поиск сообщений в rss_rss_hh_new

 -Подписка по e-mail

 

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 17.03.2011
Записей:
Комментариев:
Написано: 51


Численное решение уравнения свободных колебаний струны для специальных начальных условий на Python

Суббота, 09 Сентября 2017 г. 17:51 + в цитатник
Scorobey сегодня в 17:51 Разработка

Численное решение уравнения свободных колебаний струны для специальных начальных условий на Python



    Введение


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



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



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

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

    https://habrahabr.ru/post/337542/

    Метки:  

     

    Добавить комментарий:
    Текст комментария: смайлики

    Проверка орфографии: (найти ошибки)

    Прикрепить картинку:

     Переводить URL в ссылку
     Подписаться на комментарии
     Подписать картинку