Интерполирование алгебраическими многочленами

Задача интерполирования алгебраическими многочленами. Рассмотрение интерполяционных формул Лагранжа и Ньютона. Расчет гиперболического синуса и создание демонстративной программы на Delphi 7, которая наглядно показывает достоверность решения методов.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 10.08.2014
Размер файла 312,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Оглавление

Введение

1. Задача интерполирования алгебраическими многочленами

2. Интерполяционная формула Лагранжа

3. Интерполяционная формула Ньютона

4. Применение интерполяционных формул к данному примеру

Заключение

Использованная литература

Приложение

алгебраический интерполяционный лагранж программа

Введение

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

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

Задача интерполирования возникает, например, в том случае, когда известны результаты измерений yk = f(xk) некоторой физической величины f(x) в точках xk, k = 0, 1,…, n и требуется определить ее значение в других точках. Интерполирование используется также при необходимости сгущения таблиц, когда вычисление значений f(x) по точным формулам трудоемко.

1. Задача интерполирования алгебраическими многочленами

Пусть функциональная зависимость задана таблицей y0 = f(x0);…, y1= f(x1);…,yn = f(xn). Обычно задача интерполирования формулируется так: найти многочлен P(x) = Pn(x) степени не выше n, значения которого в точках xi (i = 0, 1 2,…, n)совпадают со значениями данной функции, то есть P(xi) = yi.

Геометрически это означает, что нужно найти алгебраическую кривую вида

проходящую через заданную систему точек Мi(xi,yi) (рис. 1). Многочлен Р(х) называется интерполяционным многочленом. Точки xi (i = 0, 1, 2,…, n) называются узлами интерполяции

Рис. 1. Интерполирование алгебраическим многочленом

Для любой непрерывной функции f(x) сформулированная задача имеет единственное решение. Действительно, для отыскания коэффициентов а0, а1, а2 ,…, аn получаем систему линейных уравнений

(1)

определитель которой (определитель Вандермонда) отличен от нуля, если среди точек xi (i = 0, 1, 2,…, n) нет совпадающих.

Решение системы (1) можно записать различным образом. Однако наиболее употребительна запись интерполяционного многочлена в форме Лагранжа и в форме Ньютона.

2. Интерполяционная формула Лагранжа

Пусть и заданы точки , (узлы интерполирования), в которых известны значения функции . Задача интерполирования состоит в том, чтобы построить многочлен:

степени n, значения которого в заданных точках , совпадают со значениями функции в этих точках. Такой полином существует и единственен.

Интерполяционный многочлен степени не выше n по системе алгебраических многочленов 1, х, х?,…,x? можно задать по формуле Лагранжа:

,где ,

.

Обозначая

получим "барицентрический" вид многочлена Лагранжа:

3. Интерполяционная формула Ньютона

Интерполяционная формула Ньютона является разностным аналогом формулы Тейлора и имеет вид:

где , i,j=0,1,…,n,

i ? j - разделенные разности первого порядка,

, i,j,k=0,1,…,n,

I ? j ? k - разделенные разности второго порядка,

разделенные разности k-го порядка.

При выводе формулы Ньютона не накладывается ограничений на порядок узлов x0,x1,…,xn , поэтому множество интерполяционных формул можно получить из перенумерацией узлов.

Также есть первая интерполяционная формула Ньютона (для интерполирования в начале таблицы, т.е. точка x близка к x0), по которой будет считаться данная формула:

Pn(x) = f0 + tД f0 + Д2f0 + … + Дn f0, где t =

n

fn

Дfn

Д2fn

Д3fn

Д4fn

0

f0

Дf0

Д2f0

Д3f0

Д4f0

1

f1

Дf1

Д2f1

Д3f1

2

f2

Дf2

Д2f2

3

f3

Дf3

4

f4

4. Применение интерполяционных формул к данному примеру

Дана таблица значений функции y = Sh(x):

x

Sh(x)

1,0

1,1

1,2

1,3

1,4

1,17520

1,33565

1,50946

1,69838

1,90430

Нужно найти приближенное значение Sh(x) по интерполяционной формуле Лагранжа и Ньютона для значения аргумента 0,03.

Исходя из данной формулы Лагранжа найдем значение.

,

в нашем случае L5(1,03).

Найдем:

щ(1,03) = (1,03-1)*(1,03-2)*(1,03-3)*(1,03-4) = 0,0000356643

