Решение дифференциальных уравнений первого порядка
методом Последовательных приближений (простых итераций).
Данный проект VBA позволяет решать дифференциальные уравнения первого порядка одним из численных методов, а именно, методом Последоватеьных приближений (или простых итераций).
Исходные данные:
- границы интервала a и b;
- шаг интегрирования h;
- начальное значение для решения y(a), позволяющее правильно определить константу…
И самое главное (самая ответственная часть) необходимо без ошибок ввести формулу в ячейку «D3».
Эта формула получается из заданного уравнения и представляет функцию, являющуюся производной от решения.
Ее параметрами может быть как только х (т.е. ячейка «D4»), так и х совместно с у
(т.е. ячейкой «D5»).
На рисунке показан пример ввода формулы для заданного уравнения…
В ячейки «D4» и «D5» вводить ничего не нужно… Туда значения будет подставлять макрос…
После этого остается нажать кнопку «Решить» и … если Вы не забыли включить макросы, то увидите, быстро меняющиеся текущие значения в ячейках столбца «D», а после окончания цикла расчета значений у, произойдет изменение графиков.
Графики должны быть построены на заданном Вами интервале (на рисунке от -0,4 до 1,25)…
В каждой точке, где производная (график синего цвета) пересекает ось 0У,
функция решения(красная) должна иметь экстремум (максимум или минимум)…
Если терпением Вы не отличаетесь, то не задавайте очень длинный интервал и/или очень мелкий шаг…
Подсказка:
Собственно, процедура заполнения массивов х и у по методу Последоватеьных приближений будет выглядеть так:
Sub MethodIterac_fromCell()
Dim couend As Boolean 'флаг окончания итераций
Dim cou As Integer 'счетчик итераций
Dim maxe As Double 'максимальное отклонение
Dim old As Double
Dim e As Double
Dim i As Integer
For i = 1 To n
x(i) = x(0) + i * h
Next i
Do While Not couend
couend = True
cou = cou + 1
maxe = 0
For i = 1 To n
old = y(i) 'значение на предыдущем шаге
Range("D4") = x(i - 1)
Range("D5") = y(i - 1)
y(i) = y(i - 1) + h * Range("D3") 'очередной элемент очередного приближения
e = Abs(old - y(i)) 'изменение
If maxe < e Then maxe = e 'максим.отклонение на данной итерации
Next i
If maxe > epsilon Then couend = False 'продолжение, на следующую итерацию
Loop
End Sub
Чтобы на диаграмме отобразились рассчитанные графики, производится заполнение соответствующих диапазонов в столбцах «AA-AB-AC»… Можете сравнить результаты с этим табличным вариантом.
Другие примеры на тему «РЕШЕНИЕ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ»:
Поделиться в соц сетях: