метод Рунге-Кутта для решения дифференциальных уравнений
макрос VBA Excel

Данный проект VBA позволяет решать дифференциальные уравнения первого порядка одним из численных методов, а именно, методом Рунге-Кутта.

Исходные данные:

  • границы интервала a и b;
  • шаг интегрирования h;
  • начальное значение для решения y(a), позволяющее правильно определить константу…
вводятся в соответствующие ячейки столбца «J».

И самое главное (самая ответственная часть) необходимо без ошибок ввести формулу в ячейку «D3». Эта формула получается из заданного уравнения и представляет функцию, являющуюся производной от решения. Ее параметрами может быть как только х (т.е. ячейка «D4»), так и х совместно с у (т.е. ячейкой «D5»). На рисунке показан пример ввода формулы для заданного уравнения…
В ячейки «D4» и «D5» вводить ничего не нужно… Туда значения будет подставлять макрос…


VBA EXCEL Решение дифференциальных уравнений методом Рунге-Кутты

После этого остается нажать кнопку «Решить» и … если Вы не забыли включить макросы, то увидите, быстро меняющиеся текущие значения в ячейках столбца «D», а после окончания цикла расчета значений у, произойдет изменение графиков.

Графики должны быть построены на заданном Вами интервале (на рисунке от -0,4 до 1,25)…
В каждой точке, где производная (график синего цвета) пересекает ось , функция решения(красная) должна иметь экстремум (максимум или минимум)…
Если терпением Вы не отличаетесь, то не задавайте очень длинный интервал и/или очень мелкий шаг…

Подсказка:
Собственно, процедура заполнения массивов х и у по методу Рунге-Кутта будет выглядеть так:
(при этом глобальная переменная D3formula предварительно инициализируется: D3formula = Range("D3").Formula)

Private Function func(x As Double, y As Double) As Double 'производная
Dim f As String
'функция вычисляется по формуле, введенной пользователем в ячейку D3 (гед D4 - это x, D5 - это y)
    f = Replace(D3formula, "D4", CStr(x))
    f = Replace(f, "D5", CStr(y))
    Range("D3").FormulaLocal = f
    func = Range("D3")
End Function

Sub MethodRungeKutta()
'вспомогательные переменные
Dim k1 As Double, k2 As Double, k3 As Double, k4 As Double
Dim i As Integer

For i = 1 To n 'нулевые значения уже есть

    x(i) = x(0) + i * h
    k1 = func(x(i - 1), y(i - 1))
    k2 = func(x(i - 1) + h / 2, y(i - 1) + k1 * h / 2)
    k3 = func(x(i - 1) + h / 2, y(i - 1) + k2 * h / 2)
    k4 = func(x(i), y(i - 1) + k3 * h)

    y(i) = y(i - 1) + h / 6 * (k1 + 2 * k2 + 2 * k3 + k4) 'значения вычисляются
        p(i - 1) = k1 'сохранение в массив для графика

Next i
End Sub

Чтобы на диаграмме отобразились рассчитанные графики, производится заполнение соответствующих диапазонов в столбцах «AA-AB-AC»… Можете сравнить результаты с этим табличным вариантом.

скачать xlsm-файл





Другие примеры на тему «РЕШЕНИЕ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ»:

Поделиться в соц сетях:




Если на этой странице не нашлось того, что Вы так искали...

         Не расстраивайтесь, не все потеряно... Смело щелкайте...

исходный код на заказ. orenstudent.ru Автоматизация документов MS Office. orenstudent.ru исходный код на заказ. orenstudent.ru Помогите найти и устранить ошибку в исходном коде программы. orenstudent.ru Skype-консультирование по программированию
Скайп-консультации

Акция !!!
исходный код комментарии цена минимальная


требуются
школьники!


и СТУДЕНТЫ!
Кому не плевать
на деньги!
Сайт помощи студентам по программированию и информатике

Program code