(щ'(x0) = (1-1,1)*(1-1,2)*(1-1,3)*(1-1,4) = 0,0024

(щ'(x1) = (1,1-1)*(1,1-1,2)*(1,1-1,3)*(1,1-1,4) = -0,0006

(щ'(x2) = (1,2-1)*(1,2-1,1)*(1,2-1,3)*(1,2-1,4) = 0,0004

(щ'(x3) = (1,3-1)*(1,3-1,1)*(1,3-1,2)*(1,3-1,4) = -0,0006

(щ'(x4) = (1,4-1)*(1,4-1,1)*(1,4-1,2)*(1,4-1,3) = 0,0024

x - x0 = 0,03

x - x1 = - 0,07

x - x2 = - 0,17

x - x3 = - 0,27

x - x4 = - 0,37

После того, как нашли щ(x) и щ' (xk), найдем L5(1,03).

L5(1,03) = + +

+ + + =

= 0,58212063 + 1,1341671975 - 0,7916740335 + 0,373898357 - 0,07648144875 = 1,22203070225.

Найдем значение в точке 1,03 по интерполяционной формуле Ньютона.

Дf0 = f1 - f0 = 0,16045

Дf1 = f2 - f1 = 0,17381

Дf2 = f3 - f2 = 0,18893

Дf3 = f4 - f3 = 0,20592

Аналогично находим остальные значения Дf и подставим их в таблицу.

n

fn

Дfn

Д2fn

Д3fn

Д4fn

0

1,1752

0,16045

0,01336

0,00175

0,00014

1

1,33565

0,17381

0,01511

0,00189

2

1,50946

0,18892

0,017

3

1,69838

0,20592

4

1,9043

t = = 0,3

P5(1,03) = 1,1752 + 0,3*0,16045 + *0,01336 + *

*0,00175 + *0,00014 = 1,1752 + 0,048135 - 0,0014028 + 0,000104125 - 0,00000562275 = 1,22203070225.

Теперь посчитаем значение в точке 1,03 по формуле гиперболического синуса:

Sh(x) = => Sh(1,03) = = 1,22202943707.

Заключение

В данной курсовой работе были рассмотрены интерполирования алгебраическими многочленами методами Лагранжа и Ньютона, пути решения которых совершенно разные, но результаты работы были одинаковыми, и также был рассчитан гиперболический синус по данной точке, результат которой меньше, но весьма близок к результатам методов.

Мною было рассчитано значение в точке по интерполяционным формулам Лагранжа и Ньютона и была создана демонстративная программа на Delphi 7, которая наглядно показывает достоверность решения методов.

Использованная литература

1) Монастырский П.И. Сборник задач по методам вычислений 1-е издание.

2) Монастырский П.И. Сборник задач по методам вычислений 2-е издание.

3) Тынкевич М. А.. Глава 7.6.1. Интерполяционный многочлен Лагранжа. Численные методы анализа.

Приложение

Используя все выше перечисленные интерполяционные формулы Лагранжа и Ньютона, внесем их в программу Delphi 7 через язык программирования Паскаль.

Результат по интерполяционной формуле Лагранжа:

Результат по интерполяционной формуле Ньютона:

Вывод: все значения в программе Delphi 7 совпадают со значениями из пункта 5.

Код программы Паскаль по интерполяционной формуле Ньютона:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, StdCtrls, XPMan, unit2, Buttons, TeEngine, Series,

ExtCtrls, TeeProcs, Chart;

type

TForm1 = class(TForm)

Label1: TLabel;

Edit1: TEdit;

Button1: TButton;

StringGrid1: TStringGrid;

XPManifest1: TXPManifest;

Button2: TButton;

Memo1: TMemo;

Chart1: TChart;

Series1: TLineSeries;

BitBtn1: TBitBtn;

Label2: TLabel;

RadioGroup1: TRadioGroup;

Label3: TLabel;

Edit2: TEdit;

Button3: TButton;

Edit3: TEdit;

Memo2: TMemo;

LabeledEdit1: TLabeledEdit;

Label4: TLabel;

Edit4: TEdit;

Edit5: TEdit;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

Meth:Methods;

flag:bool;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

Meth:=Methods.Create;

RadioGroup1.ItemIndex:=0;

StringGrid1.Cells[0,0]:='№ узла';

StringGrid1.Cells[0,1]:='x[i]';

StringGrid1.Cells[0,2]:='y[i]';

StringGrid1.Cells[1,0]:=IntToStr(1);

end;

procedure TForm1.Button1Click(Sender: TObject);

var

i:integer;

begin

Meth.N:=StrToInt(Edit1.Text);

StringGrid1.ColCount:=Meth.N+1;

for i:=1 to Meth.N do

begin

StringGrid1.Cells[i,0]:=IntToStr(i);

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

var

i: integer;

begin

Memo1.Clear;

Memo2.Clear;

Series1.Clear;

Meth.Step:=StrToFloat(LabeledEdit1.Text);

for i:=1 to Meth.N do

begin

Meth.x[i]:=StrToFloat(StringGrid1.Cells[i,1]);

Meth.y[i]:=StrToFloat(StringGrid1.Cells[i,2]);

end;

for i:=0 to Meth.N-1 do

begin

Meth.x1[i]:=StrToFloat(StringGrid1.Cells[i+1,1]);

Meth.y1[i]:=StrToFloat(StringGrid1.Cells[i+1,2]);

end;

if RadioGroup1.ItemIndex = 0 then

Meth.Graf;

if RadioGroup1.ItemIndex = 1 then

Meth.Newton;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

if RadioGroup1.ItemIndex = 0 then

Edit3.Text:=FloatToStr(Meth.PointLag(StrToFloat(Edit2.Text)))

else

Edit3.Text:=FloatToStr(Meth.PointNew(StrToFloat(Edit2.Text)));

end;

end.

Код программы Паскаль по интерполяционной формуле Лагранжа:

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, StdCtrls,Math;

type

Tvector = array [1..10] of real;

Tvector1 = array [0..9] of real;

TMatr = array [1..10] of array[1..10] of real;

Methods = class

N:integer;

x,y,a:Tvector;

y1,x1:Tvector1;

mas:TMatr;

Step:real;

Polinom: string;

// function Lagrange(q:real):real;

procedure Graf;

function PointLag(point:real):real;

procedure Razn();

function RealD(xk:real;x0:real):real;

function Factorial(Number:integer): integer;

procedure Newton();

function PointNew(point:real):real;

end;

implementation

uses Unit1;

{function Methods.Lagrange(q:real):real;

var

i,j:integer;

L,s:real;

begin

L:=0;

for i:=1 to n do

begin

s:=1;

for j:=1 to N do

if j<>i then

s:=s*(q-x[j])/(x[i]-x[j]);

L:=L+y[i]*s;

end;

Form1.Memo1.Lines.Add('x= '+FloatToStr(q)+' y= '+FloatToStr(L));

//Form1.Series1.AddXY(q,l);

Lagrange:=l

end; }

procedure Methods.Graf();

Var

MassivA: array [1..10]of array [1..10]of real;

MassivB: array[1..10] of real;

MassivX: array[1..10] of real;

i,j,k:byte;

h, step, count:real;

Mx,My:real;

begin

for i:=1 to N do

begin

MassivB[i]:=y[i];

for j:=1 to N do

MassivA[j,i]:=Power(x[j],i-1);

end;

{Прямой ход - исключение переменных}

for k:=1 to n-1 do

for i:=k+1 to n do

begin

MassivA[i,k]:=-MassivA[i,k]/MassivA[k,k];

for j:=k+1 to n do

begin

MassivA[i,j]:=MassivA[i,j]+MassivA[i,k]*MassivA[k,j];

end;

MassivB[i]:=MassivB[i]+MassivA[i,k]*MassivB[k];

end;

MassivX[n]:=MassivB[n]/MassivA[n,n];

{Обратный ход - нахождение корней}

for k:=n-1 downto 1 do

begin

h:=MassivB[k];

for j:=k+1 to n do

h:=h-MassivX[j]*MassivA[k,j];

MassivX[k]:=h/MassivA[k,k];

end;

for i:=1 to n do

a[i]:=MassivX[i];

Polinom:='';

// построение многочлена

for i:=0 to N-1 do

begin

if ((i=N-1) or (i=0)) then

begin

if (i=N-1) then

begin

if(a[N-i]<0) then

Polinom:=Polinom+FloatToStr(a[N-i])

else

Polinom:=Polinom+ '+'+FloatToStr(a[N-i]);

end

else

Polinom:=Polinom+FloatToStr(a[N-i])+'x^'+IntToStr(N-i-1);

end

else

begin

if(a[N-i]<0) then

Polinom:=Polinom+FloatToStr(a[N-i])+'x^'+IntToStr(N-i-1)

else

Polinom:=Polinom + '+'+FloatToStr(a[N-i])+'x^'+IntToStr(N-i-1);

end;

end;

Form1.Memo2.Lines.Add(Polinom);

// построение графика

step:=x[1];

while step<=x[N] do

begin

Mx:=step;

My:=0;

for i:=1 to N do

begin

My:=My+a[i]*Power(Mx,i-1);

end;

Form1.Series1.AddXY(Mx,My);

step:=step + 0.001;

end;

//уплотнение таблицы

step:=x[1];

count:= StrToFloat(Form1.LabeledEdit1.Text);

while step<=x[N] do

begin

Mx:=step;

My:=0;

for i:=1 to N do

begin

My:=My+a[i]*Power(Mx,i-1);

end;

Form1.Memo1.Lines.Add('x= '+Format('%.3f',[Mx])+' y= '+Format('%.4f',[My]));

step:=step + count;

end;

end;

function Methods.PointLag(point:real):real;

var

i:byte;

begin

for i:=1 to N do

result:=result+a[i]*Power(point,i-1);

end;

// конечнее разности

procedure Methods.Razn();

var

i, j: byte;

begin

for j:=1 to N-1 do

mas[j,1]:= y[j+1]-y[j];

for i:=2 to N do

for j:=1 to N-i+1 do

mas[j,i]:= mas[j+1,i-1]-mas[j,i-1];

end;

// вывод D

function Methods.RealD(xk:real;x0:real):real;

begin

result:=(xk-x0)/(x[2]-x[1]);

end;

function Methods.Factorial(Number:integer):integer;

var

i:integer;

begin

result:=1;

for i:=1 to Number do

Result:= Result*Number;

end;

procedure Methods.Newton();

var

i,j:integer;

New, Ndop, d:real;

xn, xk, point:real;

begin

xn:= x[1];

xk:= StrToFloat(Form1.Edit5.Text);

point:= StrToFloat(Form1.Edit4.Text);

// d:= RealD(xk,xn);

Razn;

while (point<=xk) do

begin

New:=y[1];

for i:=1 to N-1 do

begin

d:= RealD(point,xn);

Ndop:=d*mas[1,i]/Factorial(i);

if (i>1) then

begin

for j:=1 to i-1 do

Ndop:=Ndop*(d-j);

end;

New:=New+Ndop;

end;

Form1.Series1.AddXY(point,New);

Form1.Memo1.Lines.Add('x= '+Format('%.3f',[point])+' y= '+Format('%.4f',[New]));

point:=point+Step;

end;

Form1.Memo2.Lines.Add(Polinom);

end;

function Methods.PointNew(point:real):real;

var

New, Ndop, d:real;

i, j: byte;

begin

New:=y[1];

for i:=1 to N-1 do

begin

d:= RealD(point,x[1]);

Ndop:=d*mas[1,i]/Factorial(i);

if (i>1) then

begin

for j:=1 to i-1 do

Ndop:=Ndop*(d-j);

end;

result:=New+Ndop;

end;

end;

end.

Размещено на Allbest.ru


Подобные документы

  • Интерполирование рабочих точек в пакете Mathcad с помощью полиномов (канонического, Лагранжа и Ньютона) и сплайнов (линейного, квадратичного, кубического). Реализация программы для решения системы линейных алгебраических уравнений на языке Pascal.

    лабораторная работа [202,8 K], добавлен 15.11.2012

  • Интерполирование функций методом Лагранжа. Получение функциональной зависимости по экспериментальным данным. Близость интерполяционного многочлена к заданной функции. Интерполяционный полином в форме Лагранжа. Построение интерполяционных графиков.

    лабораторная работа [315,8 K], добавлен 24.05.2014

  • Сравнение графиков заданной функции и интерполяционных полиномов на определенном интервале при двух вариантах выбора узлов (равномерно с шагом, по Чебышеву). Создание программы на основе метода Ньютона для построения графиков и расчета значений функции.

    контрольная работа [1,1 M], добавлен 07.07.2012

  • Изучение методов решения нелинейных уравнений таких как: метод Ньютона, модифицированный метод Ньютона, метод Хорд, метод простых Итераций. Реализация программы для персонального компьютера, которая находит решение нелинейного уравнения разными способами.

    практическая работа [321,9 K], добавлен 24.06.2012

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

    курсовая работа [355,7 K], добавлен 21.09.2010

  • Составление алгоритма и программного обеспечения для реализации конечноразностных интерполяционных формул Ньютона, Гаусса и Стирлинга. Описание метода полиномиальной интерполяции. Изучение метода оптимального исключения для решения линейных уравнений.

    курсовая работа [19,8 K], добавлен 25.12.2013

  • Математичний опис задачі виконання символьних операцій з многочленами, розробка алгоритмів її реалізації і сама реалізація на одній з версій алгоритмічної мови Pascal, контрольна перевірка правильності. Тестування програми на екстремальних вхідних даних.

    контрольная работа [24,1 K], добавлен 20.09.2010

  • Суть основных идей и методов, особенностей и областей применения программирования для численных методов и решения нелинейных уравнений. Методы итераций, дихотомии и хорд и их использование. Алгоритм метода Ньютона, создание программы и ее тестирование.

    курсовая работа [423,0 K], добавлен 17.02.2010

  • Создание программы с кодом на языке Delphi, которая ищет в тексте заглавные буквы, выдает сообщение о количестве и замене их на малые буквы. Описание переменных, вспомогательных процедур, входных и выходных данных, необходимых для реализации задачи.

    курсовая работа [540,4 K], добавлен 21.09.2010

  • Описание алгоритма решения транспортной задачи по планированию перевозки зерна. Ход решения задачи вручную, в программе TORA методом наименьшего элемента, с помощью MS Excel. Разработка программы для решения задачи в общем виде средствами Delphi.

    курсовая работа [2,5 M], добавлен 22.11.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.