Программа на объектно-ориентированном языке Delphi7 для математической задачи определения параметров линейной и показательной регрессии

Автор работы: Пользователь скрыл имя, 12 Июля 2011 в 10:09, курсовая работа

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

Система Delphi7 использует технологию визуального программирования и предназначена для разработки приложений «под Windows». Без этой системы программирование «под Windows» достаточно сложно и кропотливо, требует большого умения, изобретательности, творческого потенциала и выдержки. Delphi могут использовать программисты со средним уровнем подготовки, основательно знающие Pascal - язык программирования высокого уровня.

Файлы: 1 файл

Курсовая.doc

— 219.50 Кб (Скачать файл)

    Введение

    Система Delphi7 использует технологию визуального  программирования и предназначена  для разработки приложений «под Windows». Без этой системы программирование «под Windows» достаточно сложно и кропотливо, требует большого умения, изобретательности, творческого потенциала и выдержки. Delphi могут использовать программисты со средним уровнем подготовки, основательно знающие Pascal - язык программирования высокого уровня.

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

    Объектно-ориентированное  визуальное программирование в Delphi выводит  разработку приложений на новую ступень  развития программирования. Она относится  к системам быстрой разработки приложений (RAD - Rapid Application Development). При разработке интерфейса пользователя в Delphi традиционные структурные методы уступают место итерационным подходам, выполненным в интерактивном режиме Delphi. Это быстро развивающаяся система. В процессе ее развития были выпущены версии от Delphi до Delphi7. Каждая следующая версия дополняла предыдущую и повышала требования к ресурсам ПК. Растут размеры выполняемых модулей приложений.

    Все версии Delphi совместимы снизу вверх, т.е. все приложения, разработанные для более ранних версий, работают без изменения в более поздних версиях Delphi. Более поздние версии Delphi дополнены средствами для работы с серверами Access, CORBA, Microsoft Transaction Server(MTS), серверами COM Windows. Библиотеки компонентов более поздних версий дополняются новыми компонентами.

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

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

    Пусть в результате некоторого эксперимента получена выборка из m пар элементов . Необходимо найти функцию, которая «наилучшим» образом приближала бы исходную функцию . Критерием качества приближения целевой функцией обычно является среднеквадратичная ошибка: сумма квадратов разности значений регрессионной модели и зависимой переменной для всех значений независимой переменной в качестве аргумента. Регрессионная модель есть функция независимой переменной и параметров с добавленной случайной переменной. Параметры модели настраиваются таким образом, что модель наилучшим образом приближает данные.

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

    

,

    где , для .

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

    Описание  численного метода решения задачи

    Линейный  парный регрессионный анализ заключается  в определении параметров эмпирической линейной зависимости , описывающей связь между некоторым числом N пар значений xi и yi, обеспечивая при этом наименьшую среднеквадратичную погрешность. Графически эту задачу можно представить следующим образом – в облаке точек требуется провести прямую так, чтобы величина всех отклонений отвечала условию

    

,

    где – зависимость (рис.1).

    

    Рисунок 1. Линейная регрессия

    Для этого нужно приравнять к нулю частные производные и :

    

     .

    

     .

    Тогда

    

    Решая эту систему методом Крамера, получим следующие выражения для коэффициентов линейной регрессии:

     ,

     .

    Показательная регрессия заключается в определении  параметров эмпирической показательной зависимости , описывающей связь между некоторым числом N пар значений xi и yi.

    Для получение параметров a и b показательной функции необходимо решить системы уравнений

    

 

     схемА алгоритма  решения задачи 

 

     Блок-схемы процедур Linear и Exponent 

            

Рисунок 1. Блок схема процедуры Linear      Рисунок 2. Блок схема процедуры Exponent 

 

     Разработка на языке Delphi модуля unit для решения  вычислительной задачи

    Для создания модуля в среде Delphi 7 выполним команду File→New→Unit.

    Математическая  часть задачи определения коэффициентов линейной и показательной регрессии разработана в виде отдельного модуля Method.pas. Реализация модуля приведена в листинге 1:

    Листинг 1 – Текст модуля Method.pas

    unit Method; 

    interface

       Type Mas = array[1..100] of extended;

       Procedure Linear(n:integer; x:Mas; y:Mas; var p,q:extended);

       Procedure Exponent(n:integer; x:Mas; y:Mas; var p,q:extended); 

    var a,b,c,d:extended;

        i:integer; 

    implementation 

    Procedure Linear;

    begin

      a:=0; b:=0;

      c:=0; d:=0;

      for i:=1 to n do

        begin

          a:=a+x[i];

          b:=b+y[i];

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

          d:=d+x[i]*y[i];

        end;

      q:=(a*b-n*d)/(a*a-n*c);

      p:=(b-q*a)/n;

    end; 

    Procedure Exponent;

    begin

      a:=0; b:=0;

      c:=0; d:=0;

      for i:=1 to n do

        begin

          a:=a+x[i];

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

          c:=c+ln(y[i]);

          d:=d+x[i]*ln(y[i]);

        end;

      p:=exp((c*b-d*a)/(n*b-a*a));

      q:=exp((n*d-a*c)/(n*b-a*a));

    end;

    end.

    В данный модуль вошли две процедуры: процедура Linear сохраняет коэффициенты линейной регрессии в фактических параметрах p и q, процедура Exponent сохраняет коэффициенты показательной регрессии в фактических параметрах p и q. Так же в модуле описан тип данных Mas – одномерный массив из 100 элементов вещественного типа.

    Модуль  Method.pas отлажен в консольном режиме. После отладки данный модуль можно применять при написании программы.

 

     Разработка структуры  интерфейса обмена

    пользователя  с приложением  в среде Delphi 7

    Будем разрабатывать интерфейс приложение согласно рисунку 3.

    

    Рисунок 3 – Вид создаваемого окна приложения

    Для создания приложения в среде Delphi 7 выполним команду File→New→Application.

    На  заготовку формы нанесем компоненты с Палитры в соответствии с рис. 3.

    Каждый  из объектов настроим с помощью Инспекторы объектов.

    Для компонент BitBtn1 – BitBtn2 изменим свойство Kind и Caption, которые отвечает за вид и отображение текста на кнопке, следующим образом:

  • Для BitBtn1 значение Kind = bkYes, Caption = ‘Найти коэффициенты’;
  • Для BitBtn2 значение Kind = bkClose, Caption = ‘Закрыть’.

    Разместим объекты Label1 – Label6 на форме в соответствии с рисунком 3. Для объектов Label5, Label6 свойство Visible установим значение False.

    Разместим на форме объект Edit1 для ввода количества узлов регрессии и объект UpDown1, для изменения значений объекта Edit1. Для того, чтобы при нажатии на объект UpDown1 автоматически изменялось значение свойства Text объекта Edit1 установим UpDown1.Associate = Edit1.

    Разместим на форме объект StringGrid1, для которого изменим следующие свойства: ColCount := 3, RowCount := 6, Options.goEditing := True.

    Так же на форму поместим объект RadioGroup1 для выбора способа регрессии. Для  объекта RadioGroup1 установим свойства Columns := 2, ItemIndex := 0. В свойства Items добавим два значения: «Линейная», «Показательная».

    Перейдем  к написанию текста модуля формы  Unit1.

    Наберем текст процедуры обработки события щелчка на кнопке «Найти коэффициенты». Из названия кнопки следует, что данное событие вызывает процедуру нахождения коэффициентов регрессии, выбранной в объекте RadioGroup1. Двойным щелчком на кнопке «Найти коэффициенты» создаем заготовку процедуры TForm1.BitBtn1Click. Заполняем тело процедуры текстом, содержащим организацию счета и вывода результатов. Двойным щелчком на кнопке «Close» создаем заготовку процедуры TForm1.BitBtn2Click. В теле данной процедуры записывает одну инструкцию Close(), завершающую работу приложения. Двойным щелчком на свободном месте формы Form1 создаем заготовку процедуры TForm1.FormCreate для заполнения начальными значениями объекта StringGrid1. Двойным щелчком на кнопке объекте UpDown1 создаем заготовку процедуры TForm1.UpDown1Click. В теле данной процедуры записывает инструкции для синхронного изменения количества строк StringGrid1 и числа, заданного в объекте Edit1.

    Покажем полный текст вызывающей программы. Программа содержится в модуле unit Unit1:

    unit Unit1;

    interface

    uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, Grids, Buttons, Method, ExtCtrls;

    type

      TForm1 = class(TForm)

        StringGrid1: TStringGrid;

        UpDown1: TUpDown;

        Edit1: TEdit;

        Label1: TLabel;

        Label3: TLabel;

        Label4: TLabel;

        Label5: TLabel;

        Label6: TLabel;

        BitBtn1: TBitBtn;

        BitBtn2: TBitBtn;

        RadioGroup1: TRadioGroup;

        procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);

        procedure FormCreate(Sender: TObject);

        procedure BitBtn1Click(Sender: TObject);

        procedure BitBtn2Click(Sender: TObject);

      end;

    var

      Form1: TForm1;

      x,y:Mas;

    implementation

    {$R *.dfm}

    procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);

    var i:integer;

    begin

Информация о работе Программа на объектно-ориентированном языке Delphi7 для математической задачи определения параметров линейной и показательной регрессии