Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Интерполяционный многочлен Лагранжа
(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
Лабораторная работа №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; Нарушение авторского права страницы