Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Интерполяционный многочлен Лагранжа



(8.6)

Многочлены выбраны так, что во всех узлах, кроме k-го, они обращаются в ноль, в k-м узле они равны единице:

Очевидно, что .

Функция, реализующая вычисления с помощью многочлена Лагранжа рассмотрена в примере.

8.2. Пример выполнения задания

Составить алгоритм, по которому написать и отладить программу аппроксимации функции f(x) = x3 – 5x2 на интервале [-2, 5] многочленом Лагранжа, m – количество точек, в которых известна функция, n – количество рассчитываемых значений.

Вид формы и полученные результаты представлены на рис. 8.1. Тексты функций-обработчиков и функции пользователя будут иметь следующий вид:

double fun(double);

double Mn_Lagr(double*, double, int);

//--------------------------- Текст функции-обработчика кнопки Вычислить ----------

double x, h, h1, a, b, *mas_x, *mas_y_t;

int i, n, m;

a = StrToFloat(Edit1-> Text); b = StrToFloat(Edit2-> Text);

m = StrToInt(Edit3-> Text); n = StrToInt(Edit4-> Text);

Рис. 7.1

 

h = (b-a)/(m-1); h1 = (b-a)/(n-1);

mas_x = new double[m+1]; mas_y_t = new double[n+1];

for(x=a, i=0; i< m; i++){

mas_x[i] = x;

x+=h;

}

Memo1-> Lines-> Add(" ---- Многочлен Лагранжа ---" );

Memo1-> Lines-> Add(" Получили " + IntToStr(n) + " значений: " );

for(x=a, i=0; i< n; i++, x+=h1) {

mas_y_t[i] = Mn_Lagr(mas_x, x, m);

Memo1-> Lines-> Add(" x = " +FloatToStrF(x, ffFixed, 8, 2)

+" f*(x) = " +FloatToStrF(mas_y_t[i], ffFixed, 8, 4));

}

//--------------------------- Очистка Графиков -----------------------------------------------

Chart1-> Series[0]-> Clear(); Chart1-> Series[1]-> Clear();

//--------------------------- Вывод Графиков -------------------------------------------------

for(x=a-0.1; x< b+0.1; x+=0.01)

Chart1-> Series[0]-> AddXY(x, fun(x));

for(x=a, i=0; i< n; i++, x+=h1)

Chart1-> Series[1]-> AddXY(x, mas_y_t[i]);

delete []mas_x;

delete []mas_y_t;

}

//---------------------------- Исходная функция f(x) -----------------------------------------

double fun(double x) {

return pow(x, 3) - 5 * x*x;

}

//---------------------------- Многочлен Лагранжа -------------------------------------------

double Mn_Lagr(double *x, double xt, int kol) {

int i, k;

double e, p=0;

for(k=0; k< kol; k++) {

e=1.;

for (i=0; i< kol; i++)

if (i! =k) e *= ((xt-x[i])/(x[k]-x[i]));

p += e*fun(x[k]);

}

return p;

}

8.3. Индивидуальные задания

Написать и отладить программу аппроксимации функции f(x) на интервале [a, b] заданным методом, m – количество точек, в которых известна функция (размер таблицы). Вид функции задан для получения значений таблицы (xi, yi), i=1, 2, …, m и проверки качества аппроксимации.

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

Таблица 8.1

Функция f(x) a b m Вид аппроксимации
–2 Многочлен Лагранжа
Многочлен Ньютона
Линейная интерполяция
Квадратичная интерполяция
Многочлен Лагранжа
Многочлен Ньютона
Линейная интерполяция
Квадратичная интерполяция
–8 Многочлен Лагранжа
–2 Многочлен Ньютона
–5 Линейная интерполяция
–1 Квадратичная интерполяция
Многочлен Лагранжа
–2 Многочлен Ньютона
Линейная интерполяция
–4 Квадратичная интерполяция

Лабораторная работа №9. Алгоритмы вычисления интегралов

Цель работы : изучить алгоритмы нахождения значений интегралов.

Краткие теоретические сведения

Формулы для вычисления интеграла получают следующим образом. Область интегрирования [a, b] разбивают на малые отрезки, тогда значение интеграла по всей области равно сумме интегралов на этих отрезках.

Выбирают на каждом отрезке [xi, xi+1] 1–5 узлов и строят интерполяционный многочлен соответствующего порядка. Вычисляют интеграл от этого многочлена, и в результате получают формулу численного интегрирования через значения подынтегральной функции в выбранной системе точек. Такие выражения называют квадратурными формулами.

Рассмотрим наиболее часто используемые квадратурные формулы для равных отрезков длиной h = (b - a)/m; xi = a + (i - 1)× h; i = 1, 2, …, m; где m – количество разбиений отрезка интегрирования.

Формула средних

Формула средних получается, если на каждом i-м отрезке взять один центральный узел xi+1/2 = (xi + xi+1)/2, соответствующий середине отрезка. Функция на каждом отрезке аппроксимируется многочленом нулевой степени (константой) P0(x) = yi+1/2 = f(xi+1/2). Заменяя площадь криволинейной фигуры площадью прямоугольника высотой yi+1/2 и основанием h, получим формулу средних (рис. 9.1):

. (9.1)

 

Рис. 9.1

 

Формула трапеций

Формула трапеций получается при аппроксимации функции f(x)на каждом отрезке [xi, xi+1]интерполяционным многочленом первого порядка, т.е. прямой, проходящей через точки , . Площадь криволинейной фигуры заменяется площадью трапеции с основаниями и высотой h (рис.9.2):

 

Рис. 9.2

 

. (9.2)

Формула Симпсона

Формула Симпсона получается при аппроксимации функции f(x)на каждом отрезке [xi, xi+1]интерполяционным многочленом второго порядка (параболой) c узлами xi, xi+1/2, xi+1. После интегрирования параболы получаем (рис.9.3)

Рис. 9.3

. (9.3)

После приведения подобных членов получаем более удобный для программирования вид:

.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-07-13; Просмотров: 581; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.017 с.)
Главная | Случайная страница | Обратная связь