Создание макросов

Автоматизация вычислений в Excel

Порядок работы

Метод Рунге-Кутта

Одним из наиболее распространенный методов решения дифференциального уравнения вида у'=f(x,y) на заданном отрезке [Xнач,Хкон] с начальными условиями является метод Рунге-Кутта. При решении данного уравнения точное значение y заменяют его приближенным значением:

Y i+1 =Y i +(К1+2К2+2К34 )/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 – х – 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 можно создавать макрокоманды – макросы.

Удобнее всего макросы создавать путем записи. Правда, при этом в макрос записываются все действия пользователя, в том числе и ошибочные. Однако, если алгоритм работы продуман, то проблем не возникает.