Создание макросов
Автоматизация вычислений в Excel
Порядок работы
Метод Рунге-Кутта
Одним из наиболее распространенный методов решения дифференциального уравнения вида у'=f(x,y) на заданном отрезке [Xнач,Хкон] с начальными условиями является метод Рунге-Кутта. При решении данного уравнения точное значение y заменяют его приближенным значением:
Y i+1 =Y i +(К1+2К2+2К3 +К4 )/6, (6.29)
где значения коэффициентов на i-том шаге вычисляются по формулам:
К1 =h*f(xi,yi )
K2 =h*f(xi +0.5h,yi +0.5K1)
K3 =h*f(xi +0.5h,yi +0.5K2 ) (6.30)
K4 =h*f(xi+h,yi +K3 )
Здесь хi+1 =xi +h.
Значение шага при переходе к следующей точке можно изменять. Правильность выбора шага проверяется по формуле
Т=|(К2 - К 3)/(К1 - К2 )|, (6.31)
величина Т не должна превышать нескольких сотых.
Для проверки точности необходимо сделать второй проход с шагом h/2. Если разница между Yi+1 и Yi на k+1 и k проходах будет меньше требуемой точности, то процесс вычисления прекращается. Значение точности выбирают в интервале от 0.001 до 0.00001.
Грубую оценку погрешности метода проводят по формуле
Yk - Y(xi )= |Yk+1 - Yk |/15, (6.32)
где Y(xi ) - значение точного решения уравнения.
Для решения задачи необходимо вычислить значения коэффициентов К1 – К4 при начальных условиях, выбрать начальный шаг и вычислить значения Xi и Yi . Затем увеличить значение х и повторить процедуру вычисления.
Пример 6.9. Решить дифференциальное уравнение первого порядка
dY/dx=2(x2+Y) методом Рунге-Кутта при 0<=x<=1, Y(0)=1, шаг h=0.1.
Для этой задачи имеется аналитическое выражение
Y=1.5е2х – х2 – х – 0.5. (6.33)
Листинг 6.19. Решение дифференциального уравнения методом Рунге-Кутта | ||||||||
A | B | C | D | E | F | G | I | |
Исходные данные | ||||||||
h= | 0,1 | Xn= | 0,00000 | Y(0)= | 1,00000 | Контроль выбора шага | ||
Xn= | Yn= | K1= | K2= | K3= | K4= | Yn+1= | ||
0,00 | 1,0000 | 1,0000 | ||||||
0,10 | 1,2221 | 0,2 | 0,2205 | 0,2225 | 0,2465 | 1,2221 | 0,10 | |
0,20 | 1,4977 | 0,2464 | 0,2735 | 0,2762 | 0,3076 | 1,4977 | 0,10 | |
0,30 | 1,8431 | 0,3075 | 0,3428 | 0,3463 | 0,3868 | 1,8431 | 0,10 | |
0,40 | 2,27829 | 0,3866 | 0,4318 | 0,4363 | 0,4879 | 2,2783 | 0,10 | |
0,50 | 2,8274 | 0,4877 | 0,5449 | 0,5507 | 0,6158 | 2,8274 | 0,10 | |
0,60 | 3,5201 | 0,6155 | 0,6875 | 0,6947 | 0,7764 | 3,5201 | 0,10 | |
0,70 | 4,3927 | 0,7760 | 0,8661 | 0,8751 | 0,9771 | 4,3927 | 0,10 | |
0,80 | 5,4894 | 0,9765 | 1,0887 | 1,0999 | 1,2265 | 5,4894 | 0,10 | |
0,90 | 6,8643 | 1,2259 | 1,3650 | 1,3789 | 1,5357 | 6,8643 | 0,10 | |
1,00 | 8,5834 | 1,5348 | 1,7069 | 1,7245 | 1,9177 | 8,5834 | 0,10 |
- запишите исходные данные в строку 2;
- заполните шапку таблицы согласно Листингу 6.19;
- сгенерируйте в ячейки A4:A14 значения аргумента;
- запишите в ячейки В4 и G4 начальное значение Y(0);
- Запишите в ячейки расчетные формулы со ссылками на ячейки таблицы: коэффициент К1, ячейка C5 - $B$2*2*(A4^2+G4);
коэффициент К2, ячейка D5 - $B$2*2*((A4+$B$2/2)^2+(G4+C5/2));
коэффициент К3, ячейка E5 - $B$2*2*((A4+$B$2/2)^2+(G4+D5/2));
коэффициент К4, ячейка F5 - $B$2*2*((A4+$B$2)^2+(G4+E5));
Y, ячейка G5 - G4+(C5+2*D5+2*E5+F5)/6;
- в ячейку B5 запишите формулу: = G5;
- в ячейку I5 запишите формулу (6.31) для контроля выбора шага
(D5-E5)/(C5-D5).
- скопируйте формулы из ячеек В5:I5 в нижележащие ячейки
Сравнительные результаты вычисления дифференциального уравнения в примере 6.9 методом Рунге-Кутта и методом Эйлера и по аналитической формуле приведены на листинге 6.18. Из таблицы видно, что метод Рунге-Кутта позволяет получить результаты с высокой точностью во всем диапазоне изменения значения аргумента, чего нельзя сказать о методе Эйлера.
Листинг 6.20. Сравнение методов решения дифференциальных уравнений | |||
x | Метод Эйлера | Метод Рунге-Кутта | Точное решение |
0,0000 | 1,0000 | 1,0000 | 1,0000 |
0,1000 | 1,2000 | 1,2221 | 1,2221 |
0,2000 | 1,4420 | 1,4977 | 1,4977 |
0,3000 | 1,7384 | 1,8432 | 1,8432 |
0,4000 | 2,1041 | 2,2783 | 2,2783 |
0,5000 | 2,5569 | 2,8274 | 2,8274 |
0,6000 | 3,1183 | 3,5201 | 3,5202 |
0,7000 | 3,8139 | 4,3927 | 4,3928 |
0,8000 | 4,6747 | 5,4894 | 5,4895 |
0,9000 | 5,7377 | 6,8643 | 6,8645 |
1,0000 | 7,0472 | 8,5834 | 8,5836 |
Для автоматизации выполнения часто повторяющихся операций, например форматирования выделенных ячеек, оформления шапок таблиц и т. п. в Excel можно создавать макрокоманды – макросы.
Удобнее всего макросы создавать путем записи. Правда, при этом в макрос записываются все действия пользователя, в том числе и ошибочные. Однако, если алгоритм работы продуман, то проблем не возникает.