Задание на работу .
Решить задачу Коши на равномерной сетке. Решение найти в четырех узловых точках (шаг h1 равен [ b - a ] / 4). Найти решение в тех же узлах, ведя расчет с уменьшенным вдвое шагом. Вычислить погрешности приближений при расчете с шагом h2 = h1 / 2 Задачу решить с помощью системы MATHCAD: а) методом Эйлера; б) методом Эйлера - Коши; в) методом Рунге - Кутта.
Варианты лабораторных работ. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Вспомогательные материалы.
Пример Решить задачу Коши
на равномерной сетке с шагом h = 0.1. Решение найти в четырех узловых точках. С помощью программы найти решение в тех же узлах, ведя расчет с уменьшенным вдвое шагом. Вычислить погрешности приближений при расчете с шагом h = 0.05 Задачу решить: а) методом Эйлера; б) методом Эйлера - Коши; в) методом Рунге - Кутта.
Решение. Здесь f (x,y) = x + y; m = 4; a = 0; b = 0.4; h = (b - a) / m = 0.4 /4 = 0.1 а) Используя рекуррентные формулы x0 = 0; y0 = 1; xi = x i - 1 + 0.1; y i = y i - 1 + 0.1(x i - 1 + y i - 1) i = (1, 2, 3, 4), последовательно находим при i = 1: x1 = 0.1; y1 = 1 + 0.1(0 + 1) = 1.1; при i = 2; x2 = 0.2; y2 = 1.1 + 0.1(0.1 + 1.1) = 1.22; при i = 3; x3 = 0.3; y3 = 1.22 + 0.1(0.2 + 1.22) = 1.362; при i = 4; x4 = 0.4; y4 = 1.362 + 0.1(0.3 + 1.362) = 1.5282. С помощью программы находим решение при h = 0.05. Обозначив, d i = | y i (h) - y i (h/2) | сведем результаты вычислений в таблицу
б) Формулы (7) в нашем случае принимают вид
k1[ i - 1] = h (xi-1 + yi-1), k2[ i - 1 ] = h (xi-1 + h + yi-1 + k1[ i - 1]) xi =xi-1 + h, yi = yi-1 + (1/2)[ k1[i -1] + k2[i -1]] (i = 1, 2, 3, 4).
Полагая x 0 = 0, y 0 = 1, последовательно находим
при i = 1:
k1[ 0 ] =0.1(0 + 1) = 0.1; k2[ 0 ] = 0.1(0 + 0.1 + 1 + 0.1) = 0.12; x1= 0 + 0.1 = 0.1; y1 = 1 + (1/2)(0.1 + 0.12) = 1.11;
при i = 2:
k1[ 1 ] =0.1(0.1 + 1.11) = 0.121; k2[ 1 ] = 0.1(0.1+0.1+1.11+0.121) = 0.1431; x1= 0.1 + 0.1 = 0.2; y1 = 1.11+(1/2)(0.121+0.143) = 1.2425.
Далее получаем при i = 3: x 3 = 0.3; y 3 = 1.398465; При i = 4: x 4 = 0.4; y 4 = 1.581804. С помощью программы проводим вычисления с половинным шагом. Результаты заносим в таблицу, аналогичную таблице пункта а).
в) Из формул (8) получаем
k1[ i - 1] = h (xi-1 + yi-1), k2[ i - 1 ] = h (xi-1 + (1/2)h + yi-1 +(1/2) k1[ i - 1]) k3[ i - 1 ] = h (xi-1 + (1/2)h + yi-1 +(1/2) k2[ i - 1]) k4[ i - 1 ] = h (xi-1 + h + yi-1 + k3[ i - 1]) xi =xi-1 + h, yi = yi-1 + (1/6)[ k1[i -1] + 2k2[i -1] + 2k3[i -1] + k4[ i - 1 ]] для i = 1, 2, 3, 4.
Полагая x 0 = 0, y 0 = 1, последовательно находим
при i = 1:
k1[ 0 ] =0.1(0 + 1) = 0.1; k2[ 0 ] = 0.1(0 + 0.05 + 1 + 0.05) = 0.11; k3[ 0 ] = 0.1(0 + 0.05 + 1 + 0.055) = 0.1105 k4[ 0 ] = 0.1(0 + 0.1 + 1 + 0.1105) = 0.121050 x1= 0 + 0.1 = 0.1; y1 = 1 +(1/6)(0.1 + 2*0.11+2*0.1105+ +0.12105) = 1.110342; при i = 2:
k1[ 1 ] =0.1(0.1 + 1.110342) = 0.1210342; k2[ 1 ] = 0.1(0.1 + 0.05 + 1.110342 + 0.0605171) = 0.1326385; k3[ 1 ] = 0.1(0.1 + 0.05 + 1.110342 + 0.06604295) = 0.1326385; k4[ 1 ] = 0.1(0.1 + 0.1 + 1.110342 + 0.1326385) = 0.1442980. x2= 0.1 + 0.1 = 0.2; y2 = y1 +(1/6) [ k1[1] + 2 k2[1] +2 k3[1] + k4[1]] = 1.242805;
Далее получаем при i = 3 x3 = 0.3; y3 = 1.399717; i = 4 x4 = 0.4; y4 = 1.583648;
С помощью программы проводим вычисления с половинным шагом. Результаты заносим в таблицу.
2. Блок - схема численного решения задачи Коши для дифференциального уравнения первого порядка методами Эйлера, Эйлера - Коши и Рунге - Кутта
3. Пример программы для функции y / = x + y (пример приведен для удобства разработки программы на MATHCADе студентами, привыкшими работать в ПАСКАЛЕ)) program DifEquationsFirstOrder; {*******************************************************} uses Crt; const c:array[1..4] of real = (0,0.5,0.5,1); type coef = array[0..4] of real; var i,j,m:integer; a,b,h,x,y,y1,y2,y3:real; k0,k:coef; ch:char; {-----------------------SUBROUTINES---------------------} { Y = F (x,y) (f = x+y) } function f(x,y:real):real; BEGIN f:= x + y END; {-------------------------------------------------------} procedure Pausa; BEGIN WRITELN;WRITELN ('Для продолжения нажмите любую клавишу...'); REPEAT ch:= readkey UNTIL ch <> ''; END; {------------------ОСНОВНАЯ ПРОГРАММА-------------------} BEGIN ClrScr; WRITELN ('Введите значения концов отрезка [a,b]'); READ (a,b); WRITELN ('Введите начальное значение функции y0 при x=x0 '); READ (y); WRITELN (' Введите число значений функции на промежутке [a,b]'); READ (m); x:= a; h:= (b-a) / m; y1:= y; y2:= y; y3:=y; WRITELN (' Метод Эйлера Метод Э.-Коши Метод Р.-Кутта'); WRITELN ('x=',x:5:2,' y1=',y:9:6,' y2=',y2:9:6,' y3=',y3:9:6); FOR i:= 1 TO m DO BEGIN y1:= y1 + h*f(x,y1); FOR j:=1 TO 2 DO k0[j]:=h*f(x+2*c[j]*h, y2+2*c[j]*k0[j-1]); y2:= y2+(k0[1]+k0[2]) / 2; FOR j:=1 TO 4 DO k[j]:= h*f(x+c[j]*h, y3+ c[j]*k[j-1]); y3:= Y3+ (k[1]+2*k[2]+2*k[3]+k[4]) / 6; x:= x+h; WRITELN ('x=',x:5:2,' y1=',y1:9:6,' y2=',y2:9:6,' y3=',y3:9:6); END; PAUSA; END.
|