- •1. Приближенное решение нелинейных уравнений 5
- •Введение
- •1. Приближенное решение нелинейных уравнений
- •1.1. Графический способ отделения корней.
- •1.2. Аналитический способ отделения корней.
- •1.4.2. Блок-схема.
- •1.4.3. Программа.
- •1.3. Метод половинного деления.
- •1.3.1. Расчётная схема.
- •1.4. Метод хорд.
- •1.4.1. Расчетная схема метода.
- •1.5. Метод касательных.
- •1.5.1. Расчётная схема.
- •1.5.2. Блок-схема.
- •1.5.3. Программа.
- •1.6. Комбинированный метод.
- •1.6.1. Расчётная схема.
- •1.7. Метод итераций.
- •1.7.1. Расчётная схема.
- •1.7.2. Блок-схема.
- •1.7.3. Программа.
- •1.8. Дополнения к разделу.
- •1.8.1. Комментарии.
- •1.8.2. Алгоритмы и программы.
- •1.8.3. Пример работы программ.
- •2. Приближенное вычисление определенных интегралов.
- •2.1. Геометрическая интерпретация.
- •2.2. Метод прямоугольников.
- •2.2.1. Расчётная схема.
- •2.3. Метод трапеций.
- •2.3.1. Расчётная схема.
- •2.4. Метод Симпсона.
- •2.4.1. Расчётная схема.
- •2.5. Дополнения к разделу.
- •2.5.1. Комментарии.
- •2.5.2. Пример работы программ.
- •3. Решение систем линейных уравнений.
- •3.1. Метод простых итераций.
- •3.1.1. Расчётная схема.
- •3.1.2. Блок-схема.
- •3.1.3. Программа.
- •3.2. Метод Зейделя.
- •3.2.1. Расчётная схема.
- •3.2.2. Блок-схема.
- •3.2.3. Программа.
- •3.4. Метод Гаусса.
- •3.4.1. Расчётная схема.
- •3.4.2. Блок-схема.
- •3.4.3. Программа.
- •3.5. Дополнения к разделу.
- •3.5.1. Комментарии.
- •3.5.2. Алгоритмы и программы.
- •3.5.3. Пример работы программ.
- •4.3. Метод Рунге-Кутта (четвертого порядка).
- •4.3.1. Расчётная схема.
- •4.4. Дополнения к разделу.
- •4.4.1. Комментарии.
- •4.4.2. Пример работы программ.
- •5. Математическая обработка данных.
- •5.1. Интерполяция.
- •5.1.2. Квадратичная интерполяция.
- •5.1.2.1. Блок-схема.
- •5.1.2.2. Программа.
- •5.1.3. Интерполяция Лагранжа.
- •5.1.3.1. Расчётная схема.
- •5.2.1. Линейное приближение методом наименьших квадратов.
- •5.3. Дополнения к разделу.
- •5.3.1. Комментарии.
- •5.3.2. Алгоритмы и программы.
- •5.3.3. Пример работы программ.
- •6. Задания по численным методам.
6. Задания по численным методам.
Задание 1.
Приближенное решение нелинейных уравнений. Варианты заданий представлены в таблице 1.
Отделить вещественные корни алгебраического уравнения аналитическим способом, используя понятие критических точек и формулу определения промежутка существования вещественных корней.
Вычислить все корни уравнения с точностью =10-4 всеми указанными методами, используя программу.
Задание 2.
Приближенное вычисление определенных интегралов. Варианты заданий представлены в таблице 2.
Вычислить определенный интеграл с заданной точностью =10-4 всеми указанными методами, используя программу.
Задание 3.
Приближенное интегрирование дифференциальных уравнений. Варианты заданий представлены в таблице 3.
Найти решение дифференциального уравнения методами Эйлера и Рунге-Кутта четвертого порядка на отрезке [0; 1] с шагом h=0.1.
Задание 4.
Приближенное решение систем линейных уравнений. Варианты заданий представлены в таблице 4.
Решить систему методом простых итераций и методом итераций Зейделя с точностью =10-5, используя программу.
.
Задание 5.
Аппроксимация и интерполяция функций. Варианты заданий представлены в таблице 5.
Вычислить коэффициенты a, b, c методом наименьших квадратов для параболической зависимости вида y=ax2+bx+c.с использованием данных, указанных в варианте, и найти значения функции y для заданных аргументов x1 и x2.
Вычислить значения функции y для заданных аргументов x1 и x2, используя квадратичную интерполяцию.
Сравнить значения функции y для заданных аргументов x1 и x2, полученные по методу наименьших квадратов и методу квадратичной интерполяции.
.
Задание 1.
Таблица 1– Варианты заданий
Номер варианта |
Уравнение |
Метод |
|
|
x3 + 3x2 - 1 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
x3 - 3x2 + 2,5 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
2x3 + 9x2 - 10 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
x3 - 12x - 5 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
x3 - 3x2 + 1,5 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
2x3 + 9x2 - 4 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
2x3 - 3x2 - 12 x + 8 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
x3 - 6x - 8 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
x3 + 3x + 1 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
x3 - 3x2 + 6 x - 2 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных касательных |
|
|
x3 + 3x2 + 6 x - 1 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных половинного деления |
|
|
x3 + 0,1x2 + 0,4 x - 1,2 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных комбинированный хорд и касательных |
|
|
x3 - 3x2 + 6 x - 5 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных хорд |
|
|
2x3 - 3x2 - 12x - 5 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
x3 - 3x + 3 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных половинного деления |
|
|
x3 + 3x2 - 24x - 10 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
2x3 + 9x2 - 21 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
x3 + 3x2 - 2 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
x3 - 3x2 - 24x - 3 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
x3 + 3x2 - 3,5 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
x3 - 7x - 7 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
x3 + 2x -7 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
x3 - 2x2 - 6 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
x3 - 2x - 5 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
x3 - 2x2 + 3 x - 5 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
x3 + 10x - 10 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
|
|
2x3 + 4x2 - 1 = 0 |
Хорд, касательных, половинного деления, комбинированный хорд и касательных |
Задание 2.
Таблица 2 – Варианты заданий
Номер варианта |
Уравнение |
Метод |
1 |
2 |
3 |
1 |
|
прямоугольников |
2 |
|
трапеций |
3 |
|
Симпсона |
4 |
|
прямоугольников |
5 |
|
трапеций |
6 |
|
Симпсона |
7 |
|
прямоугольников |
8 |
|
трапеций |
9 |
|
Симпсона |
10 |
|
Прямоугольников |
11 |
|
Трапеций |
12 |
|
Симпсона |
13 |
|
прямоугольников |
Продолжение таблицы 2
1 |
2 |
3 |
14 |
|
трапеций |
15 |
|
Симпсона |
16 |
|
прямоугольников |
17 |
|
трапеций |
18 |
|
Симпсона |
19 |
|
прямоугольников |
20 |
|
трапеций |
21 |
|
Симпсона |
22 |
|
прямоугольников |
23 |
|
трапеций |
24 |
|
Симпсона |
25 |
|
Прямоугольников |
26 |
|
Трапеций |
27 |
|
Симпсона |
Задание 3.
Таблица 3 – Варианты заданий
Номер варианта |
Уравнение |
Начальное условие |
1 |
2 |
3 |
1. |
|
y(0) = 0,2 |
2. |
|
y(0) = 0,6 |
3. |
|
y(0) = 0,3 |
4. |
|
y(0) = 0,4 |
5. |
|
y(0) = 0,4 |
6. |
|
y(0) = 0,4 |
7. |
|
y(0) = 0,7 |
8. |
|
y(0) = 0,2 |
9. |
|
y(0) = 0,4 |
10. |
|
y(0) = 0,4 |
11. |
|
y(0) = 0 |
12. |
|
y(0)
=
|
13. |
|
y(0) = 0 |
14. |
|
y(0) = 0,8 |
15. |
|
y(0) = 1,2 |
16. |
|
y(0) = 1,4 |
17. |
|
y(0) = 0 |
18. |
|
y(0) = 0 |
19. |
|
y(0) = 0,1 |
20. |
|
y(0) = 0 |
21. |
|
y(0) = 1 |
22. |
|
y(0)
=
|
23. |
|
y(0) = 0 |
24. |
|
y(0) = 0 |
Продолжение таблицы 3.
1 |
2 |
3 |
25. |
|
y(0) = 0 |
26. |
|
y(0) = 0 |
27. |
|
y(0) = 0 |
Задание 4.
Таблица 4 – Варианты заданий
Номер варианта |
Система |
1 |
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Продолжение таблицы 5.8
1 |
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
|
|
13 |
|
|
14 |
|
|
Продолжение таблицы 4
1 |
2 |
|
15 |
|
|
16 |
|
|
17 |
|
|
18 |
|
|
19 |
|
|
20 |
|
|
21 |
|
|
22 |
|
|
Продолжение таблицы 5.8
1 |
2 |
|
23 |
|
|
24 |
|
|
25 |
|
|
26 |
|
|
27 |
|
|
Задание 5.
Таблица 5 – Варианты заданий
Номер варианта |
Таблица данных |
||||||||
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
X |
0,5 |
1,0 |
1,5 |
2,0 |
2,5 |
3,0 |
3,5 |
4,0 |
1 |
Y |
0,4 |
1,7 |
3,8 |
6,9 |
10,6 |
15,1 |
20,7 |
27,3 |
|
X1 = 1,235 X2 = 3,871 |
||||||||
|
X |
0,8 |
1,3 |
1,8 |
2,3 |
2,8 |
3,3 |
3,8 |
4,3 |
2 |
Y |
61,3 |
55,2 |
49,8 |
45,1 |
41,3 |
38,3 |
36,0 |
34,6 |
|
X1 = 2,529 X2 = 3,982 |
||||||||
|
X |
2,3 |
2,8 |
3,3 |
3,8 |
4,3 |
4,8 |
5,3 |
5,8 |
3 |
Y |
56,7 |
55,3 |
53,0 |
50,0 |
46,2 |
41,5 |
36,1 |
30,0 |
|
X1 = 2,721 X2 = 4,981 |
||||||||
Продолжение таблицы 5
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
X |
0,4 |
0,9 |
1,4 |
1,9 |
2,4 |
2,9 |
3,4 |
3,9 |
4 |
Y |
40,0 |
33,9 |
28,5 |
23,8 |
20,0 |
17,0 |
14,7 |
13,3 |
|
X1 = 1,581 X2 = 2,683 |
||||||||
|
X |
1,6 |
2,1 |
2,6 |
3,1 |
3,6 |
4,1 |
4,6 |
5,1 |
5 |
Y |
49,3 |
47,9 |
45,6 |
42,6 |
38,8 |
34,1 |
28,7 |
22,6 |
|
X1 = 2,871 X2 = 4,593 |
||||||||
|
X |
2,2 |
2,7 |
3,2 |
3,7 |
4,2 |
4,7 |
5,2 |
5,7 |
6 |
Y |
41,5 |
40,1 |
37,8 |
34,8 |
31,0 |
26,3 |
20,9 |
14,8 |
|
X1 = 2,923 X2 = 4,981 |
||||||||
|
X |
0,3 |
0,8 |
1,3 |
1,8 |
2,3 |
2,8 |
3,3 |
3,8 |
7 |
Y |
55,2 |
49,1 |
43,7 |
39,0 |
35,2 |
32,2 |
29,9 |
28,5 |
|
X1 = 1,923 X2 = 2,981 |
||||||||
|
X |
1,9 |
2,4 |
2,9 |
3,4 |
3,9 |
4,4 |
4,9 |
5,4 |
8 |
Y |
55,4 |
54,0 |
51,7 |
48,7 |
44,9 |
40,2 |
34,8 |
28,7 |
|
X1 = 2,371 X2 = 4,632 |
||||||||
|
X |
1,2 |
1,7 |
2,2 |
2,7 |
3,2 |
3,7 |
4,2 |
4,7 |
9 |
Y |
36,6 |
35,2 |
32,9 |
29,9 |
26,1 |
21,4 |
16,0 |
9,9 |
|
X1 = 2,921 X2 = 4,121 |
||||||||
|
X |
2,0 |
2,5 |
3,0 |
3,5 |
4,0 |
4,5 |
5,0 |
5,5 |
10 |
Y |
60,1 |
54,0 |
48,6 |
43,9 |
40,1 |
37,1 |
34,8 |
33,4 |
|
X1 = 2,783 X2 = 4,821 |
||||||||
|
X |
1,8 |
2,3 |
2,8 |
3,3 |
3,8 |
4,3 |
4,8 |
5,3 |
11 |
Y |
58,2 |
56,8 |
54,5 |
51,5 |
47,7 |
43,0 |
37,6 |
31,5 |
|
X1 = 2,892 X2 = 3,921 |
||||||||
|
X |
0,7 |
1,2 |
1,7 |
2,2 |
2,7 |
3,2 |
3,7 |
4,2 |
12 |
Y |
38,5 |
32,4 |
27,0 |
22,3 |
18,5 |
15,5 |
13,2 |
11,8 |
|
X1 = 2,547 X2 = 2,893 |
||||||||
|
X |
2,4 |
2,9 |
3,4 |
3,9 |
4,4 |
4,9 |
5,4 |
5,9 |
13 |
Y |
52,9 |
51,5 |
49,2 |
46,2 |
42,4 |
37,7 |
32,3 |
26,2 |
|
X1 = 4,721 X2 = 5,67 |
||||||||
|
X |
0,2 |
0,7 |
1,2 |
1,7 |
2,2 |
2,7 |
3,2 |
3,7 |
14 |
Y |
43,8 |
37,7 |
32,3 |
27,6 |
23,8 |
20,8 |
18,5 |
17,1 |
|
X1 = 2,371 X2 = 2,831 |
||||||||
|
X |
1,5 |
2,0 |
2,5 |
3,0 |
3,5 |
4,0 |
4,5 |
5,5 |
15 |
Y |
40,9 |
39,5 |
37,2 |
34,2 |
30,4 |
25,7 |
20,3 |
14,2 |
|
X1 = 3,281 X2 = 3,982 |
||||||||
|
X |
2,9 |
3,4 |
3,9 |
4,4 |
4,9 |
5,4 |
5,9 |
6,4 |
16 |
Y |
55,8 |
49,7 |
44,3 |
39,6 |
35,8 |
32,8 |
30,5 |
29,7 |
|
X1 = 3,72 X2 = 5,92 |
||||||||
Продолжение таблицы 5
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
|
X |
2,6 |
3,1 |
3,6 |
4,1 |
4,6 |
5,1 |
5,6 |
6,1 |
|
17 |
Y |
45,1 |
43,7 |
41,4 |
38,4 |
34,6 |
29,9 |
24,5 |
18,4 |
|
|
X1 = 3,581 X2 = 4,79 |
|||||||||
|
X |
0,5 |
1,0 |
1,5 |
2,0 |
2,5 |
3,0 |
3,5 |
4,0 |
|
18 |
Y |
41,6 |
35,5 |
30,1 |
25,4 |
21,6 |
18,6 |
16,3 |
14,9 |
|
|
X1 = 1,879 X2 = 2,37 |
|||||||||
|
X |
2,8 |
3,3 |
3,8 |
4,3 |
4,8 |
5,3 |
5,8 |
6,3 |
|
19 |
Y |
46,6 |
45,2 |
42,9 |
39,9 |
36,1 |
31,4 |
26,0 |
19,9 |
|
|
X1 = 3,92 X2 = 5,47 |
|||||||||
|
X |
2,1 |
2,6 |
3,1 |
3,6 |
4,1 |
4,6 |
5,1 |
5,6 |
|
20 |
Y |
50,1 |
44,0 |
38,6 |
33,9 |
30,1 |
27,1 |
24,8 |
23,4 |
|
|
X1 = 4,87 X2 = 2,69 |
|||||||||
|
X |
1,7 |
2,2 |
2,7 |
3,2 |
3,7 |
4,2 |
4,7 |
5,2 |
|
21 |
Y |
48,0 |
46,6 |
44,3 |
41,3 |
37,5 |
32,8 |
27,4 |
21,3 |
|
|
X1 = 3,87 X2 = 4,29 |
|||||||||
|
X |
1,0 |
1,5 |
2,0 |
2,5 |
3,0 |
3,5 |
4,0 |
4,5 |
|
22 |
Y |
48,7 |
42,6 |
37,2 |
32,5 |
28,7 |
25,7 |
23,4 |
22,0 |
|
|
X1 = 2,894 X2 = 4,2 |
|||||||||
|
X |
2,5 |
3,0 |
3,5 |
4,0 |
4,5 |
5,0 |
5,5 |
6,0 |
|
23 |
Y |
44,5 |
43,1 |
40,8 |
37,8 |
34,0 |
29,3 |
23,9 |
17,8 |
|
|
X1 = 3,4 X2 = 2,5 |
|||||||||
|
X |
1,4 |
1,9 |
2,4 |
2,9 |
3,4 |
3,9 |
4,4 |
4,9 |
|
24 |
Y |
52,2 |
46,1 |
40,7 |
36,0 |
32,2 |
29,2 |
26,9 |
25,5 |
|
|
X1 = 2,47 X2 = 3,72 |
|||||||||
|
X |
0,1 |
0,6 |
1,1 |
1,6 |
2,1 |
2,6 |
3,1 |
3,6 |
|
25 |
Y |
49,7 |
48,3 |
46,0 |
43,0 |
39,2 |
34,5 |
29,1 |
23,0 |
|
|
X1 = 1,72 X2 = 3,32 |
|||||||||
|
X |
2,7 |
3,2 |
3,7 |
4,2 |
4,7 |
5,2 |
5,7 |
6,2 |
|
26 |
Y |
47,0 |
40,9 |
35,5 |
30,8 |
27,0 |
24,0 |
21,7 |
20,3 |
|
|
X1 = 3,94 X2 = 5,47 |
|||||||||
|
X |
1,3 |
1,8 |
2,3 |
2,8 |
3,3 |
3,8 |
4,3 |
4,8 |
|
27 |
Y |
42,4 |
41,0 |
38,7 |
35,7 |
31,9 |
27,2 |
21,8 |
15,7 |
|
|
X1 = 2,21 X2 = 3,95 |
|||||||||
program nonlinear_equation;
var
z: array[1..10] of real;
k,c,j: integer;
e,a,b: real;
function f(x: real): real;
begin
f:=x*x*x-68*x*x/25-107*x/25+10.32;
end;
function psy(x,k: real): real;
begin
psy:=x-f(x)/k;
end;
function ff(x: extended): extended;
var
k,i: integer;
e,tmp: extended;
begin
e:=0.0000001;
k:=12;
tmp:=0;
for i:=-k to k do
begin
tmp:=tmp+i*f(x+(i)*e);
end;
ff:=(3/k/(k+1)/(2*k+1))*tmp/e;
end;
function fff(x: extended): extended;
var
k,i: integer;
e,tmp: extended;
begin
e:=0.000001;
k:=18;
tmp:=0;
for i:=-k to k do
begin
tmp:=tmp+i*ff(x+(i)*e);
end;
fff:=(3/k/(k+1)/(2*k+1))*tmp/e;
end;
procedure analytik(a,b,e: real);
var
x,y,y1: real;
p: boolean;
begin
p:=true;
x:=a;
k:=0;
while p=true do
begin
y:=f(x);
x:=x+e;
y1:=f(x);
if ((y<0)and(y1>0))or((y>0)and(y1<0)) then
begin
k:=k+1;
z[k]:=x-e;
k:=k+1;
z[k]:=x;
end;
if (x>b) then
p:=false;
end;
end;
function mdelen(t,tt,e: real): real;
var
x,a,b,f1,f2: real;
p: boolean;
begin
a:=t;
b:=tt;
p:=true;
x:=a;
f1:=f(x);
while p=true do
begin
x:=(a+b)/2;
f2:=f(x);
if (abs(f2)<=e) then
begin
p:=false;
end
else
begin
if (f1*f2>0) then
a:=x
else
b:=x;
end;
end;
mdelen:=x;
end;
function mhord(a,b,e: real): real;
var
x,x0,x1,ae: real;
p: boolean;
begin
p:=true;
x:=(a+b)/2;
if (ff(x)*fff(x)>0) then
begin
x0:=a;
ae:=b;
end
else
begin
x0:=b;
ae:=a;
end;
while p=true do
begin
x1:=x0-f(x0)*(ae-x0)/(f(ae)-f(x0));
if (abs(x1-x0)<e) then
p:=false
else
x0:=x1;
end;
mhord:=x1;
end;
function mkasat(a,b,e: real): real;
var
x,x0,x1: real;
p: boolean;
begin
p:=true;
x:=(a+b)/2;
if (ff(x)*fff(x)>0) then
x0:=b
else
x0:=a;
while p=true do
begin
x1:=x0-f(x0)/(ff(x0));
if (abs(x1-x0)<e) then
p:=false
else
x0:=x1;
end;
mkasat:=x1;
end;
function mcombo(t,tt,e: real): real;
var
x,a,b,a1,b1,r: real;
p: boolean;
begin
a:=t;
b:=tt;
p:=true;
while p=true do
begin
x:=(a+b)/2;
if (ff(x)*fff(x)>0) then
begin
a1:=a-f(a)*(b-a)/(f(b)-f(a));
b1:=b-f(b)/ff(b);
end
else
begin
a1:=a-f(a)/ff(a);
b1:=b-f(b)*(b-a)/(f(b)-f(a));
end;
r:=abs(b1-a1);
a:=a1;
b:=b1;
if (r<=2*e) then
p:=false;
end;
x:=0;
x:=(a+b)/2;
mcombo:=x;
end;
function maxff(a,b,e: real): real;
var
p: boolean;
tmp: real;
begin
tmp:=abs(ff(a));
p:=true;
while p=true do
begin
if abs(ff(a))>tmp then
tmp:=abs(ff(a));
a:=a+e;
if (a>b) then
p:=false;
end;
maxff:=tmp;
end;
function mitera(a,b,e: real): real;
var
x,x1,k: real;
p: boolean;
begin
Randomize;
p:=true;
while p=true do
begin
x:=(b-a)*random+a;
k:=maxff(a,b,e);
if (abs(k)>abs(ff(x))/2) then
p:=false;
end;
p:=true;
while p=true do
begin
x1:=psy(x,k);
if (abs(x1-x)<e) then
p:=false
else
x:=x1;
end;
mitera:=x1;
end;
begin
{точность}
e:=0.0001;
{примерный диапазон нахождения корней}
a:=(-1)*4;
b:=(-1)*a;
analytik(a,b,e);
if (k=0) then
begin
c:=1;
z[1]:=a;
z[2]:=b;
end
else
begin
c:=trunc(k/2);
end;
for j:=1 to c do
begin
a:=z[j*2-1];
b:=z[j*2];
writeln('____________________________________________________________________');
writeln('Metod deleniya, X= ',mdelen(a,b,e));
writeln('Metod kasatelnih, X= ',mkasat(a,b,e));
writeln('Metod combo, X= ',mcombo(a,b,e));
writeln('Metod hord, X= ',mhord(a,b,e));
writeln('Metod iteracii, X= ',mitera(a,b,e));
end;
end.
program integrirovanie;
var
a,b,e: real;
n: integer;
function f(x: real): real;
begin
f:=1/(sqrt(x*x+2.5));
end;
function msimpson(a,b,e: real): real;
var
x,s,h,r,i,i1: real;
begin
h:=(b-a)/2;
i1:=0;
r:=1;
while r>e do
begin
s:=(f(a)+f(b))/2;
x:=a+h;
repeat
s:=s+2*f(x)+f(x+h);
x:=x+2*h;
until x>(b-h);
i:=2*h*s/3;
r:=abs(i-i1)/15;
h:=h/2;
i1:=i;
end;
msimpson:=i;
end;
function mtrpezi(a,b: real; n: integer): real;
var
x,s,h: real;
i: integer;
begin
h:=(b-a)/n;
x:=a;
s:=(f(a)+f(b))/2;
for i:=2 to n do
begin
x:=x+h;
s:=s+f(x);
end;
mtrpezi:=h*s;
end;
function mprug(a,b: real; n: integer): real;
var
x,s,h: real;
i: integer;
begin
h:=(b-a)/n;
s:=0;
x:=a;
for i:=1 to n do
begin
s:=s+f(x);
x:=x+h;
end;
mprug:=h*s;
end;
function mymethod(a,b: real; n: integer): real;
var
x,s,h: real;
i: integer;
begin
h:=(b-a)/n;
s:=0;
for i:=1 to n-1 do
begin
s:=s+f(a+i*(b-a)/n);
end;
mymethod:=((f(a)+f(b))/2+s)*(b-a)/n;
end;
begin
{отрезок интегрирования}
a:=1.6;
b:=2.6;
{точность}
e:=0.0001;
n:=500;
writeln('_________________________________________');
writeln('Int pryamoug= ',mprug(a,b,n));
writeln('Int trapez= ',mtrpezi(a,b,n));
writeln('Int simpson= ',msimpson(a,b,e));
writeln('Int gauss= ',(b-a)/2*(f((a+b)/2-(b-a)/(2*sqrt(3)))+f((a+b)/2+(b-a)/(2*sqrt(3)))));
writeln('Int mymethod= ',mymethod(a,b,n));
end.
program diffur;
var
y,x,x1,n: real;
function f(x,y: real): real;
begin
f:=3*x+0.1*y*y;
end;
function eiler(x0,b,y0,n: real): real;
var
x,y: real;
begin
x:=x0;
y:=y0;
repeat
writeln('X=',x,' ','Y=',y);
x:=x+n;
y:=y+n*f(x,y);
until x>b;
end;
function kutt(x0,b,y0,n: real): real;
var
x,y,dy,k1,k2,k3,k4,x1,x2,y1,y2,y3: real;
begin
x:=x0;
y:=y0;
repeat
writeln('X=',x,' ','Y=',y);
k1:=n*f(x,y);
x1:=x+n/2;
y1:=y+k1/2;
k2:=n*f(x1,y1);
y2:=y+k2/2;
k3:=n*f(x1,y2);
y3:=y+k3;
x2:=x+n;
k4:=n*f(x2,y3);
dy:=(k1+2*k2+2*k3+k4)/6;
y:=y+dy;
x:=x+n;
until x>b;
end;
begin
{モ鶴 竟胙頏魵瑙・}
x:=0;
x1:=1;
{ヘ璞琿・鐱 ・粨}
y:=0.4;
{リ璢}
n:=0.1;
writeln('_________________________________________');
writeln('Method eilera: ');
eiler(x,x1,y,n);
writeln('Method Runge-kutta: ');
kutt(x,x1,y,n);
end.
program SLAU;
uses crt;
const
k=4;
e=0.00001;
var
matrix: array[1..k,1..Succ(k)] of real;
i,u,znak: integer;
r,opr,opredel: real;
smatrix: array[1..k] of real;
function a(x,y: integer): real;
const
p: array[1..k,1..k] of real=(
(5,0.8,-1.8,1),
(2,-5,1,-2),
(3,2,-8,2),
(2,-4,5,-12));
begin
a:=p[x,y];
end;
function b(i: integer): real;
const
p: array[1..k] of real=(0.4,-2,-2,6);
begin
b:=p[i];
end;
procedure iteracii;
var
s,y: real;
i,j: integer;
bool: boolean;
x: array[1..k] of real;
t: array[1..k] of real;
xn: array[1..k] of real;
begin
writeln('Method iteracii: ');
for i:=1 to k do
begin
x[i]:=b(i);
end;
repeat
for i:=1 to k do
begin
s:=0;
for j:=1 to k do
begin
s:=s+a(i,j)*x[j]
end;
xn[i]:=(b(i)-s)/a(i,i)+x[i];
end;
for i:=1 to k do
begin
t[i]:=abs(xn[i]-x[i]);
x[i]:=xn[i];
end;
bool:=true;
i:=1;
while (i<=k)and(bool=true) do
begin
if t[i]>=e then
bool:=false;
i:=i+1;
end
until bool=true;
for i:=1 to k do
begin
writeln('X',i,'=',xn[i]);
end;
end;
procedure zeydel;
var
s,y: real;
i,j: integer;
bool: boolean;
x: array[1..k] of real;
t: array[1..k] of real;
xn: array[1..k] of real;
begin
writeln('Method zeydela: ');
for i:=1 to k do
begin
x[i]:=b(i);
end;
repeat
for i:=1 to k do
begin
s:=0;
for j:=1 to k do
begin
s:=s+a(i,j)*x[j]
end;
xn[i]:=(b(i)-s)/a(i,i)+x[i];
t[i]:=abs(xn[i]-x[i]);
x[i]:=xn[i];
end;
bool:=true;
i:=1;
while (i<=k)and(bool=true) do
begin
if t[i]>=e then
bool:=false;
i:=i+1;
end
until bool=true;
for i:=1 to k do
begin
writeln('X',i,'=',x[i]);
end;
end;
{perestanovki liniy dlya gaussa}
procedure remax(t,q: integer);
var
i: integer;
tmp: real;
begin
znak:=znak*(-1);
for i:=1 to k+1 do
begin
tmp:=matrix[t,i];
matrix[t,i]:=matrix[q,i];
matrix[q,i]:=tmp;
end;
end;
{proverka kolonki na null}
procedure zeromtx(p: integer);
var
i,j,y: Integer;
begin
for i:=1 to k-1 do
begin
j:=i;
while (matrix[j,p]=0)and(matrix[j+1,p]<>0)and(j<>0) do
begin
y:=1;
while (matrix[y,p]=0)and(y<>p) do
begin
y:=y+1;
end;
if (y=p) then
remax(j,j+1);
j:=j-1;
end;
end;
end;
procedure drawmatrix(k: integer);
var
i,u: Integer;
begin
writeln('posle preobrazonania:');
for i:=1 to k do
begin
for u:=1 to k+1 do
begin
write(matrix[i,u]: 8: 3,' ');
end;
writeln;
end;
end;
procedure summer(u: integer);
var
i,j: Integer;
tmp,tmpz: real;
begin
tmpz:=matrix[u,u];
for j:=u+1 to k do
begin
tmp:=matrix[j,u];
opr:=opr*tmpz;
for i:=u to k+1 do
begin
matrix[j,i]:=(-1)*tmp*matrix[u,i]+tmpz*matrix[j,i]
end;
end;
end;
procedure fillin;
var
u,i: integer;
begin
for i:=1 to k+1 do
begin
for u:=1 to k do
begin
if i<>k+1 then
matrix[u,i]:=a(u,i)
else
matrix[u,i]:=b(u);
end;
end;
end;
{perestanovki kolonok}
procedure recolumn(t: integer);
var
u,i: integer;
begin
fillin;
for u:=1 to k do
begin
if t<>1 then
matrix[u,t-1]:=a(u,t-1);
matrix[u,t]:=b(u);
end;
end;
procedure triangle;
var
u: integer;
begin
opr:=1;
znak:=1;
for u:=1 to k-1 do
begin
zeromtx(u);
summer(u);
end;
end;
procedure determinant;
var
u,i: integer;
begin
r:=1;
for u:=1 to k do
begin
r:=r*matrix[u,u];
end;
end;
procedure kramer;
var
i: integer;
begin
fillin;
triangle;
writeln('Method Kramer: ');
determinant;
opredel:=r/opr*znak;
if (opredel<>0) then
begin
for i:=1 to k do
begin
recolumn(i);
triangle;
determinant;
if (r<>0) then
writeln('X',i,'= ',r/(opr*opredel)*znak)
else
writeln('X',i,'= ','UnKnoWn');
end;
end
else
writeln('Systema imeet mnojestvo resheniy');
end;
procedure solution;
var
u,i: integer;
begin
if (matrix[k,k]<>0) then
begin
smatrix[k]:=matrix[k,k+1]/matrix[k,k];
writeln('X',k,'= ',smatrix[k]);
for u:=k-1 downto 1 do
begin
i:=u;
while i<>k+1 do
begin
smatrix[u]:=smatrix[u]+smatrix[i]*matrix[u,i];
i:=i+1;
end;
smatrix[u]:=(matrix[u,k+1]-smatrix[u])/matrix[u,u];
writeln('X',u,'= ',smatrix[u]);
end;
end
else
writeln('Systema imeet mnojestvo resheniy');
end;
procedure gauss;
begin
fillin;
writeln('Method Gaussa:');
{Pivedenie k treugolnomu vidu}
triangle;
{korni uravnenia}
solution;
end;
begin
writeln('----------------SLAU------------------');
gauss;
kramer;
iteracii;
zeydel;
end.
program interpolation;
const
k=4;
count=4;
x: array[1..k] of real=(1,2,3,5);
y: array[1..k] of real=(9,26,58,194);
var
t,e: real;
matrix: array[1..count,1..succ(count)] of real;
smatrix: array[1..count] of real;
function xst(x: double; i: integer): double;
var
tmp: double;
begin
tmp:=exp(i*ln(abs(x)));
if ((i mod 2<>0)and(x<0)) then
tmp:=tmp*(-1);
xst:=tmp;
end;
procedure remax(t,q: integer);
var
i: integer;
tmp: real;
begin
for i:=1 to k+1 do
begin
tmp:=matrix[t,i];
matrix[t,i]:=matrix[q,i];
matrix[q,i]:=tmp;
end;
end;
procedure zeromtx(p: integer);
var
i,j,y: Integer;
begin
for i:=1 to count-1 do
begin
j:=i;
while (matrix[j,p]=0)and(matrix[j+1,p]<>0)and(j<>0) do
begin
y:=1;
while (matrix[y,p]=0)and(y<>p) do
begin
y:=y+1;
end;
if (y=p) then
remax(j,j+1);
j:=j-1;
end;
end;
end;
procedure summer(u: integer);
var
i,j: Integer;
tmp,tmpz: real;
begin
tmpz:=matrix[u,u];
for j:=u+1 to count do
begin
tmp:=matrix[j,u];
for i:=u to count+1 do
begin
matrix[j,i]:=(-1)*tmp*matrix[u,i]+tmpz*matrix[j,i]
end;
end;
end;
procedure triangle;
var
u: integer;
begin
for u:=1 to count-1 do
begin
zeromtx(u);
summer(u);
end;
end;
procedure solution;
var
u,i: integer;
begin
if (matrix[count,count]<>0) then
begin
smatrix[count]:=matrix[count,count+1]/matrix[count,count];
for u:=count-1 downto 1 do
begin
i:=u;
while i<>count+1 do
begin
smatrix[u]:=smatrix[u]+smatrix[i]*matrix[u,i];
i:=i+1;
end;
smatrix[u]:=(matrix[u,count+1]-smatrix[u])/matrix[u,u];
end;
end
else
writeln('Systema imeet mnojestvo resheniy');
end;
procedure gauss;
begin
triangle;
solution;
end;
procedure minquad(v: real);
var
s: array[1..4] of real;
p: array[1..3] of real;
i,j: integer;
a,b,c,d,w1,w2,w3,a1,a2,a3,a4: real;
begin
for i:=1 to 4 do
begin
s[i]:=0;
for j:=1 to k do
begin
s[i]:=s[i]+xst(x[j],i);
end;
end;
for i:=1 to 3 do
begin
p[i]:=0;
for j:=1 to k do
begin
p[i]:=p[i]+xst(x[j],i-1)*y[j]
end;
end;
a1:=s[3]*s[2]-s[4]*s[1];
a2:=s[3]*s[2]-s[1]*s[4];
a3:=s[3]*s[3]-s[4]*s[2];
a4:=s[2]*s[2]-k*s[4];
d:=(a3)*(a4)-(a1)*(a2);
c:=s[2]*p[3]-s[4]*p[1];
b:=s[3]*p[3]-s[4]*p[2];
w3:=((a3)*c-(a2)*b)/d;
w2:=((a4)*b-(a1)*c)/d;
w1:=(p[3]-s[3]*w2-s[2]*w3)/s[4];
writeln('X=',v,' Y=',v*v*w1+v*w2+w3);
end;
procedure square(v: real);
var
a: array[1..3,1..3] of real;
b: array[1..3] of real;
i,j,kk: integer;
aa,d,c,p,r,t,m1,m2,m3,m4: real;
tmp: string;
bool: boolean;
begin
i:=1;
bool:=true;
while (i<k+1)and(bool=true) do
begin
if v<x[i] then
begin
kk:=i-2;
bool:=false;
end;
i:=i+1;
end;
if bool=false then
begin
for j:=1 to 3 do
begin
a[j,1]:=sqr(x[kk]);
a[j,2]:=x[kk];
a[j,3]:=1;
b[j]:=y[kk];
kk:=kk+1;
end;
m1:=a[2,1]*a[1,3]-a[1,1]*a[2,3];
m2:=a[1,2]*a[3,1]-a[3,2]*a[1,1];
m3:=a[2,1]*a[1,2]-a[1,1]*a[2,2];
m4:=a[1,3]*a[3,1]-a[3,3]*a[1,1];
p:=m3*m4-m1*m2;
r:=a[3,1]*b[1]-a[1,1]*b[3];
t:=a[2,1]*b[1]-a[1,1]*b[2];
c:=(r*m3-t*m2)/p;
d:=(t*m4-r*m1)/p;
aa:=(b[1]-a[1,2]*d-a[1,3]*c)/a[1,1];
str(aa*v*v+d*v+c,tmp);
end
else
tmp:='Chislo ne prin. posled..';
writeln('X=',v,' Y=',tmp);
end;
procedure lagrange(v: real);
var
i,j: integer;
yn,p1,p2: real;
begin
yn:=0;
for i:=1 to k do
begin
p1:=1;
p2:=1;
for j:=1 to k do
begin
if j<>i then
begin
p1:=(v-x[j])*p1;
p2:=(x[i]-x[j])*p2;
end;
end;
yn:=yn+y[i]*p1/p2;
end;
writeln('X=',v,' Y=',yn);
end;
procedure interline(v: real);
var
j: integer;
begin
for j:=1 to k-1 do
begin
if (v>x[j])and(v<x[j+1]) then
break;
end;
writeln('X=',v,' Y=',y[j]+(y[j+1]-y[j])*(v-x[j])/(x[j+1]-x[j]));
end;
function sumstep(j,i,p: integer): real;
var
t: integer;
tmp: double;
begin
tmp:=0;
for t:=1 to i do
begin
if p=0 then
tmp:=tmp+xst(x[t],j)
else
tmp:=tmp+y[t]*xst(x[t],p-1);
end;
sumstep:=tmp;
end;
procedure aproxym(v: real);
var
i,j,stp: integer;
tmp: double;
begin
for i:=1 to count do
begin
stp:=i-1;
for j:=succ(count)downto 1 do
begin
if j=count+1 then
matrix[i,j]:=sumstep(0,k,i)
else
begin
if (j=count)and(i=1) then
matrix[i,j]:=k+1
else
matrix[i,j]:=sumstep(stp,k,0);
stp:=stp+1;
end;
end;
end;
gauss;
tmp:=0;
for i:=1 to count do
begin
tmp:=tmp+smatrix[i]*xst(v,count-i);
smatrix[i]:=0;
end;
writeln('X=',v,' Y=',tmp);
end;
begin
writeln('----------------------------');
writeln('kvadratichnaya interp. naimen. kvadratami:');
minquad(2.921);
minquad(4.121);
writeln('kvadratichnaya interp.:');
square(2.921);
square(4.121);
writeln('lagrange interp.:');
lagrange(2.921);
lagrange(4.121);
writeln('Lineynaya interp.:');
interline(2.921);
interline(4.121);
writeln('Aproxymazia polynom:');
aproxym(2.921);
aproxym(4.121);
end.
