Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Chislennye_metody_obedin.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

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. Алгоритмы и программы.

Функция суммирования из раздела 5.2.3.

Программа.

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-значением аргумента ( ). При вызове с данными параметрами процедура возвращает значение аппроксимируемой или интерполируемой функции.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]