Текст программы вычисления многочлена Лагранжа.
// Method_L.cpp : main project file.
#include "stdafx.h" #include <iostream> #include<conio.h> #include<cmath> #include<iomanip> #define max 20 using namespace System; using namespace std;
double lagrange(int k,double x, double arg[][max]) /*объявление фнукции вычисления полинома Лагранжа, где "к"-колич-во узлов интерполяции, х-значение аргумента "х", arg- двумерный массив табличных значений аргументов и функции, в котором arg[i][1] – массив значений аргументов, arg[i][2] – массив значений функции*/ { double l,L; L=0;
for(int i=0;i<=k;i++) { l=arg[i][2];
for(int j=0;j<=k;j++) { if(i!=j) l=(x-arg[j][1])/(arg[i][1]-arg[j][1])*l; //вычисление значения слагаемого полинома, при условии что "i"<>"j" }
L=L+l; //подсчет суммы слагаемых полинома } return L; //возврат результата вычислений полинома вызывающей функции }
int main() //начало основной программы { double arg[max][max],x,L[max],E; float h; int n,k,flag;
cout<<"Quantity of entered values N="; cin>>n; //определение количества табличных значений функции cout<<"\n"; cout<<"Enter value of argument X="; cin>>x; //ввод значения "х" cout<<endl; h=0.1; flag=0;
for (int i=0;i<n;i++) { arg[i][1]=i*h; //заполнение массива табличных значений аргумента функции "x[] " cout<<"Enter values of function Y"<<i<<"= "; cin>>arg[i][2]; //заполнение массива табличных значений функции "y[]" cout<<"\n";
if(arg[i][1]==x) //проверка равенства введенного значения аргумента "х" со зна- flag=i; чением из массива табличных аргументов "х[]"
}
cout<<"Enter quantity of knots of interpolation K="; cin>>k; //определение количества узлов интерполяции cout<<"\n";
if (flag==0) //если значение введенного аргумента "х" не равно табличному значению, то вычисляется полином Лагранжа { for (int i=1;i<=k;i++) L[i]=lagrange(i,x,arg);
E=fabs(L[k]-L[k-1]); //вычисление погрешности
cout<<setw(5)<<"X(i)"<<setw(10)<<"Y(i)"<<endl;
for(int i=0;i<n;i++) cout<<setw(5)<<arg[i][1]<<setw(10)<<arg[i][2]<<"\n"; //вывод на экран табличных значений аргумента и функции
cout<<endl; cout<<"X="<<x<<" L("<<k<<")="<<L[k]<<" E="<<E<<endl; //вывод "х", вычисленных значений функции полиномом Лагранжа и погрешности
} else {
cout<<"X="<<x<<" Y="<<arg[flag][2]<<endl; //вывод значения аргумента "х" и функции "y", в случае совпадения значения "х" с табличным }
getch(); return 0; }
Результаты интерполяции заданной функции полиномом Лагранжа различного порядка сведены в таблицу 1. На рисунке 3 представлен график исходной функции. На рисунке 4 представлен график функции, интерполированной полиномом Лагранжа различного порядка, в окрестности точки х=0.865.
Таблица 1.
Как видно из графика, изображенного на рис. 4, использование для интерполяции заданной функции полинома Лагранжа второго порядка, дает большую погрешность и явное отклонение графика функции в заданной точке от общего графика (рис.3). Тогда как при использовании полинома пятого порядка, точность вычислений значительно возрастает.
Выводы: 1. Формула Лагранжа может быть использована для произвольно заданных узлов интерполяции. 2. Добавление к уже взятым узлам интерполяции хотя бы одного нового, влечет за собой не только добавление нового базисного полинома, но и необходимость пересчета уже посчитанных базисных полиномов.
Популярное: Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (337)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |