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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,73 Мб
  • Опубликовано:
    2015-06-11
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

"Норильский Индустриальный институт"

Кафедра Информационных систем и технологий








курсовая работа

По дисциплине:

Высокоуровневые методы информатики и программирования

На тему: «Разработка программного проекта определения локальных экстремумов функции»

 

Разработал студент

Лапшин И.А.

группа ИС - 14(дневн)

Руководитель:

к.т.н.,профессор, Фомичева С.Г.

Норильск, 2015

Оглавление

Назначение и цели создания проекта

Формализация задачи

Укрупненная блок-схема алгоритма

Листинг программы и модулей

Результат работы приложения

Файл-справка

Заключение

Список использованной литературы

алгоритм инсталляция приложение экстремум функция

Введение

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

Первый объектно-ориентированный язык программирования Simula 67 был разработан в конце 60-х годов в Норвегии. Авторы этого языка очень точно угадали перспективы развития программирования: их язык намного опередил свое время. Однако современники (программисты 60-х годов) оказались не готовы воспринять ценности языка Simula 67, и он не выдержал конкуренции с другими языками программирования (прежде всего, с языком Fortran). Прохладному отношению к языку Simula 67 способствовало и то обстоятельство, что он был реализован как интерпретируемый, а не компилируемый язык, что было совершенно неприемлемым в 60-е годы, так как интерпретация связана со снижением скорости выполнения программ.

Но достоинства языка Simula 67 были замечены некоторыми программистами, и в 70-е годы было разработано большое число экспериментальных объектно-ориентированных языков программирования: например, языки CLU, Alphard, Concurrent Pascal и др. Эти языки так и остались экспериментальными, но в результате их исследования были разработаны современные объектно-ориентированные языки программирования: C++, C Sharp, Smalltalk, Delphi и др.

Появление Delphi не могло пройти незамеченным среди многочисленных пользователей компьютера. Оценки экспертов, изучающих возможности этого нового продукта фирмы Borland, обычно имеют положительную основу. Основное достоинство Delphi состоит в том, что здесь реализованы идеи визуального программирования. Среда визуального программирования превращает процесс создания программы в приятное и легко понимаемое конструирование приложения из большого набора графических и структурных примитивов. - чрезвычайно быстро развивающаяся система. Первая версия - Delphi 1. 0 была выпущена в феврале 1995 г. А затем новые версии выпускались ежегодно.

Каждая последующая версия Delphi дополняла предыдущую.

Большинство версий Delphi выпускается в нескольких вариантах: Standart - стандартном, Professional профессиональном, Client/Server - клиент/сервер, Enterprise - разработка баз данных предметных областей. Различаются варианты в основном разным уровнем доступа к системам управления базами данных. Последние варианты - Client/Server и Enterprise, в этом отношении наиболее мощные.оказал огромное влияние на создание концепции языка C# для платформы .NET. Многие его элементы и концептуальные решения вошли в состав C Sharp.

Назначение и цели создания проекта


Условие задачи: Задача нахождения локального экстремума функции одного аргумента. Построить график функции F(x), позволяющий выполнять зуммирование и скроллинг изображения.

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

Назначение проекта:

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

2.      Построение графика функции для графического решения задачи.

.        Сохранение данных в файл и загрузка данных из этого файла.

К большому сожалению моя программа не может конкурировать с известными аналогами: MathCad, SciLab, SAGE. Но в дальнейшем, благодаря изучению новых языков программирования я мечтаю об усовершенствовании данной программы. Я задаюсь целью вычисления экстремумов сложных функций, вводимых пользователем вручную.

Цели, которые я ставил перед собой, приступая к работе:

.   Узнать больше о нахождение экстремумов функций одной переменной.

2.      Придумать функции для выбора пользователем.

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

.        Протестировать данную программу на разных операционных системах.

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

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

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

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

Формализация задачи

Пусть функция f задана на некотором множестве X⊂ R и  ∈ X.

Определение 1: Точка  называется точкой локального максимума (минимума) функции f, если существует такая окрестность U() точки , что для всех x ∈ X ⋂ U() выполняется неравенство

f(x) ≤ f() (соответственно f(x) ≥f())

Если для всех x ∈ X ⋂ U() и x ≠  выполняется неравенство f(x) < f() (соответственно f(x) > f()), то точка  называется точкой строгого локального максимума (минимума).

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

Теорема 2 (необходимое условие экстремума): Если функция имеет в точке локального экстремума производную, то эта производная равна нулю.

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

Замечание 2. Напомним, что под производной всегда понимается конечная производная, если специально не оговорено, что допускаются и бесконечные производные. Из комментариев к теореме Ферма следует, что в точке локального экстремума может существовать знаконеопределенная бесконечная производная, но не может существовать бесконечная производная определенного знака. Может случиться, что в точке локального экстремума вообще не существует производной - ни конечной, ни бесконечной (см. рис. №1).

(Рис. №1)

Отметим, что условия равенства нулю производной или ее несуществования в данной точке, будучи необходимыми условиями экстремума, не являются достаточными условиями для наличия экстремума в этой точке. Например, у функции f(x) = производная f '(x) = 3 в точке x =0 равна нулю, а экстремума в этой точке нет (рис. №2).

 

(Рис. №2)

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

Теорема 2 означает, что все точки локального экстремума функции находятся среди множества ее критических точек.

Определение 3. Точка  называется точкой возрастания (убывания) функции f, если у  существует такая окрестность U(), что при x ∈ X ⋂ U(), и x < , выполняется неравенство f(x) ≤ f() (соответственно f(x) ≥ f()), а при x ≥  - неравенство f(x) ≥ f() (соответственно f(x) ≤ f()). Если при x ≠  выполняется, кроме того, неравенство f(x) ≠ f(), то точка  называется точкой строгого возрастания (строгого убывания) функции f.  Точки строгого экстремума, точки строгого возрастания и убывания удобно описывать в терминах знака приращения

∆y = f( + ∆x) - f()

функции f. В точке строгого максимума приращение функции в некоторой окрестности этой точки имеет отрицательное значение при ∆x ≠ 0, в точке строгого минимума - положительное, в точке строгого возрастания при ∆x < 0 - отрицательное, при ∆x > 0 - положительное, а в точке строгого убывания - положительное при ∆x < 0 и отрицательное при ∆x > 0 (рис. №3). Конечно, здесь всегда предполагается, что приращение аргумента ∆x таково, что точка  + ∆x принадлежит области определения X функции f. Таким образом, при переходе через точку строгого экстремума  (т. е. при изменении знака приращения аргумента ∆x) приращение функции не меняет знака, а при переходе через точки строгого возрастания и убывания меняет знак. Нетрудно сформулировать в терминах знака производной в точке достаточные условия того, что эта точка является точкой строгого возрастания или убывания (в этом случае согласно определению производной функция заведомо определена в некоторой окрестности рассматриваемой точки).

  

(Рис. №3)

Если функция f имеет в точке  положительную производную


то для всех достаточно малых ∆x выполняется неравенство


Отсюда следует, что при∆ x < 0 имеет место ∆y < 0, а при∆ x > 0 также и ∆y > 0, т. е. точка  является точкой строгого возрастания.

Аналогично рассматривается случай f'().

Таким образом, если в точке  существует не равная нулю производная (конечная или определенного знака бесконечная), то эта точка является либо точкой строгого возрастания, либо точкой строгого убывания, а следовательно, не может быть точкой экстремума. Тем самым мы еще раз доказали, что если в точке экстремума существует конечная или определенного знака бесконечная производная, то она равна нулю. Отметим, что доказанная лемма дает лишь достаточные, но не необходимые условия для точек строгого возрастания и строгого убывания функций, имеющих в этих точках конечные или бесконечные производные. Это видно уже на примере функции f(x) = x3, у которой точка x = 0 является точкой строгого возрастания, а производная в ней равна нулю: f'(0) = 0 (см. рис. 82).

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

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

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

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

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

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

Таким образом, образно говоря, в условиях теоремы точка является точкой строгого максимума (строгого минимума) функции тогда и только тогда, когда в этой точке строгое возрастание (строгое убывание) функции сменяется ее строгим убыванием (соответственно строгим возрастанием). Подобным образом точка является точкой строгого возрастания (строгого убывания) функции тогда и только тогда, когда с обеих сторон от этой точки функция строго возрастает (соответственно строго убывает) (см. теорему 1).

Пусть функция f непрерывна в окрестности U() точки , дифференцируема в проколотой окрестности

Ủ() и производная сохраняет постоянный знак во всех точках проколотой окрестности Ủ(), лежащих с каждой стороны от точки . Для любой точки x ∈ Ủ(), согласно формуле Лагранжа, имеем ∆y = f'(ε)∆x, где точка ε лежит между точками  и x =  + ∆x. Таким образом,

 (1)

Поэтому если производная f'(x) меняет знак с плюса на минус при переходе через точку :'(x) > 0 при ∆x < 0 и f'(x) < 0 при ∆x > 0, (1)>0 то при ∆x < 0 и (1)<0 при ∆x > 0. Отсюда ∆y < 0 при всех ∆x,  + ∆x Ủ(), т.е. приращение функции ∆y не меняет знака при переходе через точку  и является отрицательным. Это означает, что точка  является точкой строгого локального максимума.

Аналогично, из формулы (1) следует, что если производная f'(x) меняет знак с минуса на плюс при переходе через точку , то (1)<0 при ∆x < 0 и (1)>0 при ∆x > 0, а поэтому при переходе через точку  приращение функции ∆y не меняет знака и положительно. Это означает, что точка  является точкой строгого локального минимума.

Если производная f'(x) не меняет знака при переходе через точку , то из формулы (1) следует, что и отношение ∆y/∆x также не меняет знака при переходе через эту точку и его знак совпадает со знаком производной. Поэтому если f'(x) > 0, x ∈ Ủ(), то ∆y < 0 при ∆x < 0 и ∆y > 0 при ∆x > 0, т.е. точка  является точкой строгого возрастания, а если f'(x) < 0, x ∈ Ủ(), то аналогично получаем, что точка  является точкой строгого убывания.

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

(Рис. №4)

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

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

Теорема 4. Пусть функция y = f(x) n раз дифференцируема в точке , n > 1 и  () = 0, x = 1, 2, ..., n - 1,  () ≠0. (2)

Тогда если n = 2m, m ∈ N, т.е. n - четное число, то функция f имеет в точке  строгий экстремум, а именно строгий максимум при  () < 0 и строгий минимум при () > 0.  Если же n = 2m - 1, m ∈ N, т. е. n - нечетное число, то функция f не имеет в точке  экстремума; в этом случае при  () > 0 точка  является точкой строгого возрастания функции f, а при  () < 0 - ее точкой строгого убывания.

Предпошлем доказательству одно простое замечание: если β(x) = o(α(x)), x→, где функции α и β заданы в некоторой окрестности точки  ∈ R, то существует такая окрестность U() этой точки, что при x ∈ U() справедливо неравенство

|β(x)| = |α(x)|/2. (3)

В самом деле,

| β (x)| = (x)α(x), (4)

где  = 0, и, следовательно, существует такая окрестность U(), что при x ∈ U() выполняется неравенство

| (x)| < 1/2. (5)

Из (4) и (5) следует неравенство (3).

Напишем формулу Тейлора порядка n для функции f в окрестности точки  .В силу условий (2) будем иметь

∆y = f( + ∆x) - f() = + o(), ∆x→0. (6)

Так как () ≠0, то()= o, ∆x→0,

т.е. второй член правой части равенства (6) является бесконечно малым по сравнению с первым. Поэтому, согласно (3), существует такая окрестность U() точки , что при x ∈ U() для функции o() в формуле (6) выполняется неравенство

|o(|<= |∆|

и, следовательно, при достаточно малых ∆x знак правой части равенства (6), а потому и знак приращения функции ∆y, совпадает со знаком первого слагаемого правой части.   Если n = 2k, то в формуле (6) приращение аргумента ∆x возводится в четную степень, поэтому знак приращения функции ∆y не зависит от знака ∆x≠0 и, следовательно,  является точкой строгого экстремума, причем строгого максимума при  () < 0 (в этом случае ∆y < 0, ∆x≠0) и строгого минимума при  () > 0 (в этом случае y > 0, ∆x≠0).  Если же n = 2k - 1, то ∆x возводится в нечетную степень, и поэтому знак ∆y меняется вместе с изменением знака ∆x, следовательно, точка  не является точкой экстремума. Если ∆x меняет знак с минуса на плюс, то при  () > 0 приращение ∆y также меняет знак с минуса на плюс и, следовательно,  является точкой возрастания функции f, а при  () < 0 приращение ∆y меняет знак с плюса на минус и, следовательно, точка  является точкой убывания функции f.

Отметим специально частный случай теоремы 4 при n = 2.   Если f'(x) = 0, а f"(x) > 0, то точка  является точкой строгого минимума, а если f'(x) = 0, а f"(x) < 0, (рис. №5), то - точкой строгого максимума.  Подчеркнем, что все условия экстремума, полученные в этом параграфе, относятся к внутренним точкам промежутка, на котором была определена функция. На концах промежутка требуется проводить отдельные исследования и при применении методов дифференциального исчисления использовать в концевых точках понятие односторонних производных.

Минимум Максимум

(Рис. №5)

Укрупненная блок-схема алгоритма

procedure TfrmMain.edXminKeyPress(Sender: TObject; var Key: Char);


procedure TfrmMain.Button1Click(Sender: TObject);


procedure TfrmMain.mniPropSaveClick(Sender: TObject);


procedure TfrmMain.mniLoadPropClick(Sender: TObject);


procedure TfrmMain.cbFunctionCloseUp(Sender: TObject);


procedure TfrmMain.SetFunctionProperties(mf: TFunctionProperties);


function TfrmMain.GetFunctionProperties: TFunctionProperties;


procedure TfrmMain.FormCreate(Sender: TObject);


procedure TfrmMain.N1Click(Sender: TObject);


procedure TfrmMain.N2Click(Sender: TObject);


procedure TfrmGraf.CreateParams(var Params: TCreateParams);


procedure TfrmGraf.mniZoomPClick(Sender: TObject);


procedure TfrmGraf.mniZoomMClick(Sender: TObject);


procedure TfrmGraf.mni100Click(Sender: TObject);


procedure TfrmGraf.mniFileClick(Sender: TObject);


procedure TfrmGraf.FormClose(Sender: TObject; var Action: TCloseAction);


procedure TfrmGraf.SetFunctionProperties;


procedure TfrmGraf.BuildGraf;


procedure TfrmGraf.mniPropSaveClick(Sender: TObject);


procedure TfrmGraf.mniLoadPropClick(Sender: TObject);


procedure TfrmGraf.FormCreate(Sender: TObject);


procedure TfrmGraf.Button1Click(Sender: TObject);

Листинг программы и модулей

unit Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, ExtCtrls, UmGlobal, Menus, ShellAPI;= class(TForm): TPanel;: TComboBox;: TGroupBox;: TGroupBox;: TStringGrid;: TGroupBox;: TLabel;: TEdit;: TLabel;: TEdit;: TGroupBox;: TLabel;: TEdit;: TButton;: TSaveDialog;: TOpenDialog;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;edXminKeyPress(Sender: TObject; var Key: Char);StringGrid1KeyPress(Sender: TObject; var Key: Char);Button1Click(Sender: TObject);mniPropSaveClick(Sender: TObject);mniLoadPropClick(Sender: TObject);cbFunctionCloseUp(Sender: TObject);GetFunctionProperties: TFunctionProperties;SetFunctionProperties(mf:TFunctionProperties);FormCreate(Sender: TObject);N1Click(Sender: TObject);N2Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TfrmMain;Unit2,unit3;

{$R *.dfm}TfrmMain.edXminKeyPress(Sender: TObject; var Key: Char);

//запрет ввода неверных символов в компонеты ввода Edits,text:string;:=TEdit(Sender).text;key of

'0'..'9',#8,#13:; // разрешены только числовые значения,

',','.': begin //разделитель дробной части,(Text<>'') and (Text[Length(Text)] in ['0'..'9']) then:=DecimalSeparator:=#0;pos(DecimalSeparator,text)<>0 then:=#0;;

'-': begin // и минус.:=#0;(Length(text)>0)and(Text[1]='-') then:=Copy(text,2,Length(text)-1)Text:='-'+Text;(Sender).text:=Text;(Sender).SelStart:=Length(Text);;;key:=#0;;;TfrmMain.StringGrid1KeyPress(Sender: TObject; var Key: Char);

//запрет ввода неверных символов в StringGridtext:string;:=TStringGrid(Sender).Cells[TStringGrid(Sender).Col,(Sender).Row];key of

'0'..'9',#8:; // разрешены только числовые значения,

',','.': begin //разделитель дробной части,(Text<>'') and (Text[Length(Text)] in ['0'..'9']) then:=DecimalSeparatorKey:=#0;pos(DecimalSeparator,text)<>0 then key:=#0;;

'-': begin // и минус:=#0;(Length(text)>0)and(Text[1]='-') then:=Copy(text,2,Length(text)-1)Text:='-'+Text;(Sender).Cells[TStringGrid(Sender).Col,(Sender).Row]:=Text;.ProcessMessages;(Windows.getFocus,EM_SETSEL,length(text),length(text));;

#13: // Enter(TStringGrid(Sender).Col+1)<TStringGrid(Sender).ColCount then(Sender).Col:=TStringGrid(Sender).Col+1;key:=#0;;;TfrmMain.Button1Click(Sender: TObject);

// запуск построения графика функцииgf:TfrmGraf;:=TfrmGraf.create(Self);.mF:=GetFunctionProperties;.Show;.BuildGraf;;TfrmMain.mniPropSaveClick(Sender: TObject);

// сохранеие выбранных параметров функцииcf:TFunctionProperties;:=GetFunctionProperties;SaveDialog1.Execute then(SaveDialog1.FileName,cF);;TfrmMain.mniLoadPropClick(Sender: TObject);

// защита от поврежденных файловmf:TFunctionProperties;:integer;OpenDialog1.Execute then:=LoadProperties(OpenDialog1.FileName);('Ошибка загрузки файла',mtError,[mbOk],0);;;(mf);;;TfrmMain.cbFunctionCloseUp(Sender: TObject);cF:TFunctionProperties;.FName:=cbFunction.Text;.FNumb:=cbFunction.ItemIndex;

// при выборе функции задаем некоторые начальные значанения (для примера)cF.FNumb of

:begin // y = n * e^mx.FConstName:='nm';.FConstValues[1]:=2;.FConstValues[2]:=3;.Xmin:=-1;.Xmax:=1;.dX:=0.01;;

:begin // y = n * tg(m * x).FConstName:='nm';.FConstValues[1]:=1.3;.FConstValues[2]:=2;.Xmin:=-3;.Xmax:=3;.dX:=0.01;;

:begin // y = k * ctg(m * x).FConstName:='km';.FConstValues[1]:=0.001;.FConstValues[2]:=400;.Xmin:=-0.05;.Xmax:=0.05;.dX:=0.01;;

:begin // y = n * ln(m * x).FConstName:='nm';.FConstValues[1]:=2;.FConstValues[2]:=0.1;.Xmin:=0;.Xmax:=4;.dX:=0.01;;

:begin // y = n * arcsin(m * x).FConstName:='nm';.FConstValues[1]:=2;.FConstValues[2]:=2;.Xmin:=-0.3;.Xmax:=0.53;.dX:=0.01;;

:begin // y = n * arccos(m * x).FConstName:='nm';.FConstValues[1]:=2;.FConstValues[2]:=5;.Xmin:=-0.25;.Xmax:=0.18;.dX:=0.01;;;(cF);;TfrmMain.SetFunctionProperties(mf: TFunctionProperties);

// установка параметров функции в компонеты ввода StringGridI:integer;.ItemIndex:=mf.FNumb;.ColCount:=1+Length(mf.FConstName);I:=1 to StringGrid1.ColCount-1 do.Cells[i,1]:=FloatToStrF(mf.FConstValues[i],ffGeneral,8,8);.Cells[i,0]:=mf.FConstName[i];;.Text:=FloatToStrF(mf.Xmin,ffGeneral,8,8);.Text:=FloatToStrF(mf.Xmax,ffGeneral,8,8);.Text:=FloatToStrF(mf.dX,ffGeneral,8,8);;TfrmMain.GetFunctionProperties: TFunctionProperties;

// получение параметров функции из компонентов ввода StringGridi:integer;.FNumb:=cbFunction.ItemIndex;.FConstName:='';.FName:=cbFunction.Text;i:=1 to StringGrid1.ColCount-1 do.FConstName:=Result.FConstName+StringGrid1.Cells[i,0];I:=1 to StringGrid1.ColCount-1 do.FConstValues[i]:=StrToFloat(StringGrid1.Cells[i,1]);.Xmin:=StrToFloat(edXmin.Text);.Xmax:=StrToFloat(edXmax.Text);.dX:=StrToFloat(eddX.Text);;TfrmMain.FormCreate(Sender: TObject);i:integer;i:=1 to StringGrid1.ColCount-1 do.Cells[i,1]:='0';;.Cells[0,0]:='Коэффициенты';.Cells[0,1]:='Значения';(self);;TfrmMain.N1Click(Sender: TObject);f:TAboutBox;:=TAboutBox.create(self);.ShowModal;.free;;TfrmMain.N2Click(Sender: TObject);dir:string;:=GetCurrentDir+'\help.doc';(handle,'open',PChar(dir),nil,nil,SW_SHOWNORMAL);;.Unit2;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, umGlobal, ImgList, Menus, TeeProcs, TeEngine, Chart, ExtCtrls,, Buttons, Series,math, StdCtrls, Grids;= class(TForm): TPanel;: TPanel;: TChart;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TImageList;: TMenuItem;: TSpeedButton;: TSpeedButton;: TSpeedButton;: TSavePictureDialog;: TLineSeries;: TMenuItem;: TMenuItem;: TMenuItem;: TSaveDialog;: TOpenDialog;: TStringGrid;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TMemo;: TButton;mniZoomPClick(Sender: TObject);mniZoomMClick(Sender: TObject);mni100Click(Sender: TObject);mniFileClick(Sender: TObject);FormClose(Sender: TObject; var Action: TCloseAction);BuildGraf;mniPropSaveClick(Sender: TObject);mniLoadPropClick(Sender: TObject);SetFunctionProperties;FormCreate(Sender: TObject);Button1Click(Sender: TObject);CreateParams(var Params: TCreateParams); override;

{ Private declarations }

{ Public declarations }:TFunctionProperties;;: TfrmGraf;

{$R *.dfm}TfrmGraf.CreateParams(var Params: TCreateParams);

// каждое окно будет иметь свою кнопку на панели задачCreateParams(Params);Params do:= ExStyle or WS_EX_APPWINDOW;;TfrmGraf.mniZoomPClick(Sender: TObject);.ZoomPercent(110);;TfrmGraf.mniZoomMClick(Sender: TObject);.ZoomPercent(90);;TfrmGraf.mni100Click(Sender: TObject);.UndoZoom;;TfrmGraf.mniFileClick(Sender: TObject);

// сохранеие графика в графическом видеsavepicturedialog1.Execute thenextractfileext(SavePictureDialog1.FileName)='.bmp' then.SaveToBitmapFile(savepicturedialog1.FileName).SaveToMetafile(savepicturedialog1.FileName);;TfrmGraf.FormClose(Sender: TObject; var Action: TCloseAction);:=caFree; // при закрытии окна оно уничтожается в памяти;TfrmGraf.SetFunctionProperties;

// установка значений функции в визуальные элементы формыI:integer;.RowCount:=1+Length(mf.FConstName);I:=1 to StringGrid1.RowCount-1 do.Cells[1,i]:=FloatToStrF(mf.FConstValues[i],ffGeneral,8,8);.Cells[0,i]:=mf.FConstName[i];;.Caption:=FloatToStrF(mf.Xmin,ffGeneral,8,8);.Caption:=FloatToStrF(mf.Xmax,ffGeneral,8,8);.Caption:=FloatToStrF(mf.dX,ffGeneral,8,8);;TfrmGraf.BuildGraf;

// построение графикаcX,cY:double;:boolean;,Ymin,Xmin,Xmax:double;:=-MaxDouble;:=MaxDouble;.UndoZoom;:=False;.Clear; Memo1.Clear;;.Title.Text.Text:=mf.FName;:='График: '+ mf.FName;:=mF.Xmin; // начальное значение X ФункцииcX<=mF.Xmax domf.FNumb of // вычисляем выбранную функцию

: cY:=mF.FConstValues[1]* exp(mF.FConstValues[2]*cX);

: cY:=mF.FConstValues[1]* Tan(mF.FConstValues[2]*cX);

: cY:=mF.FConstValues[1]* CoTan(mF.FConstValues[2]*cX);

: cY:=mF.FConstValues[1]* Ln(mF.FConstValues[2]*cX);

: cY:=mF.FConstValues[1]* ArcSin(mF.FConstValues[2]*cX);

: cY:=mF.FConstValues[1]* ArcCos(mF.FConstValues[2]*cX);;Ymax<cY then:=cY;:=cX;;Ymin>cY then:=cY;:=cX;;fl then //проверка на разрыв графика функции.Lines.Add('Х='+Floattostrf(cX,ffGeneral,8,8)

+' - первое возможное расчетное значение');:=False;not Fl then.Lines.Add('При значении Х='+Floattostrf(cX,ffGeneral,8,8)

+' функция терпит разрыв');:=True;;.Addxy(cX,cY); // заносим значение функции в график:=cX + mF.dX;// увеличиваем значение Х функции;.Lines.Add('На заданном промежутке значения экстремумов составили:');.Lines.Add('Ymin='+floatToStrF(Ymin,ffGeneral,8,8)+

' Xmin='+floatToStrF(Xmin,ffGeneral,8,8));.Lines.Add('YMax='+floatToStrF(Ymax,ffGeneral,8,8)+

' Xmax='+floatToStrF(Xmax,ffGeneral,8,8));;TfrmGraf.mniPropSaveClick(Sender: TObject);

// сохранеие параметров в файлSaveDialog1.Execute then(SaveDialog1.FileName,mF);;TfrmGraf.mniLoadPropClick(Sender: TObject);

// загрузка параметров из файлаOpenDialog1.Execute then:=LoadProperties(OpenDialog1.FileName);('Ошибка загрузки файла',mtError,[mbOk],0);;;;;;

TfrmGraf.FormCreate(Sender: TObject);.Cells[0,0]:='Коэф';.Cells[1,0]:='Знач';;TfrmGraf.Button1Click(Sender: TObject);(Owner).Show; // показать окно параемтров;.Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,, ExtCtrls;= class(TForm): TPanel;: TImage;: TLabel;: TLabel;: TLabel;: TLabel;: TButton;: TLabel;

{ Private declarations }

{ Public declarations };: TAboutBox;

{$R *.dfm}.TFunctionProperties=record //описание функции общедоступой для всех форм:string[40];:byte;:string[5];:array[1..5] of double;:double;:double;:double;;SavePropertis(FileName:string; fP:TFunctionProperties);LoadProperties (FileName:string):TFunctionProperties;SavePropertis(FileName:string; fP:TFunctionProperties);f:file of TFunctionProperties;(f,FileName);(f);(f, fP);(f);;LoadProperties (FileName:string):TFunctionProperties;f:file of TFunctionProperties;(f,FileName);(f);(f, Result);(f);;.Graf;,in 'Unit1.pas' {frmMain},in 'UmGlobal.pas',in 'Unit2.pas' {frmGraf},in 'Unit3.pas' {AboutBox};

$R *.res}.Initialize;.CreateForm(TfrmMain, frmMain);.Run;.

Результат работы приложения




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

Сохраненный график в формате wmf:

 

Файл-справка

О программе

НАХОЖДЕНИЕ ЛОКАЛЬНОГО ЭКСТРЕМУМА

ФУНКЦИИ ОДНОГО АРГУМЕНТА.

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

.   y = n * e^mx

2.      y = n * tg(m * x)

.        y = k * ctg(m * x)

.        y = n * ln(m * x)

.        y = n * arcsin(m * x)

.        y = n * arccos(m * x)

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

Расчет экстремума.

1. При запуске программы необходимо выбрать функцию из списка.

2.   После - расставить значения коэффициентов строках для заполнения:

Значения коэффициентов(n,m,k);

Область построения(Xmin,Xmax);

Шаг дискретизации(dX);

3.      Нажать на кнопку «Построить график». Откроется новое окно, где есть возможность увидеть график, приблизить его, зажав левую клавишу мыши и потянув по диагонали вправо-вниз что бы увеличить (влево-вверх что бы уменьшить). Скроллинг изображения производиться зажатием правой кнопки мыши. Под графиком выведены значения экстремумов на данном промежутке.

4. Также можно охранить свои параметры и график, кликнув на пункт меню “Файл”→ ”Сохранить параметры функции/график”


5. Загрузить свои параметры можно так же нажав на пункт меню “Файл”→ ”Загрузить параметры”

Спасибо за использование данной программы!

 

 

Заключение

Данная программа проверена на операционных системах Microsoft XP/7/8.1. Для ее корректной работы требуется 1,01 Мб.

Ошибок при запуске не обнаружено. Удобство программы было отмечено некоторыми пользователями. Они были довольны интерфейсом и быстродействием программ. В среднем для прорисовки графика и нахождения экстремумов требуется 1-3 секунды.

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

Список использованной литературы

1.Круценюк, К. Ю. Численные методы решения уравнений (Excel, Turbo Pascal, Delphi) [Текст] : учеб. пособие / К. Ю. Круценюк ; Норильский индустр. ин-т. - Норильск : НИИ, 2010. - 76 с. - Библиогр.: с. 73-74 ( 24 назв.).

.Круценюк, К. Ю. Технология визуального программирования (DELPHI для экономистов) [Текст]: лабораторный практикум / К. Ю. Круценюк ; Норильский индустр. ин-т. - Норильск : НИИ, 2008. - 92 с. - Библиогр.: с. 90 ( 19 назв.).

.Delphi 7 [Текст] / Хомоненко А.Д. [ и др.] ; под ред. А.Д. Хомоненко. - СПб. : БХВ-Петербург, 2006. - 1216 с. : ил. - Предм. указ.: с. 1196-1200.

.С.Г. Фомичева. Визуальная среда программирования Delphi/Учеб. пособие Норильск, НИИ,1999.

.Пискунов Н.С. Дифференциальное и интегральное исчисления: Учеб. Для втузов. В 2-х т. Т. I: - М.: Интеграл - Пресс, 2001. - 416 с.

.Научная библиотека: 4.17. Локальный экстремум функции, http://sernam.ru/lect_math2.php?id=57

.Школьная коллекция: Локальный экстремум, http://school-collection.edu.ru/catalog/res/e0bd4447-c571-4282-a3e5-7915a08c949e/view/

.Нуклипс: 15.2. Локальные экстремумы функций, http://nuclphys.sinp.msu.ru/mathan/p1/m1502.html

.Mazprofs: Возрастание, убывание и экстремумы функции, http://mathprofi.ru/vozrastanie_ubyvanie_ekstremumy_funkcii.html

.Math24: Локальные экстремумы функции, http://www.math24.ru/локальные-экстремумы-функции.html

.Википедия: Экстремум, https://ru.wikipedia.org/wiki/Экстремум

.Википедия: Delphi (язык программирования), https://ru.wikipedia.org/wiki/Delphi_(язык_программирования)

Похожие работы на - Разработка программного проекта определения локальных экстремумов функции

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!