Метод наименьших квадратов

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Математика
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,1 Мб
  • Опубликовано:
    2013-02-12
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Метод наименьших квадратов

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное учреждение высшего профессионального образования

Кафедра АСОИУ






ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

по дисциплине «Вычислительная математика»

на тему «Метод наименьших квадратов»











Ижевск 2012

Введение

Метод наименьших квадратов - один из методов теории ошибок для оценки неизвестных величин по результатам измерений, содержащим случайные ошибки.

Метод наименьших квадратов применяется также для приближённого представления заданной функции другими (более простыми) функциями и часто оказывается полезным при обработке различного рода измерений.

Метод наименьших квадратов был предложен К.Ф. Гауссом и А. Лежандром. Ныне способ представляет собой один из важнейших разделов математической статистики и широко используется для статистических выводов в различных областях науки и техники.

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

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

1.     
Обзор существующих методов аппроксимации


.1      Общая постановка задачи метода наименьших квадратов

Пусть функция  принимает в точках  значения . Аналитическое выражение функции при этом не известно, данные имеют неустранимую погрешность, а количество точек велико .

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

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


минимальна.

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

1.2   
Аппроксимация многочленами

Пусть дана экспериментальная таблица и требуется составить многочлен, степени не выше часто


Данный многочлен должен удовлетворять условию:


где  минимум из всех возможных отклонений[2].

Графически это представлено на рисунке 1.1.

Рисунок 1.1 - Метод наименьших квадратов

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


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

Данную систему можно представить в виде:


и решив её, можно получить коэффициенты  наилучшим образом сглаживающих функцию. Если в качестве  взять , то полученный многочлен будет являться интерполяционным полиномом.

1.3    Аппроксимация прямой

 

В данном случае функция имеет вид , а коэффициенты находятся из условия, что


имеет наименьшее значение[3].

Для нахождения коэффициентов, необходимо решить следующую систему уравнений:


Решив данную систему методом Крамера, получим следующие выражения для нахождения :


1.4    Аппроксимация показательной функцией

Степенная зависимость имеет вид

Нахождение параметров показательной функции может быть сведено к нахождению коэффициентов линейной функции. Покажем это.

Прологарифмируем функцию, в результате чего получим равенство:


Введем новую переменную

тогда будет функцией от .

Обозначим:  

в таком случае задача свелась к нахождению коэффициентов линейной функции

Для нахождения коэффициентов функции необходимо прологарифмировать значения  и , т.е. из таблицы 1.1, получить таблицу 1.2.

Таблица 1.1 - Исходная таблица функции

Таблица 1.2 - Прологарифмированная таблица функции

После этого по таблице 1.2 необходимо найти параметры функции вида


После этого необходимо найти значение  по следующей формуле:


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

1.5   
Аппроксимация экспонентой

Данная функция имеет следующий вид:


Воспользуемся приемом из пункта 1.4 и прологарифмируем выражение:


Введем обозначение:

Таким образом мы можем вновь придти к нахождению коэффициентов линейной функции следующего вида:


Однако для нахождения коэффициентов необходимо прологарифмировать значения функции из таблицы 1.1, как показано в таблице 1.3.






Таблица 1.3 - Таблица с прологарифмированными значениями функции

После нахождения коэффициентов необходимо найти значение  по следующей формуле:


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

1.6    Аппроксимация дробно-линейной функцией

В данном случае идет поиск коэффициентов функции следующего вида:


Перепишем равенство следующим образом:


Из последнего равенства видно, что для нахождения коэффициентов, нужно составить по таблице 1.1 новую таблицу 1.4.

Таблица 1.4 - Таблица для нахождения коэффициентов для дробно-линейной функции

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

.7      Аппроксимация дробно-рациональной функцией

Дробно-рациональная функция имеет следующий вид:


Для того, чтобы найти ее коэффициенты, преобразуем ее к следующему виду:


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

Для расчетов, нужно по таблице 1.1 составить таблицу 1.5.






Таблица 1.5 - Таблица для нахождения дробно-рациональной функции

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

2.     
Математическая постановка задачи аппроксимации функции


.1      Аппроксимация полиномом

Входные данные:

Множество точек такое, что

.

 - требуемая степень полинома

Выходные данные:

Множество  - коэффициенты полинома

Аналитическое решение:


Алгоритм аппроксимации полиномом:

)        - матрица для решения

)        - вектор ответов

)        Для  от 0 до  делать

.1) Для от 0 до делать

.1.1) Для  от 0 до  делать

.1.1.1)

.1.1.1) Конец делать по

.1.1) Конец делать по

.1) Конец делать по

)        Для  от 0 до  делать

.1) Для  от 0 до  делать

.1.1)

.1.1) Конец делать по

.1) Конец делать по

) Решаем СЛАУ .

) Вернуть

Графическое представление алгоритма:

На рисунке 2.1 представлена схема алгоритма.

Рисунок 2.1 - Графическое представление алгоритма

2.2    Аппроксимация различными кривыми, нахождение коэффициентов которых сводиться к нахождения коэффициентов прямой

Входные данные:

Множество точек такое, что

.

Выходные данные:

ккоэффициенты функции

Аналитическое решение:

наименьший квадрат аппроксимация многочлен

где  - для линейной функции,

 - для степенной функции,

 - для экспоненты,

 - для дробно-линейной функции

 - для дробно-рациональной функции.

Алгоритм решения поставленной задачи:

)       

)        Для каждого элемента  провести преобразования по таблицам 1.1-1.5 (в зависимости от того, какого вида функцию необходимо найти)

)        Для от 0 до n делать

.1)

.2)

.3)

.4)

.5) Конец делать по

)

) Если ищем экспоненту или степенную функцию, то  иначе

Графическое представление алгоритма:

На рисунке 2.2 изображена схема алгоритма.

Рисунок 2.2 - Схема алгоритма решаемой задачи

3.     
Тестирование разработанной программы

На рисунке 3.1 представлена работа программы на одном из тестов.

Рисунок 3.1 - Работа программы во время одного из тестов

Тестирование производилось на наборе точек, согласно варианту (18 вариант).

Исходный набор точек представлен в таблице 3.1.

1,800

2,750

3,800

5,250

6,150

6,900

8,150

9,200

9,850

2,250

2,400

2,083

2,283

2,467

2,417

2,717

3,017

3,317

4,033

10,550

10,950

11,650

12,750

14,150

15,000

15,950

17,200

18,150

19,450

3,850

4,300

4,483

4,250

4,800

4,917

5,133

5,450

5,300

5,550

20,450

20,700

21,850

22,800

23,550

23,800

24,850

25,350

26,050

27,850

5,417

5,833

6,033

6,367

6,667

7,150

6,950

7,400

7,633

7,783

Таблица 3.1 - Набор точек для тестов

В ходе первого теста было выполнено приближение полиномом не выше второй степени. Результаты теста представлены на рисунке 3.2.

Рисунок 3.2 - Аппроксимация полиномом второй степени

Из рисунка видно, что был получен следующий полином:

Сумма отклонений достаточно небольшая, так что можно говорить, что аппроксимация в данном случае довольно точная.

В следующем тесте в качестве аппроксимирующей функции использовалась прямая. Результат показа на рисунке 3.3.

Рисунок 3.3 - Аппроксимация прямой

Получившаяся прямая задается следующим уравнением:


Сумма отклонений при этом составляет , что больше, чем при аппроксимации полиномом второй степени, но разница менее , так что можно сказать, что функции аппроксимирую набор точек примерно с одинаковой точностью.

Следующее приближение было выполнено с помощью степенной функции. Результат показан на рисунке 3.4.

Рисунок 3.4 - Аппроксимация степенной функцией

Получившаяся зависимость:

Сумма отклонений при этом равна , что примерно 4-5 раз хуже, чем при аппроксимации прямой или параболой.

В качестве следующей функции была выбрана экспонента. Результат работы программы изображен на рисунке 3.5.

Рисунок 3.5 - Аппроксимация экспонентой

Получавшая зависимость имеет вид:

При этом сумма квадратов отклонений равна , в 1.5-2 раза хуже, чем приближение прямой или параболой. Однако приближение экспонентой точнее, чем приближение степенной функцией, примерно в 2.5 раза.

Результаты приближения дробно-линейной функцией изображены на рисунке 3.6.

Рисунок 3.6 - Аппроксимация дробно-линейно функцией

Аппроксимирующая функция имеет следующий вид:


Сумма отклонений . Сумма отклонений дробно-линейной функции значительно выше, чем у всех предыдущих функций (от 4 до 20 раз больше).

В качестве последней функции была выбрана дробно-рациональная функция. Результаты работы представлены на рисунке 3.7.

