Аппроксимация методом наименьших квадратов

Автор: Пользователь скрыл имя, 16 Февраля 2013 в 14:05, контрольная работа

Описание работы

Аппроксимация, или приближение —математический метод, состоящий в замене одних математических объектов другими, в том или ином смысле близкими к исходным, но более простыми. В нашем случае, аппроксимация заключается в том, что используя имеющуюся информацию по f(x) можно рассмотреть другую функцию φ(y) близкую в некотором смысле к f(x), позволяющую выполнить над ней соответствующие операции и получить оценку погрешность такой замены.

Работа содержит 1 файл

Аппроксимация (делфи).doc

— 366.50 Кб (Скачать)


Содержание

 

Введение

 

Аппроксимация, или приближение —математический метод, состоящий в замене одних математических объектов другими, в том или ином смысле близкими к исходным, но более простыми. В нашем случае, аппроксимация заключается в том, что используя имеющуюся информацию по f(x) можно рассмотреть другую функцию φ(y) близкую в некотором смысле к f(x), позволяющую выполнить над ней соответствующие операции и получить оценку  погрешность такой замены.

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

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1. Постановка задачи

 

В результате эксперимента получена зависимость, представленная в таблице:

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);

- написать программу  на языке Паскаль;

-сравнить результаты  работы программы на языке  Паскаль и их соответствии  контрольному просчету.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Описание математической модели  решения задачи

При анализе эмпирических данных возникает необходимость  найти в явном виде функциональную зависимость между величинами х  и 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.Описание алгоритма

 

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

  1. Начало
  2. Задание переменных S_x, S_xY, S_x2,S_x3, S_x4,S_x6, S_x3Y,S_Y значение 0;

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. Конец алгоритма

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5. Характеристика данных и их  условные обозначения

п/п

Наименование данных

Обозначение в блок-схеме

Обозначение в програм-ме

Тип

Переменной

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

действительная


 

 

 

 

 

 

 

 

 

 

 

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

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,S_x4,S_xy: real;

       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.FileName;

     Memo_ish.Lines.LoadFromFile(FName_ish);

     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.FileName;

           AssignFile(File_rez,FName_rez);

           Rewrite(File_rez);

           writeln(File_rez,'Òåîðåòè÷åñêèå çíà÷åíèÿ y :');

           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', A)+' x*x*x +'

           +FormatFloat('0.00',C)+'x+'+FormatFloat('0.00',B));

           Memo_rez.Lines.Add('y='+FormatFloat('0.00',A)

          +' x*x*x+ '+FormatFloat('0.00',C)+'x+'+FormatFloat('0.00',B));

           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.FileName;

         Memo_rez.Lines.LoadFromFile(FName_ish);

        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]*yp[i];

S_x3:=S_x3+x[i]*x[i]*x[i];

S_x6:=S_x6+x[i]*x[i]*x[i]*x[i]*x[i]*x[i];

S_y:=S_y+yp[i];

S_x:=S_x+x[i];

Информация о работе Аппроксимация методом наименьших квадратов