Vba - приклади завдань - метод Рунге-Кутта для розв'язання диференціальних рівнянь

Рішення диференціальних рівнянь першого порядку
методом Рунге-Кутта.

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







Початкові дані:
  • межі інтервалу a і b;
  • крок інтегрування h;
  • початкове значення для вирішення y (a). що дозволяє правильно визначити константу ...
вводяться у відповідні комірки стовпчика «J».

І найголовніше (найвідповідальніша частина) необхідно без помилок ввести формулу в осередок «D3». Ця формула виходить із заданого рівняння і представляє функцію, яка є похідною від рішення. Її параметрами може бути як тільки х (тобто осередок «D4»), так і х спільно з у (тобто осередком «D5»). На малюнку показаний приклад введення формули для заданого рівняння ...
В осередку «D4» і «D5» вводити нічого не потрібно ... Туди значення буде підставляти макрос ...

Vba - приклади завдань - метод Рунге-Кутта для розв'язання диференціальних рівнянь







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

Графіки повинні бути побудовані на заданому Вами інтервалі (на малюнку від -0,4 до 1,25) ...
У кожній точці, де похідна (графік синього кольору) перетинає вісь 0У. функція рішення (червона) повинна мати екстремум (максимум чи мінімум) ...
Якщо терпінням Ви не відрізняється, то не ставте дуже довгий інтервал і / або дуже невеликий крок ...

Підказка:
Власне, процедура заповнення масивів х і у за методом Рунге-Кутта буде виглядати так:
(При цьому глобальна змінна 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 'збереження в масив для графіка

Щоб на діаграмі відобразилися розраховані графіки, проводиться заповнення відповідних діапазонів в шпальтах «AA-AB-AC» ... Можете порівняти результати з цим табличним варіантом.

Умови отримання коду? Показати?

Інші приклади на тему «РІШЕННЯ ДИФЕРЕНЦІЙНИХ РІВНЯНЬ»:







Схожі статті