Рисунок 3.7 - Аппроксимация дробно-рациональной функцией

Получившаяся зависимость выглядит следующим образом:


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

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

Заключение

В результате проделанной работы были изучены способы аппроксимации функции методом наименьших квадратов. В качестве аппроксимирующих кривых были выбраны: полином, прямая, степенная функция, экспонента, дробно-линейная функция и дробно-рациональная функция.

Для каждого различного набора точек, наилучшим образом сглаживать его будет различная функция.

Был составлен алгоритм решения задачи различными способами.

На основании алгоритмов была составлена программа, реализующая данные методы.

Для тестового набора данных было установлено, что наилучшее сглаживание дает парабола. Также достаточно хорошо слаживает набор точек прямая.

Список литературы

1    А.А. Амосов, Ю.А. Дубинский, Вычислительные методы для инженеров. - М.: Высш.шк., 1994. - с.544

      Н.С. Бахвалов, Численные методы. - М.: Наука, 1975. - с.190

3       Б.П. Демидович, Основы вычислительной математики. - М.:Наука, 1966. -с.664

Приложение А (обязательное)

Текст программы

Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ComCtrls, ExtDlgs, StdCtrls, math, ExtCtrls,ShellAPI;

//типы функция= (fnLine,fnPower,fnExp,fnDrLine,fnDrRac,fnPolinom);

//структура для коэффицниетов не полинома= record,b:extended;:boolean;;

//точка на плоскостиd = record,y:extended;;= array of TPoint2d;= array of extended;= array of array of extended;= class(TForm): TListView;: TButton;: TOpenTextFileDialog;: TPaintBox;: TComboBox;: TLabel;: TLabel;: TEdit;: TEdit;: TLabel;: TButton;: TLabel;: TColorBox;: TMemo;: TButton;: TLabel;: TTrackBar;Button1Click(Sender: TObject);FormCreate(Sender: TObject);Button2Click(Sender: TObject);PaintBox1Paint(Sender: TObject);PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);TrackBar1Change(Sender: TObject);Button3Click(Sender: TObject);:boolean;:fnType;:Tmas;:TKoef;,cw:integer;

{ Private declarations }

//получить точки из файлаGetPointsOutFile(path:string);

//решить систему методом ГауссаSolveGauss(matrix:TMatrix):Tmas;

//получить коэффициенты полиномаGetPolinomKoef(points:TPointArray; m:integer):Tmas;

//получить коэффициенты не полиномаGetFuncKoef(points:TPointArray; fType:fnType):TKoef;

//значение функции от полиномаF(func:Tmas; x:extended):extended;

{ Public declarations };: TForm1;

{$R *.dfm}TForm1.Button2Click(Sender: TObject);points:TPointArray;,m: Integer;:fnType;:extended;(points,ListView1.Items.Count);I:= 0 to ListView1.Items.Count - 1 do[i].x:=strToFloat(ListView1.Items[i].Caption);[i].y:=strToFloat(ListView1.Items[i].SubItems[0]);;(comboBox1.ItemIndex) of

// установливаем тип фукнции

: fType:=fnPolinom;

: fType:=fnLine;

: fType:=fnPower;

: fType:=fnExp;

: fType:=fnDrLine;

: fType:=fnDrRac('Не выбран тип функции');;;;

//если полиномfType=fnPolinom then:=strToInt(edit2.Text);:=GetPolinomKoef(points,m);.Clear;.Lines.Add('');i:= m downto 1 do.Lines[0]:=memo1.Lines[0] +('%.4fx^%d+',[polinom[i],i]);.Lines[0]:=memo1.Lines[0] + Format('%.4f',[polinom[0]]);:=true;:=fnPolinom;:=0;I:= 0 to length(points) - 1 do:=sum + power((points[i].y-F(polinom,points[i].x)),2);.Text:=floatToStr(sum);;

//если не полином))))(fType<>fnPolinom) then:=GetFuncKoef(points,fType);(not koef.isKorret) then.Lines[0]:='Не возможно по данным точкам посторить выбранную кривую';:=false;;;:=true;:=fType;fType of

