- •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. Задания по численным методам.
5.3. Дополнения к разделу.
5.3.1. Комментарии.
Точность интерполяции напрямую зависит от количества входных данных. Чем больше известных значений функции, тем более точно можно ее интерполировать.
По алгоритму представленному в разделе 5.2.3, функция может быть аппроксимирована полиномом до 10 степени (определяется глобальной константой « »). Далее требуются более точные арифметические операции. Поэтому для аппроксимирования функции полиномом 10 степени и более требуется переход на длинную математику.
Процедура «gauss», в программе раздела 5.2.3 находит решение системы уравнений, полученных из матрицы «matrix» (алгоритм представлен в разделе 3.4). После выполнения данной процедуры в массиве «smatrix» находятся решения данной системы уравнений. Также можно воспользоваться другими процедурами нахождения корней уравнения, но алгоритм раздела 5.2.3 будет работать только тогда, когда решения будут находиться в матрице «smatrix».
5.3.2. Алгоритмы и программы.
Функция
суммирования
|
Программа. 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+exp(j*ln(x[t])) else tmp:=tmp+y[t]*exp((p-1)*ln(x[t])); end; sumstep:=tmp; end;
|
5.3.3. Пример работы программ.
Все программы данного раздела представлены в виде процедур, для работы которых требуется ввод значений аргумента функции, наличие массивов значений и , а также размерность этих массивов (заносятся в раздел констант). В разделе 5.2.3 требуется в разделе констант указать количество радикалов полинома (степень полинома+1).
Пусть требуется
найти значение функции в точках
и
,
представленной виде таблицы значений:
|
|
|
|
|
|
|
|
8 |
21 |
58 |
161 |
396 |
853 |
с помощью аппроксимации полиномом 4 степени. Тогда упрощенная программа будет выглядеть следующим образом:
Код программы
program APROX;
const
n=6;{размерность массива значений функции}
k=5;{степень полинома+1}
x: array[1..n] of real=(1,2,3,4,5,6);
y: array[1..n] of real=(8,21,58,161,396,853);
var
matrix: array[1..k,1..succ(k)] of real;
smatrix: array[1..k] of real;
{Процедура приведения матрицы к треугольному виду}
{Процедура метода Гаусса}
{Функция суммирования x^k}
{Процедура аппроксимации полиномом}
begin
aproxym(1.676);
aproxym(5.137);
readln;
end.
Вывод программы:
Коэффициенты полинома:
;
;
;
;
Важное замечание: из процедуры «gauss» убран вызов функции заполнения матрицы «fillin», так как матрица заполняется самим алгоритмом «aproxy».
Если требуется решить задачу, представленную выше, с помощью интерполяции Лагранжа, то упрощенная программа будет выглядеть следующим образом:
Код программы
program Interp;
const
n=6;{размерность массива значений функции}
x: array[1..n] of real=(1,2,3,4,5,6);
y: array[1..n] of real=(8,21,58,161,396,853);
{Процедура метода Лагранжа}
begin
lagrange(1.676);
lagrange(5.137);
readln;
end.
Вывод программы:
Стоит отметить, что решение задачи другими методами будет проходить так же, только необходимо произвести замену нужной процедуры в программе. Любая процедура раздела вызывается с единственным параметром: v-значением аргумента ( ). При вызове с данными параметрами процедура возвращает значение аппроксимируемой или интерполируемой функции.
