Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЧМ Лабораторная работа 4

.pdf
Скачиваний:
1
Добавлен:
17.06.2025
Размер:
757 Кб
Скачать
☆

Рисунок 2.5 – Результат для метода Рунге-Кутта 4-ой степени В таблице 2.3 представлены результаты работы всех методов.

11

Таблица 2.3 – Решение дифференциального уравнения

Точное решение

Решение методом

Решение методом

Решение методом

 

Эйлера

Рунге-Кутта 2-го

Рунге-Кутта 4-го

 

 

порядка

порядка

 

 

 

 

y(x0)

̃1̃(х0)

̃2̃(х0)

4̃(х0)

 

 

 

 

y1(0,1) = 2,086

y1(0,1) = 1,939

y1(0,1) = 2,0766

y1(0,1) = 2,0856

 

 

 

 

y2(0,2) = 3,513

y2(0,2) = 3,153

y2(0,2) = 3,491

y2(0,2) = 3,513

 

 

 

 

y3(0,3) = 5,367

y3(0,3) = 4,706

y3(0,3) = 5,325

y3(0,3) = 5,367

 

 

 

 

y4(0,4) = 7,752

y4(0,4) = 6,675

y4(0,4) = 7,684

y4(0,4) = 7,752

 

 

 

 

y5(0,5) = 10,798

y5(0,5) = 9,151

y5(0,5) = 10,692

y5(0,5) = 10,797

 

 

 

 

y6(0,6) = 14,662

y6(0,6) = 12,247

y6(0,6) = 14,506

y6(0,6) = 14,662

 

 

 

 

y7(0,7) = 19,54

y7(0,7) = 16,0993

y7(0,7) = 19,315

y7(0,7) = 19,539

 

 

 

 

y8(0,8) = 25,671

y8(0,8) = 20,872

y8(0,8) = 25,354

y8(0,8) = 25,67

 

 

 

 

y9(0,9) = 33,349

y9(0,9) = 26,762

y9(0,9) = 32,909

y9(0,9) = 33,348

 

 

 

 

y10(1) = 42,934

y10(1) = 34,0102

y10(1) = 42,333

y10(1) = 42,934

 

 

 

 

y11(1,1) = 54,871

y11(1,1) = 42,905

y11(1,1) = 54,056

y11(1,1) = 54,87

 

 

 

 

y12(1,2) = 69,7

y12(1,2) = 53,795

y12(1,2) = 68,607

y12(1,2) = 69,699

 

 

 

 

y13(1,3) = 88,0885

y13(1,3) = 67,1

y13(1,3) = 86,632

y13(1,3) = 88,0863

 

 

 

 

y14(1,4) = 110,851

y14(1,4) = 83,328

y14(1,4) = 108,923

y14(1,4) = 110,848

 

 

 

 

12

Продолжение таблицы 2.3.

Точное решение

Решение методом

Решение методом

Решение методом

 

Эйлера

Рунге-Кутта 2-го

Рунге-Кутта 4-го

 

 

порядка

порядка

 

 

 

 

y15(1,5) = 138,986

y15(1,5) = 103,089

y15(1,5) = 136,449

y15(1,5) = 138,982

 

 

 

 

y16(1,6) = 173,718

y16(1,6) = 127,118

y16(1,6) = 170,394

y16(1,6) = 173,712

 

 

 

 

y17(1,7) = 216,544

y17(1,7) = 156,301

y17(1,7) = 212,209

y17(1,7) = 216,536

 

 

 

 

y18(1,8) = 269,297

y18(1,8) = 191,705

y18(1,8) = 263,665

y18(1,8) = 269,288

 

 

 

 

y19(1,9) = 334,222

y19(1,9) = 234,613

y19(1,9) = 326,929

y19(1,9) = 334,21

 

 

 

 

y20(2) = 414,0649

y20(2) = 286,571

y20(2) = 404,650

y20(2) = 414,0489

 

 

 

 

