Реферат Программа на объектно-ориентированном языке Delphi7 для математической задачи определения параме
Работа добавлена на сайт bukvasha.net: 2015-10-28Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
Введение
Система 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
StringGrid1.RowCount := StrToInt(Edit1.Text)+1;
for i:=1 to StringGrid1.RowCount do
StringGrid1.Cells[0,i]:=IntToStr(i);
end;
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
StringGrid1.Cells[0,0]:='N';
StringGrid1.Cells[1,0]:='Xi';
StringGrid1.Cells[2,0]:='Yi';
for i:=1 to StringGrid1.RowCount do
StringGrid1.Cells[0,i]:=IntToStr(i);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var n,i:integer;
p,q:extended;
begin
try
n:=StrToInt(Edit1.Text);
for i:=1 to n do
begin
x[i]:=StrToFloat(StringGrid1.Cells[1,i]);
y[i]:=StrToFloat(StringGrid1.Cells[2,i]);
end;
if RadioGroup1.ItemIndex = 0 then
begin
Linear(n,x,y,p,q);
Label5.Caption := 'y = ' + FloatToStr(p) + ' + ' + FloatToStr(q) + '*x';
Label5.Visible := true;
end else
begin
Exponent(n,x,y,p,q);
Label6.Caption := 'y = ' + FloatToStr(p) + ' * ' + FloatToStr(q) + '^x';
Label6.Visible := true;
end;
except
ShowMessage('Неверный формат ввода');
exit;
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Close();
end;
end.
Для подключения модуля к проекту, выполняем следующие действия:
1. В меню Project выполняем команду Add To Project… и выбираем файл Method.pas, содержащий модуль.
2. В разделе Uses модуля Unit1 добавляем имя подключаемого модуля Method.
После компиляции программы проверим ее на контрольном примере.
Разработка контрольного примера
Рассмотрим задачу определения коэффициентов линейной и показательной регрессии на выборке:
xi | 2 | 4 | 6 | 8 | 10 |
yi | 5,5 | 6,3 | 7,2 | 8 | 8,6 |
Результатом программы является:
1) Параметры a и b линейной регрессии со значениями , .
2) Параметры a и b показательной регрессии со значениями , .
Результат работы программы представлен на рисунке 5
Рисунок 5. Результат работы программы на контрольном примере
Полученные результаты совпадают с результатами, посчитанными при помощи Excel, следовательно, делаем вывод, что программа работает правильно.
Выводы по работе
В процессе написания курсовой работы были выполнены следующие основные задачи:
· разработана программа на объектно-ориентированном языке Delphi7 для математической задачи определения параметров линейной и показательной регрессии;
· для обмена данными между пользователем и приложением был разработан пользовательский интерфейс;
· в качестве метода решения задачи был выбран метод наименьших квадратов;
· для решения математической части задачи создан отдельный модуль Method.pas, который откомпилирован и проверен в консольном режиме;
· разработан контрольный пример, демонстрирующий правильную работу программы.
В дальнейшем данная программа может быть использована для поиска коэффициентов линейной и показательной регрессии для различных выборок. Для этого не придется переделывать пользовательский интерфейс, а лишь необходимо установить размер выборки в программе и заполнить таблицу данных.
Литература
1. Климова, Л.М. Delphi 7. Основы программирования. Решение типовых задач. Самоучитель – Москва: КУДИЦ-ОБРАЗ, 2004. – 480с.
2. Терентьев, В.П. Методические указания к курсовому проектированию для студентов механических специальностей по предметам цикла Информатика / В.П. Терентьев и др. – УО «Витебский гос. техн. ун-т». – 2004г.
3. Фаронов, В.В. Turbo Pascal 7.0. Начальный курс. Учебное пособие – Москва: КноРус, 2007. – 576с.