//обрабатываем в зависимости от типа:.Lines[0]:=Format('f(x) = %.4fx+%.4f',[koef.k,koef.b]);:=0;I:= 0 to length(points) - 1 do:=sum + power((points[i].y-(koef.k*points[i].x+koef.b)),2);.Text:=floatToStr(sum);;:.Lines[0]:=Format('f(x) = %.4fx^%.4f',[koef.b,koef.k]);:=0;I:= 0 to length(points) - 1 do:=sum + power((points[i].y-(koef.b*power(points[i].x,koef.k))),2);.Text:=floatToStr(sum);;:.Lines[0]:=Format('f(x) = %.4fe^%.4fx',[koef.b,koef.k]);:=0;I:= 0 to length(points) - 1 do:=sum + power((points[i].y-(koef.b*exp(koef.k*points[i].x))),2);.Text:=floatToStr(sum);;:.Lines[0]:=Format('f(x) = 1/(%.4fx+%.4f)',[koef.k,koef.b]);:=0;I:= 0 to length(points) - 1 do:=sum + power((points[i].y-(1/(koef.k*points[i].x+koef.b))),2);.Text:=floatToStr(sum);;:.Lines[0]:=Format('f(x) = x/(%.4fx+%.4f)',[koef.b,koef.k]);:=0;I:= 0 to length(points) - 1 do:=sum + power((points[i].y-(points[i].x/(koef.b*points[i].x+koef.k))),2);.Text:=floatToStr(sum);;;;.Repaint;;TForm1.Button3Click(Sender: TObject);

//запускаем руководство пользователя(Handle, nil, PWideChar('Справка.docx'),nil

, nil, SW_SHOW);;TForm1.FormCreate(Sender: TObject);.Text:='Аппроксимация';:=false;:=nil;.isKorret:=false;:=PaintBox1.Height div 2;:=PaintBox1.Width div 6;;TForm1.F(func: Tmas; x: Extended):extended;i:integer;:=0;I:= 0 to length(func) - 1 do:=result + func[i]*power(x,i);;Tform1.GetFuncKoef(points: TPointArray; fType: fnType):Tkoef;k,A:extended;:integer;,Sxx,Sy,Sxy:extended;:word;:integer;:=0;:=0; Sxx:=0; Sy:=0; Sxy:=0;fType of:I:= 0 to length(points) - 1 do(n);:=Sx+points[i].x;:=Sxx + power(points[i].x,2);:=Sy + points[i].y;:=Sxy + points[i].x*points[i].y;;;:I:= 0 to length(points) - 1 do(points[i].x<0.00000000001) or

(points[i].y<0.00000000001) then:=MessageBox(Handle,PChar(Format('Точка (%f; %f) не удовлетваряет формату.\n',

[points[i].x,points[i].y])+'Пропустить ее?'),Pchar('Не верная точка'),_ICONQUESTION+MB_YESNO+MB_DEFBUTTON2);Res=IDYes then continue;.isKorret:=false;;;;(n);:=Sx + ln(points[i].x);:=Sxx + power(ln(points[i].x),2);:=Sy + ln(points[i].y);:=Sxy + ln(points[i].x)*ln(points[i].y);;//for i;//fnPower:I:= 0 to length(points) - 1 do(points[i].x<0.00000000001) then:=MessageBox(Handle,PChar(Format('Точка (%f; %f) не удовлетваряет формату.\n',

[points[i].x,points[i].y])+'Пропустить ее?'),PChar('Не верная точка'),_ICONQUESTION+MB_YESNO+MB_DEFBUTTON2);Res=IDYes then continue;.isKorret:=false;;;(n);:=Sx + points[i].x;:=Sxx + power(points[i].x,2);:=Sy + ln(points[i].y);:=Sxy + points[i].x*ln(points[i].y);;//for i;//fnExp;:I:= 0 to length(points) - 1 do(abs(points[i].y)<0.00000000001) then:=MessageBox(Handle,PChar(Format('Точка (%f; %f) не удовлетваряет формату.\n',

[points[i].x,points[i].y])+'Пропустить ее?'),PChar('Не верная точка'),_ICONQUESTION+MB_YESNO+MB_DEFBUTTON2);Res=IDYes then continue;.isKorret:=false;;;(n);:=Sx + points[i].x;:=Sxx + power(points[i].x,2);:=Sy + 1/points[i].y;:=Sxy + points[i].x/points[i].y;;//for i;//fnDrLine;:I:= 0 to length(points) - 1 do(abs(points[i].y)<0.00000000001) or

