Пакет программ сглаживания функции
КОЛОМЕНСКИЙ ИНСТИТУТ (филиал)
ГОСУДАРСТВЕННОГО ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
_________________________
«МОСКОВСКИЙ
ГОСУДАРСТВЕННЫЙ
ОТКРЫТЫЙ
УНИВЕРСИТЕТ»
Кафедра «Управления, информатики и вычислительной техники»
КУРСОВАЯ
РАБОТА
По курсу «Программирование на языке высокого уровня»
по
теме: «Пакет программ сглаживания функции»
Выполнил: студент группы ПО-21
Кокалич Мария
Руководитель:
Родионов
К.А.
Коломна
2011
ОГЛАВЛЕНИЕ
ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ
по дисциплине «Программирование на языке высокого уровня»
Вариант № 2
Тема: «Пакет программ сглаживания функции»
- Разработать приложение в среде Delphi для сглаживания функции, заданной таблицей значений в равно отстоящих точках, с помощью многочлена 3- степени, построенного по последовательным точкам методом наименьших квадратов.
- В программе необходимо предусмотреть:
- задание произвольной табличной функции y(x);
- вывод табличных значений сглаженной функции;
- графическое отображение табличной функции y(x) для контроля задания табличных значений;
- графическое отображение сглаженной функции y(x).
- Предусмотреть обработку некорректного ввода исходных данных.
- Провести тестирование программы.
- Подготовить пояснительную записку (отчет), в которую необходимо включить описание применения приложения, исходные данные к программе и результаты расчетов, образцы диалоговых окон, тексты программ, полученные диаграммы результатов, а также чистый лист для рецензии преподавателя.
Дата
выдачи: ___________ Преподаватель:______________
ВВЕДЕНИЕ
В курсовой работе поставлена задача, разработать пакет программ сглаживания функции. Для решения данной задачи будет применяться метод наименьших квадратов. Для контроля правильности решения и облегчения расчетов предлагается использовать OLE-технологии.
Таким
образом, целью курсовой работы является
овладение и закрепление
2.Математические методы
2.1Основные понятия
Функция
Функция — математическое
Функция f (отображение, о
При этом говорят, что функция f задана на множестве X, или что f отображает X в Y.
Если
элементу
сопоставлен элемент
, то говорят, что элемент y находится
в функциональной
зависимости f от элемента x.
При этом переменная x называетсяаргумен
В теоретической математике функцию f удобно определить как бинарное отношение (то есть множество упорядоченных пар ), которое удовлетворяет следующему условию: для любого существует единственный элемент такой, что .
Это и позволяет говорить о том, что элементу сопоставлен один и только один элемент такой, что .
Таким образом, функция — это упорядоченная тройка (или кортеж) объектов (f,X,Y), где
- множество X называется о́
бластью определе́ния; - множество Y называется о́
бластью значе́ний; - множество упорядоченных пар или, что то же самое, график функции.
Если
задана функция f, которая определена
на множестве X и принимает значения
в множестве Y, то есть, функция f отображает множество
- этот факт коротко записывают в виде или .
- область определения функции f (множество X) обозначается D(f), или ;
- область значений функции f (множество Y) обозначается R(f) (E(f)), или ( ).
Наличие функциональной зависимости между элементом и элементом
- наиболее часто обозначается как
y = f(x),
или
;
- реже используется обозначение без скобок y = fx, или y = xf,
- а там, где необходимо подчеркнуть двойственность, используются обозначения со скобками: y = (f,x) или y = (x,f);
- так же существует и операторное обозначение y = xf, которое можно встретить в общей алгебре.
Способы задания функции
1.Аналитический.
Является наиболее важным для МА (мат.анализа),
поскольку методы МА (дифференциального,
интегрального счисления) предполагают
этот способ задания. Одна и та же функция
может быть задана различными формулами: y=∣sin(x)∣y=√1−
Частным
случаем аналитического способа
задания функции является задание
функции уравнением вида F(x,y)=0 (1) Если
это уравнение обладает свойством,
что ∀x∈Д сопоставляется
единственное y, такое, что F(x,y)=0,
то говорят, что уравнение (1) на Д неявно
задает функцию. Еще один частный случай
задания функции -- параметрический, при
этом каждая пара (x,y)∈f задается с помощью
пары функций x=ϕ(t),y=ψ(t) где t∈M
2.Графический. Область определения -- проекция данного графика на Ох, а множество значений -- проекция Д(f) на Оу.
3.Словесный. Отношение f, по которому каждому х находящееся соответствие у описывается словесно. Например, y=[x] : x из R (Целой частью х из R называют любое целое число не превосходящее х).
4.Табличный. Состоит в простом перечислении элементов функции f, т.е. при этом способе указывается значение аргумента x и соответствующе значение функции y=f(x). В работе использовался именно этот способ задания функции, так как использовалось линейное сглаживание функции по пяти точкам. Таблица позволяет без затруднений с точностью найти нужные точки.
2.2 Математические методы
Метод наименьших квадратов
Метод наименьших квадратов - один из методов регрессионного анализа для оценки неизвестных величин по результатам измерений, содержащих случайные ошибки.
Метод наименьших квадратов применяется также для приближённого представления заданной функции другими (более простыми) функциями и часто оказывается полезным при обработке наблюдений.
Описание метода
Пусть функцияy=f(x) задана таблицей своих значений: , i=0,1,-n. Требуется найти многочлен фиксированной степени m, для которого среднеквадратичное отклонение (СКО) минимально.
Так как многочлен определяется своими коэффициентами, то фактически нужно подобрать набор кофициентов минимизирующий функцию .
Используя необходимое условие экстремума, , k=0,1,-m получаем так называемую нормальную систему метода наименьших квадратов: , k=0,1,-m.
Полученная система есть система алгебраических уравнений относительно неизвестных . Можно показать, что определитель этой системы отличен от нуля, то есть решение существует и единственно. Однако при высоких степенях m система является плохо обусловленной. Поэтому метод наименьших квадратов применяют для нахождения многочленов, степень которых не выше 5. Решение нормальной системы можно найти, например, методом Гаусса.
Запишем нормальную систему наименьших квадратов для двух простых случаев: m=0 и m=2. При m=0 многочлен примет вид: . Для нахождения неизвестного коэффициента имеем уравнение: . Получаем, что коэффициент есть среднее арифметическое значений функции в заданных точках.
Если же используется многочлен второй степени , то нормальная система уравнений примет вид:
Линейное сглаживание по пяти точкам
Линейное сглаживание по пяти точкам — операция усреднения с помощью интерполяционных многочленов, обеспечивающая получение уточнённого значения по заданному значению yi и ряду близлежащих значений , известных со случайной погрешностью.
Линейное сглаживание по пяти точкам выполняется с помощью следующих формул:
,
,
,
,
,
где N -
номер последней точки (ординаты yi).
3.Описание применения пакета программ
3.1 Основные понятия, цели и задачи
В
курсовой работе была поставлена задача
разработать пакет программ сглаживания
функции. В задании предлагается
произвольная таблично заданная функция.
Аппроксимация производится методом
наименьших квадратов, линейным сглаживанием
по пяти точкам. Для наглядности и проверки
решения используется построение графика
исходной функции и сглаженной функции.
3.2 Описание диалоговых окон
Основное окно программы представлено на рисунке 1. Оно содержит компоненты для ввода табличной функции, вывода расчетных данных и поле для построения графиков функций.
Рисунок 1.− Основное окно программы
Пользователь открывает нужную функцию нажатием на кнопку «Открыть функцию». При нажатии появляется диалоговое окно, предоставляющее выбор таблично заданной функции, записанной в текстовом файле (рисунок 2)
Рисунок 2. – Окно выбора функции
После выбора функции заполнится таблица значений функций в основном диалоговом окне, и появится график данной функции.
Рисунок 3.− Функция и её график
После
появления графика функции
Рисунок 5. – Значения аппроксимированной функции
После
того, как в таблице появились
значения аппроксимированной функции,
необходимо построить график этой функции.
Для этого нажимаем на кнопку «посмотреть
график сглаженной функции». В поле построения
исходной функции появится график аппроксимированной
функции, выделенный другим цветом, как
показано на рисунке 6.
Рисунок
6. – График аппроксимированной функции
3.3 Описание исходных данных
Исходными данными являются аргументы х и значения у таблично заданной функции.
3.4 Описание результатов программы
Результатом
программы являются вычисленные
значения аппроксимированной функции
ур, которые фиксируются в таблице в
столбце «ур», а так же график сглаженной
функции, наблюдаемый в поле для построения
графиков.
3.5 Тестирование программы
Для проверки правильности работы программы возьмем 3 разных функции .
Этап 1. Выберем функции, для которых удобен в применении метод наименьших квадратов для их аппроксимации.
Рисунок
7. – Первая функция
Рисунок 8. – Вторая функция
Рисунок 9. –Третья функция
Этап 2. Записываем значения в таблицу в диалоговом окне и строим график функции
Рисунок 10. – Значения и график функции №1
Рисунок
11. – Значения и график функции
№2
Рисунок 12. – Значения и график функции №3
Этап 3. Произведем сглаживание функции и постоим график сглаженной функции.
Рисунок 13. – Значения и график сглаженной функции №1
Рисунок 14. – Значения и график сглаженной функции №2
Рисунок 15. – Значения и график сглаженной функции №3
Из рисунков видно, что сглаживание функции было произведено удачно. Были исследованы разные функции на различных интервалах, и как показывает график на всех интервалах программа верно производит сглаживание функции.
ЗАКЛЮЧЕНИЕ
В
курсовой работе была реализована задача
разработки пакета программ сглаживания
функции. Для решения данной задачи
использовался многочлен
Таким
образом, овладение и закрепление
навыков программирования на языке
Object Pascal в инструментальной среде Delphi
было достигнуто.
ЛИТЕРАТУРА
- Бугров Я.С., Никольский С.М. Высшая математика. Дифференциальное и интегральное исчисление: Учеб. – 3-е изд., испр. – М.: Наука. Гл. ред. Физ.-мат. лит., 1988.-432 с.
- Корн Г., Корн Т. Справочник по математике для научных работников и инженеров — М.: Наука, 1970. — С. 575.
- Бугров Я.С., Никольский С.М. Высшая математика. Дифференциальные уравнения. Кратные интегралы. Ряды. Функции комплексного переменного: Учебник для вузов. – 3-е изд., испр. – М.: Наука. Гл. ред. физ.-мат. лит., 1989. – 464 с.
- Максимов Ю.А. Алгоритмы линейного и дискретного программирования — М.: МИФИ, 1980.
СПИСОК ИНТЕРНЕТ-ИСТОЧНИКОВ
- http://ru.wikipedia.org
- http://solidbase.karelia.ru/
edu/meth_calc/files/09.shtm - http://www.delphi-manual.ru
- http://programmersforum.ru/
Приложение
Исходный код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls, Grids, ExtCtrls, TeeProcs, TeEngine, Chart, Series;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
OpenDialog1: TOpenDialog;
Button1: TButton;
Button2: TButton;
Chart1: TChart;
Series2: TLineSeries;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i,j:integer;
implementation
{$R *.dfm}
uses comobj;
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:='x';
StringGrid1.Cells[1,0]:='y';
stringgrid1.Cells[2,0]:='yp';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
TS : TStringList;
s : string;
x, y :real;
i, CountRow, k : integer;
F:textfile;
begin
if not OpenDialog1.Execute
then exit;
Form1.Caption := OpenDialog1.FileName;
TS := TStringList.Create;
try
TS.LoadFromFile( OpenDialog1.FileName );
except
FreeAndNil( TS );
ShowMessage('Ошибка доступа/чтения файла ' + OpenDialog1.FileName);
exit;
end;
StringGrid1.ColCount := 3;
StringGrid1.RowCount := TS.Count;
CountRow := 0;
assignFile(f,OpenDialog1.
reset(f);
while not eof(f) do begin
readln(f,s);
s := Trim(s);
if Pos(' ', s ) > 0 then begin
s := StringReplace( s, '.', DecimalSeparator, [rfReplaceAll] );
s := StringReplace( s, ',', DecimalSeparator, [rfReplaceAll] );
Val(Trim(Copy(s, 1, Pos(' ', s )-1)), x, k);
if k<>0 then {в начале строки идёт НЕ ЧИСЛО - игнорируем всю строчку} Continue;
Val(Trim(Copy(s, Pos(' ', s )+1, 255)), y, k);
if k<>0 then {в начале строки идёт НЕ ЧИСЛО - игнорируем всю строчку} Continue;
{всё хорошо. найденные значения записываем в StringGrid}
Inc(CountRow); {увеличиваем счётчик строк}
StringGrid1.RowCount := CountRow+1;
StringGrid1.Cells[0, CountRow] := FloatToStr(x);
StringGrid1.Cells[1, CountRow] := FloatToStr(y);
// exl(countRow,x,y);
end;
end;
// подкорректируем размер грида - число строк сделаем равным счётчику
FreeAndNil( TS ); {очистим список}
//очищаем 3 столбец таблицы
with stringgrid1 do for i:=1 to rowcount-1 do
cells[2,i]:='';
//очищаем график
chart1.SeriesList.Series[0].
chart1.SeriesList[0].Marks.
chart1.SeriesList.Series[1].
chart1.SeriesList[1].Marks.
//строим график функции
with Chart1 do begin
Title.Text.Clear;
Title.Text.Add('Графики функций');
SeriesList.Series[0].Clear;
SeriesList.Series[0].Marks.
BottomAxis.Title.Caption := 'значения х';//подписываем X
LeftAxis.Title.Caption := 'значения у';//подписываем Y
Repaint;
with StringGrid1 do for i:=1 to Rowcount-1 do begin
SeriesList.Series[0].AddXY(
end;
StringGrid1.SetFocus;
end;
end;
procedure TForm1.Button2Click(Sender: TObject); //передача данных в excel
var i,j,k:integer;
exl:OleVariant; yp:array[1..100] of real;
WorkBook,Sheet:Variant;
fileName:string; n,m:integer;
begin
//Получим имя будущего Exel- файла
fileName:=ExtractFilePath(
//Создаем объект интерфейса для доступа к серверу COM
//Создаем OLE сервер MS Excel
exl:= CreateOleObject('Excel.
//Открываем книгу и активизирум раб.лист 1
WorkBook:=exl.Application.
Sheet:=WorkBook.Worksheets[1];
n:= stringgrid1.RowCount-4;
stringgrid1.Cells[2,1]:=
stringgrid1.Cells[2,2]:=
m:=stringgrid1.RowCount-1;
stringgrid1.Cells[2,m]:=
stringgrid1.Cells[2,m-1]:=
//Запись данных в ячейки Excel
k:=0;
for i:=1 to n-1 do begin
inc(k);
for j:=0 to 4 do begin
Sheet.cells[j+2,1]:=
Sheet.cells[j+2,4]:=
end;
//Чтение данных из ячеек Excel
yp[i]:= Sheet.cells[4,11];
stringgrid1.Cells[2,i+2]:=
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var i:integer;
begin
with Chart1 do begin
with StringGrid1 do for i:=1 to Rowcount-1 do
SeriesList.Series[1].AddXY(
StringGrid1.SetFocus;
end;
end;
end.