Лабораторная работа №10 Тема: «Исследование на экстремум таблично заданной функции с использованием интерполирования сплайнами» icon

Лабораторная работа №10 Тема: «Исследование на экстремум таблично заданной функции с использованием интерполирования сплайнами»


Скачать 34.56 Kb.
НазваниеЛабораторная работа №10 Тема: «Исследование на экстремум таблично заданной функции с использованием интерполирования сплайнами»
Размер34.56 Kb.
ТипЛабораторная работа



«Численные Методы в Механике»

Лабораторная работа № 10

Тема: «Исследование на экстремум таблично заданной функции с использованием интерполирования сплайнами»

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

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

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

Будем строить квадратичный сплайн на каждом из частичных отрезков в виде

, (10.1)

где и – тройка неизвестных коэффициентов, а всего их будет ровно .


Итак, каждый квадратичный сплайн характеризуется пятью параметрами: .

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

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

, . (10.2)

Тогда для «правых» узлов будет:

, . (10.3)

Для определения оставшихся коэффициентов нам требуется еще уравнений. Следуя идее сплайн-интерполирования, потребуем совпадения значения первых производных для смежных сплайнов и  во внутренних узлах интерполяции:

, что дает , . (10.4)

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

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

Например, для кубических сплайнов принимается, что в точках и вторые производные соответствующих сплайнов равны нулю, т.е. и . Геометрически это означает, что указанные кубические сплайны в граничных узлах и имеют точки перегиба.

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

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

. (10.5)

В итоге, система линейных алгебраических уравнений (10.3)–(10.5) совместна (количество уравнений равно числу неизвестных) и мы ее можем решать, например, при помощи уже разработанного нами ранее метода Гаусса (лабораторная работа № 5).

Для удобства программирования матрицы коэффициентов системы (10.3)–(10.5) скомпонуем ее уравнения в следующем порядке:

(10.6)

или с учетом обозначения :

(10.7)

и представим ее в виде следующей диаграммы:

(10.8)

Каждые две последовательные строки диаграммы (10.8) соответствуют квадратичному сплайну, номер которого вынесен слева от этих строк. Столбец – столбец свободных членов системы (10.3)–(10.5). Размер полученной матрицы , где – количество интервалов интерполирования (количество сплайнов).


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

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

Необходимо выяснить, имеет ли данная функция на заданном интервале точки экстремума , и если имеет – определить эти точки и значения функции в них.

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

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

Поскольку сплайн – квадратичный, то он имеет единственную точку экстремума, абсцисса которой равна:

. (10.9)

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

В качестве исследуемой функции взять зависимость из лабораторной работы № 3. Произвести вычисления для различных случаев разбиения общего интервала интерполирования. Например, при и т.д., пока количество точек экстремума, определяемых Вашей программой не стабилизируется.

^ Пример выполнения лабораторного задания на Fortran

Воспользуемся уже разработанными компонентами из лабораторных работ № 3 и № 5, а в качестве исследуемой функции возьмем зависимость

. (10.10)

Стартуем среду разработки MS Visual Studio. Создадим новый проект LabTask_10f и сгенерируем в нем файл основной программной единицы – main_10.f90.

Пользуясь «Проводником», скопируем файлы, содержащие коды исследуемой функции (ЛР № 3) и метода Гаусса (ЛР № 5) в директорию проекта LabTask_10f и включим их в этот проект.

В данной лабораторной работе при решении СЛАУ нам не требуется вычислять determinant –определитель матрицы коэффициентов, поэтому мы удалим код, в котором он используется в процедуре Method_Gaussa() , а саму процедуру переименуем – SLAY ( n, A1, B1, X ).

Приступим к формированию файла модуля mod_10 для данной лабораторной работы – разместим в нем соответствующие интерфейсы и добавим в него описание нового типа (структуры) – spline, который мы будем использовать при организации данных, моделирующих программным путем квадратичные сплайны. Смысл записей данной структуры очевиден. Коэффициенты сплайна обозначены через a, b, c, а поля xn и xk предназначены для «хранения» координат концов частичного отрезка , на котором этот сплайн определен.



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





В отличие от предыдущих лабораторных работ, здесь мы используем статические массивы.

Поэтому для выполнения вычислений с различными значениями параметра ^ N нам придется перекомпилировать программу. Такая схема работы, как правило, используется при отладке новых программ. Выполнение данного кода для N = 100 дает:



Если же задать N = 200 и запустить программу на выполнение возникнет аварийный останов со следующим сообщением:



Причина программного прерывания – переполнение стека буферных операций. Оператор, вызвавший это прерывание, находится в строке 16 основной программы. Задание нулевых значений массиву array производится посредством буфера, размещенного в оперативной памяти (в стеке вызовов операторов ввода/вывода). По умолчанию его объем не превышает 1 МБ.

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

Откроем контекстное меню «Properties» для проекта LabTask_10f.

Откроем в нем пункт «^ Linker» и перейдем на подпункт «System». Затем, в таблице непосредственных свойств напротив свойства «Stack Reserve Size» зададим количество байт, которое мы посчитаем достаточным для нормальной работы программы, например, 16 МБ. Это число необходимо предварительно корректно вычислить при помощи стандартного калькулятора.



Перекомпилируем программу и запустим ее на выполнение при N = 200 и N = 300:





Сопоставление полученных результатов свидетельствует о том, что цель лабораторной работы достигнута – определены (с достаточной степенью точности) точки экстремума таблично заданной функции. Очевидно, что для более убедительного сравнения точек экстремума, полученных путем интерполирования сплайнами, с их точными значениями, необходимо выбирать тестовую функцию простого вида, например, или . Рекомендуем выполнить такой анализ самостоятельно для различных значений параметра .

^ Пример выполнения лабораторного задания на языке C#

В имеющемся рабочем пространстве NMM_PetrovIS сгенерируем (добавим) новый проект LabTask_10с консольного приложения на языке программирования C#, которому зададим тип конфигурации – Release, и который сделаем стартовым проектом.

Включим в проект новый класс – Class_10, в который скопируем из класса Class_05 подпрограмму Method_Gaussa(). Внесем изменения в код подпрограммы, связанные с исключением из нее вычислений определителя. После этого переименуем подпрограмму, например, так – SLAEq():





Добавим в этот класс функцию, которую нам предстоит исследовать (скопируем ее код из проекта LabTask_03с и переименуем):



В пространстве имен LabTask_10с определим новый тип данных – Spline2.

После этого приступим к составлению аналога на C# основной программной единицы main_10 на Fortran. Код программы может иметь, напрмер, следующий вид:






Выполним вычисления для случаев N = 100, 200 и N = 300:







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


^ Контроль выполнения варианта лабораторного задания № 10

Для контроля правильности Вашего выполнения лабораторной работы № 10 воспользуйтесь приложением NMM_Labs.



Выберите требуемую лабораторную работу и свой вариант. После этого – нажмите на кнопку «Выполнить» – перед Вами появится основная форма.

Работа пользователя с управляющими элементами данной формы начинается после нажатия на кнопку «^ Генерировать таблицу исходных данных».

Предварительно Вы можете выбрать «Количество интервалов интерполирования», например 15, которое при начальной загрузке имеет минимальное значение – 10:



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

Таблица сплайнов будет построена сразу после нажатия на соответствующую кнопку:



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

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

При этом Вам будет не только предоставлено «^ Приближенное значение» функции, найденное посредством системы сплайнов, но и будет указан «Номер сплайна», непосредственно использованного при выполнении вычислений.

Следует помнить, что «^ Значение аргумента», задаваемое пользователем, должно удовлетворять основному условию интерполирования – оно не должно выходить за пределы «Границ интерполирования [a,b] », указанных в верхней части формы.

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



Данные из «^ Таблицы Экстремумов Функции» следует сравнить с аналогичными результатами, полученными при выполнении программ, непосредственно разработанных Вами (на Fortran и C#). Для этого необходимо задать соответствующее значение для параметра «Количество интервалов интерполирования», например – 100, и повторить все этапы вычислений.

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

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

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



Правый график – «^ График аппроксимируемой функции». Он представляет собой непрерывную кривую красного цвета и изображает «истинную функцию», аналитический вид которой Вы использовали для построения дискретной функции (таблицы исходных данных).

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

График слева – «^ График частичного сплайна». Здесь мы видим изображение квадратичного сплайна (кривая синего цвета), номер которого выбран на управляющем элементе.

Тонкая красная кривая – «истинная функция», аппроксимируемая данным сплайном на текущем интервале интерполирования. Здесь отчетливо видно качество интерполирования сплайном при выбранном количестве узлов таблицы исходных данных.

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

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

Составитель – ст. преп. Царенко А.П. 6 июля 2013 г.

Похожие:

Лабораторная работа №10 Тема: «Исследование на экстремум таблично заданной функции с использованием интерполирования сплайнами» iconЛабораторная работа №10 Тема: «Исследование на экстремум таблично заданной функции с использованием интерполирования сплайнами»
Напомним, что сплайн – это функция, которая на каждом частичном отрезке интерполяции является алгебраическим многочленом, а на всем...
Лабораторная работа №10 Тема: «Исследование на экстремум таблично заданной функции с использованием интерполирования сплайнами» iconЛабораторная работа №9 Тема: «Вычисление значения таблично заданной функции с использованием алгоритма интерполирования по Ньютону»
Напомним, что задача интерполирования заключается в построении для табличной функции некоторой приближающей функции, аналитическим...
Лабораторная работа №10 Тема: «Исследование на экстремум таблично заданной функции с использованием интерполирования сплайнами» iconЛабораторная работа №11 Тема: «Приближенное вычисление производной от таблично заданной функции на основе интерполяционных многочленов Лагранжа и Ньютона»
Пусть исследуемая функция либо задана таблично на интервале с постоянным шагом, либо имеет достаточно сложный функциональный вид,...
Лабораторная работа №10 Тема: «Исследование на экстремум таблично заданной функции с использованием интерполирования сплайнами» iconЛабораторная работа №8 Тема: «Уплотнение таблицы функции с использованием интерполяционного многочлена Лагранжа»
Интерполирование может применяться для уплотнения заданной таблицы функции, т е вычисления по исходной таблице функции ее новой таблицы,...
Лабораторная работа №10 Тема: «Исследование на экстремум таблично заданной функции с использованием интерполирования сплайнами» iconЛабораторная работа №29 Тема: Зачетная работа по теме: «Учет с подотчетными лицами»

Лабораторная работа №10 Тема: «Исследование на экстремум таблично заданной функции с использованием интерполирования сплайнами» iconЛАБОРАТОРНАЯ РАБОТА № 4 Исследование разветвленных цепей с применением компенсационного метода измерений

Лабораторная работа №10 Тема: «Исследование на экстремум таблично заданной функции с использованием интерполирования сплайнами» iconЛабораторная работа №1. Задачи на многопоточность
Решить задачу на многопоточность с использованием библиотеки java util. Concurrent
Лабораторная работа №10 Тема: «Исследование на экстремум таблично заданной функции с использованием интерполирования сплайнами» iconЛабораторная работа №6-1 Тема: Работа над созданием презентации программы Microsoft Power Point
Распечатываю рамку стандартного образца где вместо названия документа впечатываю Ф. И. О
Лабораторная работа №10 Тема: «Исследование на экстремум таблично заданной функции с использованием интерполирования сплайнами» iconЛабораторная работа №1 Тема : «Отладчик debug»
Краткая аннотация: данная работа посвящена знакомству с отладчиком debug, который позволяет
Лабораторная работа №10 Тема: «Исследование на экстремум таблично заданной функции с использованием интерполирования сплайнами» iconЛабораторная работа № Экспериментальное определение нормальных и касательных напряжений при изгибе
Ознакомление с тензометрическим методом определения напряжений с использованием тензорезисторов
Лабораторная работа №10 Тема: «Исследование на экстремум таблично заданной функции с использованием интерполирования сплайнами» iconЛабораторная работа №2 исследование влияния отклонения напряжения на работу асинхронного двигателя
Цель работы: исследование влияния отклонений напряжения на выводах асинхронного двигателя от номинального значения на потери мощности...
Вы можете разместить ссылку на наш сайт:
Документы


При копировании материала укажите ссылку ©ignorik.ru 2015

контакты
Документы