[points[i].x,points[i].y])+'Пропустить ее?'),PChar('Не верная точка'),_ICONQUESTION+MB_YESNO+MB_DEFBUTTON2);Res=IDYes then continue;.isKorret:=false;;;(n);:=Sx + 1/points[i].x;:=Sxx + 1/power((points[i].x),2);:=Sy + 1/points[i].y;:=Sxy + 1/(points[i].x*points[i].y);;//for i;//fnDrRac;:.isKorret:=false;;;;//case of:=(n*Sxy-Sy*Sx)/(n*Sxx-Sx*Sx);:=(Sxx*Sy-Sx*Sxy)/(n*Sxx-Sx*Sx);(fType=fnExp) or (fType=fnPower) then A:=exp(A);.k:=k;.b:=a;.isKorret:=true;;TForm1.GetPolinomKoef(points: TPointArray; m:integer):Tmas;matrix:Tmatrix;,j,k:integer;(matrix,m+1,m+2);I:= 0 to length(matrix) - 1 doj:= 0 to length(matrix) - 1 dok:= 0 to length(points) - 1 do[i,j]:=matrix[i,j] + power(points[k].x,i+j);I:= 0 to length(matrix) - 1 doj:= 0 to length(points) - 1 do[i,m+1]:=matrix[i,m+1]+points[j].y*power(points[j].x,i);:=SolveGauss(matrix);;TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);:=x;:=y;.Repaint;;TForm1.PaintBox1Paint(Sender: TObject);p:TpointArray;,m:integer; //m - масштаб графика,y:integer;:real;:=trackBar1.Position;

//получаем точки(p,ListView1.Items.Count);I:= 0 to ListView1.Items.Count - 1 do[i].X:=strToFloat(listView1.Items[i].Caption);[i].Y:=strToFloat(ListView1.Items[i].SubItems[0]);;paintbox1.Canvas do.Color:=clBlack;(cw,0);(cw,PaintBox1.Height);(0,ch);(paintBox1.width,ch);

//устанавливаем точкиI:= 0 to length(p) - 1 do(round(p[i].x*m)-3+cw,-round(p[i].y*m)-3+ch,(p[i].x*m)+3+cw,-round(p[i].y*m)+3+ch);(bildFunction) thenfuncTYpe of:.Color:=colorBox1.Selected;:=p[0].x;(round(t*m)+cw,-round((koef.k*t+koef.b)*m)+ch);(t<p[length(p)-1].x) do:=round(t*m)+cw;:=-round((koef.k*t+koef.b)*m)+ch;(x,y);:=t+0.1;;//while;//fnLine;:.Color:=colorBox1.Selected;:=0;(round(t*m)+cw,-round((koef.b*power(t,koef.k))*m)+ch);(t<p[length(p)-1].x) do:=round(t*m)+cw;:=-round((koef.b*power(t,koef.k))*m)+ch;(x,y);:=t+0.1;;//while;//fnPower:.Color:=colorBox1.Selected;:=0;(round(t*m)+cw,-round(koef.b*exp(t*koef.k)*m)+ch);(t<p[length(p)-1].x) do:=round(t*m)+cw;:=-round(koef.b*exp(t*koef.k)*m)+ch;(x,y);:=t+0.1;;//while;//fnExp:.Color:=colorBox1.Selected;:=p[0].x;(round(t*m)+cw,-round(1/(koef.k*t+koef.b)*m)+ch);(t<p[length(p)-1].x) do(abs(koef.k*t+koef.b)>=0.001) then:=round(t*m)+cw;:=-round(1/(koef.k*t+koef.b)*m)+ch;(x,y);:=round((t+0.1)*m)+cw;:=-round(1/(koef.k*(t+0.1)+koef.b)*m)+ch;(x,y);;:=t+0.1;;//while;//fnDrLine;:.Color:=colorBox1.Selected;:=p[0].x;(round(t*m)+cw,-round(t/(koef.b*t+koef.k)*m)+ch);(t<p[length(p)-1].x) do(abs(koef.k*t+koef.b)>=0.001) then:=round(t*m)+cw;:=-round(t/(koef.b*t+koef.k)*m)+ch;(x,y);:=round((t+0.1)*m)+cw;:=-round((t+0.1)/(koef.b*(t+0.1)+koef.k)*m)+ch;(x,y);;:=t+0.1;;//while;//fnDrLine;;:.Color:=colorBox1.Selected;:=p[0].x;(round(t*m)+cw,-round(F(polinom,t))+ch);(t<p[length(p)-1].x) do:=round(t*m)+cw;:=-round(F(polinom,t)*m)+ch;(x,y);:=t+0.1;;//while;//fnDrLine;;;;//with;