Для каждого численного решения был построен совместный график полученной последовательности ̃(x̃i) и точного решения y(x). Графики представлены на рисунке 2.6, рисунке 2.7 и рисунке 2.8.

13

Рисунок 2.6 – Графики точек, полученных аналитически и методом Эйлера

Рисунок 2.7 – Графики точек, полученных аналитически и методом Рунге-Кутта 2-го порядка

14

Рисунок 2.8 – Графики точек, полученных аналитически и методом Рунге-Кутта 4-го порядка

Исходя из полученных данных можно сделать вывод, что метод РунгеКутта 4-го порядка является самым точным из всех трех представленных, так как рассчитанные им точки больше всего совпадают с теми, что были получены аналитическим решением.

15

Заключение

В ходе данной лабораторной работы были освоены вычислительные методы нахождения определенного интеграла, исследована точность вычислений при разном числе разбиений; освоена точность методов численного дифференцирования; изучены методы группы Рунге-Кутта для численного решения дифференциального уравнения первого порядка (задачи Коши).

16

Приложение А Численное интегрирование

double[] n = { 6, 40, 120, 400 }; int a = 5; int b = 7;

double h; double I = 0;

double sum, sum1, sum2;

void LeftRectangle(double n)

{

for (int j = 0; j < n; j++)

{

h = (b - a) / n; I = 0;

for (double x = a; x < b; x += h)

{

I += Math.Sin(0.25 * x) * Math.Sqrt(0.92 * x);

}

I *= h;

}

Console.WriteLine($"При n = {n} I = {I}");

}

void RightRectangle(double n)

{

for (int j = 0; j < n; j++)

{

h = (b - a) / n;

17

I = 0;

for (double x = a+h; x <= b; x += h)

{

I += Math.Sin(0.25 * x) * Math.Sqrt(0.92 * x);

}

I *= h;

}

Console.WriteLine($"При n = {n} I = {I}");

}

void Trapeze(double n)

{

for (int j = 0; j < n; j++)

{

h = (b - a) / n; sum = 0;

for (double x = a + h; x < b; x += h)

{

sum += Math.Sin(0.25 * x) * Math.Sqrt(0.92 * x);

}

I = h/2 * ((Math.Sin(0.25 * a) * Math.Sqrt(0.92 * a)) + (Math.Sin(0.25 * b) * Math.Sqrt(0.92 * b))) + h*sum;

}

Console.WriteLine($"При n = {n} I = {I}");

}

void Simpson(double n)

{

for (int j = 0; j < n; j++)

18

{

h = (b - a) / n;

I = sum1 = sum2 = 0;

for (int i = 0; i <= (n-1)/2; i++)

{

double x = a + (2 * i + 1) * h;

sum1 += Math.Sin(0.25 * x) * Math.Sqrt(0.92 * x);

}

for (int i = 0; i <= (n-2)/2; i++)

{

double x = a + 2 * i * h;

sum2 += Math.Sin(0.25 * x) * Math.Sqrt(0.92 * x);

}

I = h / 3 * ((Math.Sin(0.25 * a) * Math.Sqrt(0.92 * a)) + (Math.Sin(0.25 * b) * Math.Sqrt(0.92 * b)) + 4*sum1 + 2*sum2);

}

Console.WriteLine($"При n = {n} I = {I}");

}

Console.WriteLine("Метод левых прямоугольников"); for (int i = 0; i < n.Length; i++)

{

LeftRectangle(n[i]);

}

Console.WriteLine();

Console.WriteLine("Метод правых прямоугольников"); for (int i = 0; i < n.Length; i++)

19

{

RightRectangle(n[i]);

}

Console.WriteLine(); Console.WriteLine("Метод трапеций"); for (int i = 0; i < n.Length; i++)

{

Trapeze(n[i]);

}

Console.WriteLine(); Console.WriteLine("Метод Симпсона"); for (int i = 0; i < n.Length; i++)

{

Simpson(n[i]);

}

20