Мегаобучалка Главная | О нас | Обратная связь


Текст программы вычисления многочлена Лагранжа.



2020-02-04 337 Обсуждений (0)
Текст программы вычисления многочлена Лагранжа. 0.00 из 5.00 0 оценок




 

 

// 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.

Х n Ln(x) E
0.865 2 1.572950 0.11
0.865 5 1.559700 7.7*10-4
0.865 9 1.560260 3.6*10-5

 


 

 

 

 


 


 

Как видно из графика, изображенного на рис. 4, использование для интерполяции заданной функции полинома Лагранжа второго порядка, дает большую погрешность и явное отклонение графика функции в заданной точке от общего графика (рис.3). Тогда как при использовании полинома пятого порядка, точность вычислений значительно возрастает.

 

Выводы:

1. Формула Лагранжа может быть использована для произвольно заданных узлов интерполяции.

2. Добавление к уже взятым узлам интерполяции хотя бы одного нового, влечет за собой не только добавление нового базисного полинома, но и необходимость пересчета уже посчитанных базисных полиномов.

 



2020-02-04 337 Обсуждений (0)
Текст программы вычисления многочлена Лагранжа. 0.00 из 5.00 0 оценок









Обсуждение в статье: Текст программы вычисления многочлена Лагранжа.

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (337)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)