Автор: Пользователь скрыл имя, 16 Февраля 2013 в 14:05, контрольная работа
Аппроксимация, или приближение —математический метод, состоящий в замене одних математических объектов другими, в том или ином смысле близкими к исходным, но более простыми. В нашем случае, аппроксимация заключается в том, что используя имеющуюся информацию по f(x) можно рассмотреть другую функцию φ(y) близкую в некотором смысле к f(x), позволяющую выполнить над ней соответствующие операции и получить оценку погрешность такой замены.
Содержание
Введение
Аппроксимация, или приближение —математический метод, состоящий в замене одних математических объектов другими, в том или ином смысле близкими к исходным, но более простыми. В нашем случае, аппроксимация заключается в том, что используя имеющуюся информацию по f(x) можно рассмотреть другую функцию φ(y) близкую в некотором смысле к f(x), позволяющую выполнить над ней соответствующие операции и получить оценку погрешность такой замены.
Аппроксимация позволяет исследовать числовые характеристики и качественные свойства объекта, сводя задачу к изучению более простых или более удобных объектов (например, таких, характеристики которых легко вычисляются, или свойства которых уже известны).
Как известно, между величинами может существовать точная (функциональная) связь, когда одному значению аргумента соответствует одно определенное значение, и менее точная (корреляционная) связь, когда одному конкретному значению аргумента соответствует приближенное значение или некоторое множество значений функции, в той или иной степени близких друг к другу.
При выборе аппроксимации следует исходить из конкретной задачи исследования. Обычно, чем более простое уравнение используется для аппроксимации, тем более приблизительно получаемое описание зависимости. Поэтому важно считывать, насколько существенны и чем обусловлены отклонения конкретных значений от получаемого тренда. Также очень важно уловить общую закономерность, которая в данном случае наиболее логично и с приемлемой точностью выражается именно двухпараметрическим уравнением степенной функции.
В результате эксперимента получена зависимость, представленная в таблице:
x |
1 |
1.5 |
2 |
2.5 |
3 |
3.5 |
4 |
4.5 |
5 |
Y |
6.5 |
20.38 |
46.4 |
88.63 |
151.1 |
237.9 |
535 |
500.3 |
648.5 |
где величина Y является функцией аргумента x.
Ax3+Cx+B
Необходимо:
-функцию, заданную таблично, аппроксимировать, используя метод наименьших квадратов;
- построить линию тренда;
- вычислить числовые характеристики функции Y(x);
- написать программу на языке Паскаль;
-сравнить результаты работы программы на языке Паскаль и их соответствии контрольному просчету.
При анализе эмпирических данных возникает необходимость найти в явном виде функциональную зависимость между величинами х и Y, которые получены в результате измерений.
Метод наименьших квадратов - метод оценки параметров модели на основании экспериментальных данных, содержащих случайные ошибки.
В основе метода лежат следующие рассуждения: при замене точного (неизвестного) параметра модели приблизительным значением необходимо минимизировать разницу между экспериментальными данными и теоретическими. Это позволяет рассчитать параметры модели с помощью метода наименьших квадратов с минимальной погрешностью.
Мерой разницы в методе наименьших квадратов служит сумма квадратов отклонений действительных (экспериментальных) значений от теоретических. Выбираются такие значения параметров модели, при которых сумма квадратов разностей будет наименьшей.
Необходимо определить параметры функции Y = A*x3+C*x+B.
Составим функцию: ∑ (Yp -Yt ) = ∑ (Yp - A*x 3-C* x -B) =>min
F' =-2∑ (Yp - A* x -C* x -B)* x =-2∑ (Yp * x -A* x -C* x -B* x ) = 0;
F'c=-3∑ (Yp - A* x 3-C* x - B)* x3 =-3∑ (Yp * x 3-A* x 6-C* x 4-B* x 3) = 0;
F'b=-3∑ (Yp - A* x 3-C* x -B)* x=-3∑ (Yp *x - A* x 4-C* x 2-B) = 0;
Запишем систему уравнений:
n*B+C*∑ x +A*∑ x 3= Yp ;
B*∑ x +C*∑ x +A*∑ x 4=∑ Yp * x ;
B*∑ x 3+C*∑ x 4+A*∑ x 6=∑ Yp * x 3.
Для нахождения параметров А, В, С необходимо решить эту систему линейных алгебраических уравнений.
Имеем две матрицы:
- матрица коэффициентов при неизвестных
n ∑ x ∑ x 3
А = ∑ x ∑ x ∑ x 4
∑ x 3 ∑ x 4 ∑ x 6
∑QY
В = ∑ Yp * x
∑ Yp * x 3
Для нахождения коэффициентов решим эту систему уравнений использую метод Крамера для решения матриц.
Составим главный определитель d1:
d= x6 x4 x3
x4 x2 x
x3 x n
Составим d1,d2,d3 используя матрицу В:
d1= y x3 x4 x3
yx x2 x
y x n
d2= x6 y x3 x3
x4 yx x
x3 y n
d3= x6 x4 y x3
x4 x2 yx
x3 x y
Затем находим коэффициенты: формулам:
А=d1/d;
C=d2/d;
B=d3/d;
После чего можем записать уравнение: Y(x)=A*x3+C*x+B с найденными коэффициентами.
Блок-схема реализует циклический процесс вычисления функции и содержит следующие блоки:
3-4. Формирование цикла
5-6. Вычисление сумм S_x, S_xY, S_x2,S_x3, S_x4,S_x6, S_x3Y,S_Y
7-10.Вычисление матриц Δ, Δ1,Δ2,Δ3
11-13. Вычисление коэффициентов A,C,B
14-15. Нахождение теоретического значения Yt
16.Вывод коэффициентов
17. Конец алгоритма
№ п/п |
Наименование данных |
Обозначение в блок-схеме |
Обозначение в програм-ме |
Тип Переменной |
1 |
Число аппроксимации, количество элементов в массиве |
n |
n |
целочисленная |
2 |
Счетчик цикла |
i |
i |
целочисленная |
3 |
Файловая переменная для исходного файла |
ish |
File_ish |
текстовая |
4 |
Файловая переменная для файла с результатами |
rez |
File_rez |
текстовая |
5 |
Аргумент функции |
x |
x[i] |
matr |
6 |
Ордината функции (практическое значение) |
y |
yp[i] |
matr |
7 |
Ордината функции (теоретическое значение) |
yti |
yt[i] |
matr |
8 |
Суммы |
S_x |
S_x |
действительная |
9 |
S_y |
S_yp |
действительная | |
10 |
S_x2 |
S_x2 |
действительная | |
11 |
S_x3 |
S_x3 |
действительная | |
12 |
S_x4 |
S_x4 |
действительная | |
13 |
S_xy |
S_xyp |
действительная | |
14 |
S_x3y |
S_x2yp |
действительная | |
15 |
Элементы матрицы Δ |
Δ1 |
d1 |
matr |
16 |
Δ2 |
d2 |
matr | |
17 |
Δ3 |
d3 |
matr | |
18 |
Коэффициенты функции |
А |
At |
действительная |
19 |
В |
Bt |
действительная | |
20 |
С |
Ct |
действительная |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Memo_ish: TMemo;
B_open: TButton;
GroupBox2: TGroupBox;
Memo_rez: TMemo;
B_View: TButton;
B_Save: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
OpenDialog2: TOpenDialog;
B_close: TButton;
B_clear: TButton;
procedure B_openClick(Sender: TObject);
procedure B_SaveClick(Sender: TObject);
procedure B_viewClick(Sender: TObject);
procedure B_closeClick(Sender: TObject);
procedure B_clearClick(Sender: TObject);
procedure B_calcClick(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
Const n=9;
Var
x,yp:array [1..10] of real;
S_x3y,S_x3,S_x6,S_y,S_x,S_x2,
d,d1,d2,d3:real;
FName_ish:string;
FName_rez:string;
File_ish,File_rez:TextFile;
A,C,B:real;
procedure TForm1.B_openClick(Sender: TObject);
Var i:integer;
begin
if OpenDialog1.Execute then
begin
FName_ish:=OpenDialog1.
Memo_ish.Lines.LoadFromFile(
AssignFile(File_ish,FName_ish)
Reset(File_ish);
for i:=1 to n do
read(File_ish,x[i],Yp[i]);
readln(File_ish);
end;
end;
procedure TForm1.B_SaveClick(Sender: TObject);
Var i:integer;
begin
if SaveDialog1.Execute then
begin
FName_rez:=SaveDialog1.
AssignFile(File_rez,FName_rez)
Rewrite(File_rez);
writeln(File_rez,'Òåîðåòè÷
for i:=1 to n do
writeln (File_rez,Yp[i]:5:3);
writeln(File_rez);
writeln (File_rez,'===================
writeln(File_rez);
writeln(File_rez,'============
writeln(File_rez,'Èñêîìîå
writeln(File_rez,'y='+
+FormatFloat('0.00',C)+'x+'+
Memo_rez.Lines.Add('y='+
+' x*x*x+ '+FormatFloat('0.00',C)+'x+'+
CloseFile(File_rez);
end;
end;
procedure TForm1.B_closeClick(Sender: TObject);
begin
close;
end;
procedure TForm1.B_clearClick(Sender: TObject);
begin
Memo_ish.clear;
Memo_rez.clear;
end;
procedure TForm1.B_ViewClick(Sender: TObject);
begin
if OpenDialog2.Execute then
begin
FName_ish:=OpenDialog2.
Memo_rez.Lines.LoadFromFile(
end;
end;
procedure TForm1.B_calcClick(Sender: TObject);
var i: integer;
begin
S_x:=0;
S_x3y:=0;
S_x3:=0;
S_x6:=0;
S_y:=0;
S_x2:=0;
S_x4:=0;
S_xy:=0;
for i:=1 to n do
begin
S_x3y:=S_x3y+x[i]*x[i]*x[i]*
S_x3:=S_x3+x[i]*x[i]*x[i];
S_x6:=S_x6+x[i]*x[i]*x[i]*x[i]
S_y:=S_y+yp[i];
S_x:=S_x+x[i];
Информация о работе Аппроксимация методом наименьших квадратов