, а
(9)
есть многочлен степени qj (j=1, 2, …, m) относительно переменного vj, wqj(vj) - производная от wqj(vj) по переменной vj. Нетрудно проверить, что выполняется равенство
В остальных же точках соблюдается приближенное равенство
Подставив выражение (8) в равенство (3) и меняя порядок интегрирования и суммирования, получим
где
Величины , вычисленные по формуле (12), называются числами Кристоффеля.
Таким образом, для вычисления математического ожидания в соотношении (3) справедливо приближенное соотношение
Точность приближенной формулы (13) определяется рациональным выбором узлов интерполирования
.2 Теорема 1
Если функция φi(t,v), являющаяся решением системы дифференциальных уравнений (1), непрерывна по аргументам t и v за исключением конечного числа точек, где имеются разрывы первого рода, то существует полином относительно v, приближающий равномерно в области t0 ≤ t ≤ T, v [a, b] эту функцию с любой наперёд заданной точностью за исключением сколь угодно малых окрестностей точек разрыва непрерывности.
.3 Теорема 2
Для того чтобы интерполяционный полином (8) сходился слабо в среднем для всякой непрерывной при всех v [a, b] функции Ф1(t, v), достаточно, чтобы узлы интерполирования были выбраны так, чтобы числа Кристоффеля, определяемые по формуле (1), были неотрицательны.
.4 Теорема 3
Если в качестве узлов интерполирования выбрать корни ортогональных полиномов по весу, равному f(v) - плотности распределения случайной величины V, то при использовании n узлов интерполирования интерполяционный метод даёт точные значения в классе многочленов Ф1(t, v) всех степеней до степени q=2n - 1 включительно.
.5 Теорема 4
Для каждой плотности распределения вероятностей, являющейся весовой функцией, существует единственная система ортогональных многочленов.
.6 Теорема 5
Многочлен Hn(v) степени n, ортогональный относительно плотности распределения вероятностей f(v), имеет внутри промежутка [a, b] значений, применяемой случайной величиной V, n вещественных корней v1, v2, …, vn (узлов интерполирования). Причем числа Кристоффеля, вычисленные для случая, когда в качестве узлов интерполирования выбраны корни ортогональных многочленов, положительны.
2. Специальная часть
.1 Постановка задачи
Пусть имеется некоторое линейное множество R действительных функций, определенных на отрезке [a, b], и некоторая конечная или счетная совокупность достаточно простых функций этого множества {ji(x)}. Предполагается, что любая конечная подсистема функций {ji(x)} линейно независима на [a, b]. Рассматривается задача приближения функции f(x)R функциями вида Qm(x) = c0j0(x) + c1j1(x) +...+ cmjm(x). На [a, b] выбирается некоторая фиксированная совокупность попарно различных точек x0, x0,..., xn и каждой конкретной функции f(x)R ставится в соответствие обобщенный многочлен Qm(x), значения которого в выбранных точках совпадают со значениями функции f(x). Точки x0, x0,…, xn называются узлами интерполирования, а обобщенный многочлен, обладающий указанным свойством, называется обобщенным интерполяционным многочленом для f(x) по заданной системе узлов.
.2 Алгоритм решения задачи
Задаётся начальная функция и интервал, в пределах которого строится данная функция. Затем следует построить заданную функцию по выбранным произвольно точкам. Далее по формуле полинома Лагранжа в выбранных узлах интерполирования, рассчитывается и строится, приближенная к заданной, функция.
На выходе программы должны отобразится два графика: сама функция и её интерполяционный многочлен.
3. Технологическая часть
.1 Обоснование выбора программного обеспечения
Выбор среды разработки обусловлен тем, что посредством Delphi имеется возможность написания наглядной программы с дружественным интерфейсом и большим количеством возможностей. Синтаксис Borland Pascal и Borland Delphi очень похож, и среда разработки Borland Delphi становится всё популярнее у разработчиков, так как охватывает обширную часть методов и технологий для взаимодействия с операционной системой и оборудованием компьютера.
Delphi - это среда быстрой разработки, в которой в качестве языка программирования используется язык Delphi. Язык Delphi - строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal.
.2 Описание алгоритма
.2.1 Исходные данные
При запуске программы необходимо выбрать одну из трёх представленных функций, ввести интервал, в пределах которого будет строиться функция, и выбрать порядок полинома.
.2.2 Описание функций
Процедура procedure Tf1.bpaintClick предназначена для вывода построенной функции на экран.
Процедура procedure Tf1.ComboBoxnChange предназначена для изменения порядка полинома.
Процедура procedure Tf1.butassessmentClick предназначена для отображения оценки погрешности.
Процедура procedure Tf1.ComboBoxfunctionChange предназначена для выбора вида функции.
.2.3 Алгоритм программы
При нажатии кнопки «Показать график», на форме появятся два графика функции, которые были построены по выбранным и введённым данным.
При нажатии кнопки «Показать оценки погрешности», откроется файл, в котором отобразится погрешность.
.2.4 Выходные данные
На выходе программы получаем два графика одной функции, одна из которых построена с помощью полинома Лагранжа, и так же оценку погрешности интерполяционного метода.
.3 Комплекс технических средств
Программа функционирует на базе ПЭВМ. Для обработки телеметрической информации необходим IBM совместимый персональный компьютер конфигурации не ниже:
- процессор Pentium II-400;
- ОЗУ 64 Мб;
- винчестер 10 Гб;
- VESA-совместимый видео адаптер 2 Мб;
- клавиатура;
- мышь.
Необходимы программные средства:
операционная система не ниже Microsoft Windows 95;
- среда разработки Delphi 7 Enterprise Edition.
.4 Руководство пользователю
Запуск программы осуществляется двойным кликом левой кнопки мыши по файлу Interpolacia.exe. Макеты форм разработанного пользовательского приложения представлены в приложении Б.
После запуска на экране монитора появляется форма «Interpolacia». В самом начале необходимо из выпадающего списка выбрать нужный вид функции и вручную задать интервал [a, b]. Затем нажать кнопку «Показать графики» и на экране в специально выделенной области появится два графика. Чтобы интерполяционный многочлен совпал с самой функцией, следует изменять порядок полинома, выбирая нужный из выпадающего списка. Чтобы узнать погрешность интерполяционного метода, следует нажать кнопку «Показать оценки погрешности».
Для закрытия данной формы необходимо нажать красный крестик в правом верхнем углу.
.5 Анализ результатов
После выбора функции и порядка полинома и ввода интервала на экране строится 2 графика: сама функция и её интерполяционный многочлен. При порядке полинома равном двум, можно видеть небольшую погрешность (рисунок Б.1), при повышении порядка полинома на единицу, погрешность так же остаётся (рисунок Б.2). Когда порядок полинома повышается до четвёртого, график функции и график интерполяционного многочлена сливаются в один, и как следствие в данном случае погрешность становится равной нулю (рисунок Б.3).
Заключение
В данной курсовой работе был изучен интерполяционный метод. По заданной функции был построен её график и интерполяционный многочлен, который был найден с помощью формулы интерполяционного полинома Лагранжа. Данные графики приведены на рисунке Б.1 в приложении Б.
В последующих рисунках приложения Б также показаны графики, но с различным порядком полинома. Смотря на эти графики, можно сделать вывод, что чем выше полином, тем более точным к исходному графику функции получается интерполяционный многочлен. Тем самым уменьшается оценка погрешности приведённых графиков, которая показана на рисунке Б.4 приложения Б.
Список использованной литературы
1 Астапов Ю.М., Медведев В.М. Статистическая теория систем автоматического регулирования и управления. - М.:Наука, Главная редакция физико-математической литературы, 1982.-305с.
#"justify">Приложение А
(Листинг программы)
unit MainUnit;
, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ExtCtrls, ComCtrls;
= class(TForm): TButton;: TLabeledEdit;: TLabeledEdit;: TComboBox;: TComboBox;: TButton;: TPanel;: TImage;: TLabel;: TLabel;: TImage;bpaintClick(Sender: TObject);ComboBoxnChange(Sender: TObject);FormCreate(Sender: TObject);butassessmentClick(Sender: TObject);ComboBoxfunctionChange(Sender: TObject);FormResize(Sender: TObject);
{ Private declarations }
{ Public declarations };
: Tf1;
ReadFileUnit, GraphicF;
{$R *.dfm}
elem=extended;
maxn=20;
x,y:array[0..maxn+1] of elem;:array[1..maxn+1,1..maxn+2] of elem;
Продолжение ПРИЛОЖЕНИЯ А
n:byte;
ListG:TListG;
f(const x:elem):elem;f1.ComboBoxfunction.ItemIndex=0 then f:=sin(pi*x)if f1.ComboBoxfunction.ItemIndex=1 then f:=cos(pi*x)f:=(x*x-1)*sin(4*x);;
Lagrange(const x0:elem):elem;s,p:elem;,j:byte;:=0;i:=0 to n do:=1;:=0;j<i do:=p*(x0-x[j])/(x[i]-x[j]);(j);;:=i+1;j<=n do:=p*(x0-x[j])/(x[i]-x[j]);(j);;:=s+y[i]*p;;:=s;;
Polynom(const x:elem):elem;:=Lagrange(x);
Tf1.bpaintClick(Sender: TObject);.ComboBoxnChange(f1.ComboBoxn);ledita.Text='' then ledita.Text:='0';(leditb.text='')or(strtofloat(ledita.Text)>=strtofloat(leditb.Text)) then.Text:=floattostr(strtofloat(ledita.Text)+1);.xBegin:=StrToFloat(ledita.Text);.xEnd:=StrToFloat(leditb.Text);
Продолжение ПРИЛОЖЕНИЯ А
end;
Tf1.ComboBoxnChange(Sender: TObject);h:elem; i,j:byte;:=strtoint(f1.comboboxn.Items[f1.ComboBoxn.ItemIndex]);:=strtoint(comboboxn.Text);
ledita.Text='' then ledita.Text:='0';(leditb.text='')or(strtofloat(ledita.Text)>=strtofloat(leditb.Text)) then.Text:=floattostr(strtofloat(ledita.Text)+1);
:=(strtofloat(leditb.Text)-strtofloat(ledita.Text))/n;i:=0 to n do[i]:=strtofloat(ledita.Text)+i*h;[i]:=f(x[i]);;
i:=1 to n+1 do[i,1]:=strtofloat(ledita.Text)+(i-1)*h;[i,2]:=f(rr[i,1]);;j:=3 to n+2 doi:=1 to n+3-j do rr[i][j]:=(rr[i][j-1]-rr[i+1][j-1])/(rr[i][1]-rr[i+j-2,1]);;
Tf1.FormCreate(Sender: TObject);i:byte;:=TListG.Create;.SetCountFunction(2);.MFunc[0]:=f;.MFunc[1]:=Polynom;.Image:=im;
.Caption:=application.Title;.ItemIndex:=0;.ComboBoxnChange(comboboxn);.Picture.Bitmap.Width:=Screen.Width;.Picture.Bitmap.Height:=Screen.Height;.Items.Clear;i:=2 to maxn do comboboxn.Items.Add(inttostr(i));.ItemIndex:=0;.Click;
.Canvas.Pen.Color:=clBlack;
Продолжение ПРИЛОЖЕНИЯ А
im2.Canvas.Brush.Color:=$dfb300;
im2.Canvas.FillRect(Rect(5,5,13,13));.Canvas.Brush.Color:=clWhite;
.Canvas.TextOut(15,1,' --- Функций f(x)');
.Canvas.Brush.Color:=$257df4;.Canvas.FillRect(Rect(5,25,13,33));.Canvas.Brush.Color:=clWhite;2.Canvas.TextOut(15,21,' --- Интерполяционный многочлен');
end;
Tf1.butassessmentClick(Sender: TObject);h=1000;max,xm,x,a,b,r:elem;,:integer;:textfile;:string;
:='Assessment_Lagrange.txt';
(g,s);(g);
f1.ledita.Text='' then f1.ledita.Text:='0';(f1.leditb.text='')or(strtofloat(f1.ledita.Text)>=strtofloat(f1.leditb.Text)) then.leditb.Text:=floattostr(strtofloat(f1.ledita.Text)+1);
:=strtofloat(f1.ledita.Text);:=strtofloat(f1.leditb.Text);
:=(b-a)/h;(g,'f(x)=',f1.ComboBoxfunction.Text,' x belong [',a:7,',',b:7,']');(g,'n':3,' ','Assessment');(g);
:=f1.ComboBoxn.ItemIndex;
f1.ComboBoxn.ItemIndex:=0;
f1.ComboBoxnChange(f1.ComboBoxn);i:=2 to maxn do:=a;:=-1;x<=b do
Продолжение ПРИЛОЖЕНИЯ А
begin
r:=abs(f(x)-Polynom(x));
if r>max then max:=r;:=x+xm;
;(g,n:3,' ',max:11);.ComboBoxn.ItemIndex:=f1.ComboBoxn.ItemIndex+1;.ComboBoxnChange(f1.ComboBoxn);;
.ComboBoxn.ItemIndex:=ind;.ComboBoxnChange(f1.ComboBoxn);
(g);.Memo1.Lines.LoadFromFile(s);.Show;.Caption:=s;;
Tf1.ComboBoxfunctionChange(Sender: TObject);.ComboBoxnChange(comboboxn);;
podgon(s:string):string;length(s)<25 do s:=s+' ';:=s;;
Tf1.FormResize(Sender: TObject);.Click;;
.
Приложение Б
(Результат работы программы)
Рисунок Б.1 - Графики синусоиды со вторым порядком полинома
Рисунок Б.2 - Графики синусоиды с третьим порядком полинома
Рисунок Б.3 - Графики синусоиды с четвёртым порядком полинома
Рисунок Б.4 - Оценка погрешности интерполяционного метода