//считываем точкиTForm1.Button1Click(Sender: TObject);(OpenTextFileDialog1.Execute) then(OpenTextFileDialog1.FileName);:=false;.Repaint;;;TForm1.GetPointsOutFile(path: string);f:TextFile;,y:extended;,str2,str3:string;:integer;.Clear;(f,path);(f);(not eof(f)) do(f,str);:=Pos(' ',str);:=copy(str,1,token-1);:=copy(str,token+1,Length(str)-length(str2));

// заменяем точки на запятые для корректного конвертирования:=Pos('.',str2);(Token>0) then str2[token]:=',';:=Pos('.',str3);(Token>0) then str3[token]:=',';:=StrToFloat(str2);:=StrToFloat(str3);.Items.Add;.Items[listView1.Items.Count-1].Caption:=str2;.Items[ListView1.Items.Count-1].SubItems.add(str3);;EConvertError do ShowMessage('Неверный формат данных');EFileNotFoundException do ShowMessage('Файл не найден');EInOutError do ShowMessage('Выбран не верный файл');;(f);;swapLine(Sys:Tmatrix; a,b:integer);i:integer;:extended;i:= 0 to length(sys[0]) - 1 do:=sys[a,i];[a,i]:=sys[b,i];[b,i]:=buf;;; //SwapLineTForm1.SolveGauss(matrix:TMatrix):Tmas;answer:Tmas;,j,k,a,b,L1,L2:integer;,max:extended;:=Length(matrix);:=Length(matrix[0]);

//приводим матрицу к диаганальному видуI:= 0 to a-2 do:=i;:=i;:=abs(matrix[i,i]);j:= i to a -1 do(abs(matrix[j,i])>max) then:=abs(matrix[j,i]);:=j;;(L1<>L2) then swapLine(matrix,L1,L2);j:= i+1 to a - 1 do:= matrix[j,i]/matrix[i,i];k:= i to b - 1 do[j,k]:=matrix[j,k]-buf*matrix[i,k];;//end for j; //end for i(answer,a);

//вычитываем ответыI:= a-1 downto 0 do:=matrix[i,b-1];j:= b-2 downto i+1 do buf:=buf-matrix[i,j]*answer[j];[i]:=buf/matrix[i,i];;//end for i:=answer;;TForm1.TrackBar1Change(Sender: TObject);.Repaint;;.

Приложение Б (обязательное)


Руководство пользователя

Описание программы:

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

Виды аппроксимирующих кривых: многочлен, прямая, степенная функция, экспонента, дробно-линейная функция, дробно-рациональная функция.

Системные требования:

Процессор: 800 МГц и выше.

Операционная система: Windows XP и выше.

Стартовое окно программы изображено на рисунке Б.1.

Рисунок Б.1 - Стартовое окно программы

Получение набора точек.

Для того чтобы получить набор точек, необходимо нажать кнопку «Считать точки», после чего в появившемся окне выбрать файл с точками.

Выбор типа аппроксимирующей прямой и выполнение расчетов.

Для того чтобы выполнить посторенние приближения, необходим в списке, обозначенном на рисунке Б.2 выбрать тип кривой, после чего нажать кнопу «Выполнить расчет». Если в качестве кривой, выбран полином, то также необходимо в поле «Максимальная степень полинома» ввести неотрицательное целое число, показывающее, полином какой степени необходимо построить.

Рисунок Б.2 - Выбор аппроксимирующей кривой

Результаты вычислений.

Результаты вычислений буду отражены в полях «Получившаяся зависимость» и «Сумма отклонений». В поле «Получившаяся зависимость» будет выведенная аппроксимирующая функция, в поле «Сумма отклонений», будет выведенная сумма квадратов отклонений кривой от функции.

Графическое представление результатов и управление им.

Графическое представление результата будет выведено в поле, выделенном на рисунке Б.3.

Рисунок Б.3 - Аппроксимирующая кривая

Если щелкнуть мышью в любое место графика, то начало координат будет принесено в данное место.

Масштабирование осуществляется придвижением ползунка «Zoom» вправо и влево.

Изменить цвет кривой можно, выбрав в списке «Цвет кривой» любой цвет.

Похожие работы на - Метод наименьших квадратов

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!