Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум.doc
Скачиваний:
7
Добавлен:
07.05.2019
Размер:
243.2 Кб
Скачать

Комплексное задание №2 Аппроксимация функций

Цель работы:

  • Приобретение навыков аппроксимации функций с помощью интерполяционного многочлена Лагранжа

  • Приобретение навыков объектно-ориентированного программирования

  • Приобретение навыков работы в среде визуального программирования

  • Приобретение навыков работы с библиотекой Simulate1

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

Имеется некоторая функция, заданная таблично. Требуется

  • Создать объектно-ориентированное представление задачи аппроксимации функций, заданных таблично.

  • В соответствии с разработанным представлением задачи выполнить программную реализацию аппроксимации функций с использованием интерполяционного многочлена Лагранжа.

  • Создать интерфейсный модуль для ввода данных в диалоговом режиме и графической визуализации результатов

  • Провести исследование влияния степени интерполяционного многочлена на точность аппроксимации.

Требование к программе.

Работа выполняется индивидуально в среде визуального программирования Delphi. При выполнении задания допускается использование только программных модулей и компонент, разработанных самим студентом, стандартных компонент, предоставляемых средой визуального программирования Delphi, а также модулей uCommon и uVector библиотеки Simulate1.

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

1.0 1.0

2.0 2.0

3.0 4.0

.....

100.0 6.0

т.е. в первом столбце содержится аргумент, а во втором – значение функции.

Аппроксимация функций. Интерполяционный многочлен Лагранжа.

Задача аппроксимации функций формулируется следующим образом: функция f(x) задана таблично. Требуется приближенно заменить (аппроксимировать) ее некоторой функцией (x) так, чтобы отклонение (в некотором смысле) f(x) от (x) в заданной области было наименьшим.

Одним из основных типов аппроксимации является интерполирование. Оно состоит в следующем: для данной функции y=f(x) строится многочлен вида

,

принимающий в заданных точках xi, те же значения yi, что и функция f(x).

Интерполяционный многочлен Лагранжа имеет следующий вид

Объектно-ориентированное представление задачи аппроксимации

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

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

Type

TApproximator=class( TObject )

Private

FTable : TMatrix;

Protected

Public

Constructor Create;

Destructor Destroy; override;

Function Approximate( Argument : Double ) : Double; virtual;

Procedure SaveToFile( const aFileName : string ); virtual

Procedure LoadFromFile( const aFileName : string ); virtual

Property Table : TMatrix read FTable;

End;

В конструкторе базового класса TApproximator создается таблица как экземпляр класса TMatrix – матрица (модуль uVector) переменной размерности Nx2, ячейками которой являются узлы интерполяции. Функция Approximate является прародительницей для методов аппроксимации, построенных на базе класса TApproximate. Процедуры SaveToFile и LoadFromFile предназначены для работы с текстовыми файлами, информация в которых хранится в виде двух колонок:

Аргумент Значение

Процедура SaveToFile предназначена для сохранения данных в файле, а LoadFromFile – загрузки данных из файла. Для работы с текстовым файлом рекомендуется использовать класс TStringList

Примерный интерфейс класса, реализующего интерполяцию по Лагранжу, имеет вид

TLargInterpolation = class( TApproximator )

Private

Protected

Public

Function Approximate( Argument : Double ) : Double; override;

End;

В методе Approximate реализуется интерполяция табличной функции с помощью интерполяционного многочлена Лагранжа.

Интерфейсный модуль для ввода данных и графической визуализации результатов.

Примерный вид интерфейса пользователя представлен ниже на рисунке

В разделе меню «файл» выполняются стандартные операции по работе с внешними файлами, а именно сохранение/считывание данных, а также выход из программы.

В таблице узлов формируются узлы интерполяции, на основе которых производится аппроксимация. Результаты аппроксимации показываются визуально на графике, построенном, например, на базе компонента TChart.

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

Во всех компонентах интерфейсного модуля обязательно надо проверять корректность ввода данных.

Исследование влияния степени интерполяционного многочлена на точность аппроксимации.

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

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