37279

ПРИМЕНЕНИЕ ТЕХНОЛОГИЙ JAVA И JAVAFX ДЛЯ РАЗРАБОТКИ ВИРТУАЛЬНЫХ ЛАБОРАТОРИЙ МАТЕМАТИЧЕСКОГО МОДЕЛИРОВАНИЯ

Курсовая

Информатика, кибернетика и программирование

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

Русский

2013-09-24

912.5 KB

15 чел.

Федеральное агентство по образованию

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

«Астраханский государственный университет»

Кафедра прикладной математики и информатики

Допускается к защите  

" ____ " __________________2011 г.

Зав. кафедрой ___________________

КУРСОВАЯ РАБОТА

ПРИМЕНЕНИЕ ТЕХНОЛОГИЙ JAVA И JAVAFX ДЛЯ РАЗРАБОТКИ ВИРТУАЛЬНЫХ ЛАБОРАТОРИЙ МАТЕМАТИЧЕСКОГО МОДЕЛИРОВАНИЯ

Выполнил:     

      студент группы ____________________________  

    Научный руководитель:    

____________________________

       Ф.И.О.,  степень, звание

 

Астрахань – 2011


ОГЛАВЛЕНИЕ

[1]
2. ОБЗОР ТЕХНОЛОГИЙ ДЛЯ СОЗДАНИЯ ИНТЕРНЕТОРИЕНТИРОВАННЫХ ВИРТУАЛЬНЫХ ЛАБОРАТОРИЙ

[1.1]
2.1. Языки программирования Java и JavaFX

[1.2] 2.2. Среда разработки NetBeans

[1.3] 2.3. Класс численных методов

[2] 3. АРХИТЕКТУРА АППЛЕТА

[2.1] 3.1. Принцип работы апплета

[2.2] 3.2. Описание алгоритма программы на примере модели межвидовой конкуренции

[3] 4. ЗАКЛЮЧЕНИЕ

[4]
5. СПИСОК ЛИТЕРАТУРЫ

[5]
6. ПРИЛОЖЕНИЕ


1. ВВЕДЕНИЕ

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

Математическая модель – это приближенное описание какого-либо класса явлений внешнего мира, выраженное с помощью математической символики. Математическое моделирование – это метод познания, прогнозирования, управления[1].

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

Методы моделирования в настоящее время внедрились практически во все сферы человеческой деятельности: технические, социально-экономические, сложные экономические, общественные, сферы международных отношений и др. Это связано с необходимостью расширения и углубления знаний реального мира. Существует множество реальных объектов и процессов, информацию о которых мы не можем получить из-за малости или масштабности размеров (объекты микро- и макрокосмоса); высоких или криогенных температур. Не можем проводить эксперименты – это может быть связано с длительностью процесса (экологические); высокой стоимостью исследований объекта-оригинала; уникальностью объекта исследования; отсутствием объекта-оригинала (эскизные, архитектурные и конструкторские проекты), опасностью исследования (ядерные взрывы) и другие[2].

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

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

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

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


2. ОБЗОР ТЕХНОЛОГИЙ ДЛЯ СОЗДАНИЯ ИНТЕРНЕТОРИЕНТИРОВАННЫХ ВИРТУАЛЬНЫХ ЛАБОРАТОРИЙ

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

Например, существующая технология MATLAB Web Server позволяет разработчикам создавать использующие стандартные компоненты и численные библиотеки MATLAB приложения для работы в сети Интернет. HTML-документы служат графическим интерфейсом для распределенных приложений MATLAB. Вычисления ведутся на стороне сервера, что обуславливает необходимость перегрузки страницы для перерасчета модели по новым параметрам. Часть моделей виртуальной лаборатории математического моделирования (http://mathmod.aspu.ru) разработаны с использованием средств именно этой технологии, что порождает определенные недостатки: высокую стоимость и большие временные затраты при проведении моделирования [3].

Для решения поставленной задачи были определены следующие требования для выбора технологии:

  •  Независимость от платформы;
  •  Относительная легкость синтаксиса;
  •  Объектная ориентированность языка;
  •  Надежность;
  •  Безопасность;
  •  Независимость от архитектуры;
  •  Работа в сети Интернет;
  •  Свободная распространяемость;


2.1. Языки программирования Java и JavaFX

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

Java —  это объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems(ru.sun.com). Изначально Java был создан как мощный язык программирования для интерактивного телевидения и управления бытовыми устройствами. Однако, быстрое развитие сети интернет открыло важную технологию Java — создание небольших программ, называемых апплетами (applets), которые могут быть загружены Веб-обозревателем с сервера и исполнены на стороне клиента. Со временем Java стал обязательным атрибутом каждого Веб-сервера и каждого Веб-обозревателя, претендующего на соответствие требованиям современности.

Популярность Java в сети Интернет объясняется тем, что он имеет одно принципиальное отличие от всех остальных языков программирования. Как известно, все языки делятся на компилируемые и интерпретируемые. Программа на компилируемом языке (например, C++) перед использованием должна быть предварительно скомпилирована и собрана в загрузочный модуль в машинных кодах. Такой модуль жестко привязан к конкретной платформе и конкретной операционной системе. Интерпретируемые языки (например, JavaScript) не требуют предварительной компиляции, программы на них исполняются интерпретатором, который читает исходный текст программы и немедленно его исполняет. Недостатком таких языков является низкая скорость работы и полная зависимость от исполняющей системы [4].

Разработчики Java избрали средний путь, который состоит в следующем. Программа на языке Java (обычно это файл с расширением .java) компилируется в промежуточный стандартный код, который называется байт-кодом (такие файлы имеют расширение .class). Этот код не является машинным языком какого-либо конкретного процессора, а специально создан авторами Java; его следует рассматривать как язык ассемблера виртуальной Java-машины, не имеющей физической реализации. Для того, чтобы скомпилированная Java-программа могла исполняться на конкретном компьютере, на него нужно установить программу, интерпретирующую байт-коды Java (обычно эту программу также называют виртуальной Java-машиной). Поскольку байт-коды Java — это язык уровня ассемблера, нетрудно добиться полной совместимости реализаций виртуальных машин для разных платформ. Описанный процесс графически изображен на рис 2.1.

Рис. 2.1. Процесс запуска программы на Java.

Разобрав принцип работы данного языка программирования, коротко рассмотрим другие возможности Java, необходимые для решения поставленной задачи:

  •  Создание интернет-приложений, которые называются апплетами. Апплет — прикладная программа на Java в форме байт-кода, которая встраивается в веб-обозреватель;
  •  Объектная ориентированность языка. Java — полностью объектно-ориентированный язык, даже в большей степени, чем C++. Практически Все сущности в языке Java являются объектами, что позволяет разрабатывать сложные проекты;
  •  Надежность. Язык Java предназначен для создания программ, которые должны надежно работать в любых ситуациях. Компилятор выявляет такие ошибки, которые в других языках обнаруживаются только на этапе выполнения программы, а также ошибки, вызвавшие повреждение памяти из-за неверного указателя;
  •  Безопасность. Язык Java предназначен для использования в сетевой или распределенной среде. По этой причине большое внимание было уделено безопасности. Язык Java позволяет создавать системы, защищенные от вирусов и постороннего вмешательства;
  •  Кросплатформенность. Компилятор Java (the Java Compiler) генерирует архитектурно-независимый двоичный код, который корректно исполняется на любой машине, где имеется так называемая Виртуальная Java-машина. Такой подход позволяет разработчикам писать программы на языке Java и использовать их практически везде;

Разработка виртуальных лабораторий математического моделирования требует визуализации данных в виде графиков, анимации, а также создание удобного интерфейса для пользователя. В связи с этим, необходимо использовать соответствующие технологии и пакеты. Выбирая среди наиболее подходящих средств визуализации, таких как Silverlight, Flash, JQuery и JavaFX, мой выбор пал на последнее по следующим причинам:

  •  JavaFX создана на базе технологии Java: JavaFX расширяет возможности Java, позволяя разработчикам использовать любую библиотеку Java в JavaFX-приложениях;
  •  Данная технология позволяет пользователям видеть JavaFX-приложения в веб-обозревателе или вообще не использовать веб-обозреватель, перетащив такое приложение на рабочий стол;
  •  Она обеспечивает эффективное взаимодействие между дизайнерами и разработчиками с помощью утилиты Project Nile: дизайнеры могут работать со своими обычными инструментами и при этом взаимодействовать с создателями веб-сценариев, использующими среду NetBeans IDE вместе с JavaFX;
  •  Она позволяет разработчикам создавать насыщенные интерактивные приложения для различного информационного наполнения, насыщенные векторной графикой, анимацией, аудио и видео;

2.2. Среда разработки NetBeans

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

За более чем десятилетнюю историю языка Java сменилось не одно поколение интегрированных сред разработки (Integrated Development Environment — IDE). Эволюция IDE средств обусловлена множеством факторов, совокупность которых называется «информационные технологии», включающих в себя программную и аппаратную составляющие, а так же развитие самого языка. Первые IDE средства представляли в сегодняшнем понимании примитивный текстовый редактор, который служил только для набора исходных кодов, а всю остальную работу, начиная от компиляции и заканчивая окончательной сборкой проекта приходилось выполнять вручную. Сегодня же средства разработки являются фактически многофункциональными программными комплексами.

На сегодняшний день существует большое количество таких сред для разработки Java приложений. Перечень части из них приведен в таблице 2.1.

Таблица 2.1 IDE для Java.

Название

Производитель

Сайт производителя

1

NetBeans

NetBeans, Inc.

http://www.netbeans.com/

2

Eclipse

eclipse.org

http://www.eclipse.org

3

Bluette

free RAD Java tool

http://blue.donga.ac.kr/bluette/

4

Apptivity

Progress Software

http://apptivity.progress.com/

5

Elixir

Elixir Technology

http://www.elixir.com.sg/

6

Hyperwire

Kinetix

http://www.ktx.com/

7

Jamba Animator

Interleaf

http://www.jamba.com/

8

Jamba

Interleaf

http://www.jamba.com/

9

Java Studio

Sun Microsystems

http://www.sun.com/

10

JIG

S Cubed

http://www.scubed.cc/

11

JPad

ModelWorks

http://www.modelworks.com/

12

Lemur

Island Design

http://www.island-design.co.uk/

13

OEW 1.0

Innovative Software

http://www.isg.de/OEW/Java/

14

Roaster

Natural Intelligence

http://www.roaster.com/roaster/

15

SNiFF+

TakeFive Software

http://www.takefive.com/sniff/

16

Spirit

eVisNet Limited

http://www.evis.net/

17

SuperCede

SuperCede, Inc.

http://www.supercede.com/

18

Vision Jade

Vision Software

http://www.vision-soft.com/

19

Visual Cafe

Symantec

http://cafe.symantec.com/

20

Java WebIDE

Chami.com

http://www.chami.com/webide/

21

IntelliJ IDEA

IntelliJ IDEA

http://www.jetbrains.com/idea/

22

JCreator

Xinox Software

http://www.jcreator.com/

23

jEdit

jEdit

http://www.jedit.org/

24

X-Develop

Omnicore Software

http://www.omnicore.com/

25

Gel IDE

GExperts Inc

http://www.gexperts.com/

Из всего этого большого числа программного обеспечения, стоит выделить NetBeans. Почему именно он? Все просто. Во-первых, он полностью бесплатный. Во-вторых,  поддерживает разработку на всех трёх платформах (J2SE, J2EE, J2ME). В-третьих, он наиболее популярен среди программистов.  Также он поддерживает проверку синтаксиса, завершение кода и свертывание кода, тем самым делая процесс составления кода на порядок проще, по сравнению с обыкновенным блокнотом. NetBeans позволяет выполнять компилирование, запуск и отладку кода. Также имеются интегрированные GUI-конструкторы (Graphical user interface — GUI).

NetBeans IDE — свободная интегрированная среда разработки приложений (Integrated Development Environment — IDE) на языках программирования Java, JavaFX, Python, PHP, JavaScript, C++ и ряде других[5]. Для разработки программ в среде NetBeans и для успешной инсталляции и работы самой среды NetBeans должен быть предварительно установлен Sun JDK(http://java.sun.com/javase/downloads/index.jsp) или J2EE SDK(java.sun.com/j2ee/1.3/download.html) подходящей версии.

По качеству и возможностям последние версии NetBeans IDE не уступают лучшим коммерческим (платным) интегрированным средам разработки для языка Java, таким, как IntelliJ IDEA, поддерживая рефакторинг, профилирование, выделение синтаксических конструкций цветом, автодополнение набираемых конструкций на лету, множество предопределённых шаблонов кода[6]. Также NetBeans IDE поддерживает плагины, позволяя значительно расширять возможности среды.

2.3. Класс численных методов 

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

,     (2.1)

Для построения графиков зависимости величин  и , а также фазового портрета, необходимо решить данную систему на фиксированном временном промежутке с заданными коэффициентами и начальными условиями. В данном случае, исходную систему (2.1) можно решить численно, используя метод Рунге-Кутта 4 порядка точности.

В отличие от технологии Java, которая не имеет в своем арсенале стандартных пакетов численных методов, с решением подобных задач хорошо справляются такие специализированные математические пакеты как Maple, MATLAB и др.

Однако, существует ряд библиотек численных методов, написанных на Java. Для решения поставленной задачи, я использовал класс численных методов Рунге-Кутта  4 порядка точности из научной Java-библиотеки Майкла Томаса Флэнагана [7]. Данный класс ориентирован на решение как одного дифференциального уравнения, так и систем дифференциальных уравнений.

Разрешение на использование, копирование и изменение данного программного обеспечения и его документации для некоммерческих целей предоставлено бесплатно, при условии, что упоминание автора, доктора Майкла Томаса Фланагана на www.ee.ucl.ac.uk/ ~ mflanaga, появляется во всех копиях и связанных с ними документациях или публикациях.

При соблюдении вышеупомянутых условий, исходный класс был изменен, в соответствии с конкретной поставленной задачей по следующим причинам:

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

В конечном итоге преобразованный класс численного решения системы дифференциальных уравнений первого порядка методом Рунге-Кутта 4 порядка точности имеет следующую структуру:

  •  Инициализация системы дифференциальных уравнений происходит в классе InitSystem.java, исходный код которого расположен в Приложении 1;
  •  Процесс численного решения системы дифференциальных уравнений первого порядка методом Рунге-Кутта 4 порядка точности осуществляется классом RungeKutta_method.java, исходный код которого расположен в Приложении 3;
  •  Значения, полученные в процессе вычисления системы, которые затем используются для анализа и изучения поведения модели, записываются в объект класса coordinates.java, исходный код которого расположен в Приложении 2;

Алгоритм работы класса RungeKutta_method{} изображен на рис. 3.3.

Рис. 2.2. Алгоритм работы класса RungeKutta_method{}

3. АРХИТЕКТУРА АППЛЕТА

После того, как мы определились с языком программирования и всеми необходимыми инструментами, можно приступать к разработке приложения. В моей курсовой работе уже упоминалось, что виртуальная лаборатория математического моделирования будет размещена в глобальной сети Интернет, что позволит обеспечить к ней открытый доступ. В связи с этим, передо мной стоит задача написать  не просто приложение, а апплет, который и будет в конечном итоге размещен на сайте совместной лаборатории Института математических проблем биологии РАН и Астраханского государственного университета «Математическое моделирование и информационные технологии в науке и образовании» (http://mathmod.aspu.ru).

3.1. Принцип работы апплета

Java-апплет  —  прикладная программа на Java в форме байт-кода. Java-апплеты выполняются в веб-обозревателе с использованием виртуальной Java машины (JVM), или в Sun's AppletViewer, автономном инструменте для тестирования апплетов. Java-апплеты были внедрены в первой версии языка Java в 1995. Java-апплеты пишутся на языке программирования Java, но могут быть написаны и на других языках, которые компилируются в байткод Java, таких, как Jython.

Апплеты используются для предоставления интерактивных возможностей веб-приложений, которые не могут быть предоставлены HTML (HyperText Markup Language — язык разметки гипертекста). Так как байт-код Java платформо-независим, то Java-апплеты могут выполняться веб-обозревателями многих операционных систем, включая Microsoft Windows, UNIX, Apple Mac OS и GNU/Linux.

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

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

Преимущества апплетов:

  •  Кроссплатформенность;
  •  апплет может работать на «всех» установленных к этому времени версиях Java, а не только с последней версией;
  •  апплет поддерживается большинством веб-обозревателей;
  •  он кэшируется в большинстве веб-обозревателях, а потому будет быстро загружаться при возвращении на веб-страницу;
  •  он может иметь полный доступ к машине, на которой выполняется, если пользователь согласен на это;
  •  он может перенести работу с сервера к клиенту, делая работу с приложением в сети Интернет удобным и быстрым, даже с большим числом пользователей / клиентов;

В связи с тем, что для визуализации выходных данных, а также создания пользовательского интерфейса мною используется технология JavaFX, то для запуска в веб-обозревателе апплета такого типа необходимо использовать технологию Java Web Start, которая имеет ряд отличий от апплетов.

Java Web Start (часто JavaWS) — технология компании Sun Microsystems, позволяющая запускать приложения на Java из веб-обозревателя. Основана на протоколе Java Network Launching Protocol (JNLP). В отличие от апплетов, приложения Web Start могут запускаться не в окне веб-обозревателя и не имеют с ним прямой связи.

Различия между Java Web Start и апплетами[8]:

  •  Технология Java Web Start используется для доставки обычных приложений, написанных на языке Java и начинающихся с вызова метода main, содержащегося в одном из классов;
  •  Приложения, созданные с помощью технологии Java Web Start, не запускаются внутри веб-обозревателя. Они отображаются вне веб-обозревателя;
  •  Приложения, созданные с помощью технологии Java Web Start, можно запустить с помощью веб-обозревателя, однако механизм, лежащий в основе этого процесса, совершенно отличен от запуска апплетов. Технология Java Web Start гораздо самостоятельнее. Веб-обозреватель просто запустит внешнюю программу, как только загрузит дескриптор приложения, созданного с помощью технологии Java Web Start;
  •  После загрузки приложения, созданного по технологии Java Web Start, оно запускается вне веб-обозревателя;
  •  Технология Java Web Start обеспечивает более мощную поддержку кэширования и автоматического обновления программ по сравнению с технологией Java Plug-In;
  •  Механизм «песочниц» в технологии Java Web Start более гибок и позволяет неподписанным приложениям получать доступ к локальным ресурсам;

3.2. Описание алгоритма программы на примере модели межвидовой конкуренции

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

,     (2.1)

где   – численность 1-го вида,

– численность 2-го вида,

– коэффициент прироста 1-го вида,

– коэффициент прироста 2-го вида,

– коэффициент, описывающий внутривидовое влияние 1-го вида,

– коэффициент, описывающий внутривидовое влияние 2-го вида,

– коэффициент, описывающий влияние со стороны 1-го вида,

– коэффициент, описывающий влияние со стороны 2-го вида.

Пользовательский интерфейс представлен на рисунке 3.1:

Рис. 3.1. Пользовательский интерфейс модели межвидовой конкуренции.

 

На нем представлены следующие элементы:

  •  Заголовок с названием модели и соответствующей системой;
  •  Поля для ввода данных (TextBox) с помощью ползунков (ScrollBar);
  •  Командная кнопка «Рисовать» (Button);
  •  Режим дорисовки (CheckBox);
  •  Панели для графика и фазового портрета (LineChart);

После нажатия на кнопку «Рисовать», выполняется следующий алгоритм:

Рис. 3.2. Алгоритм файла Main.fx.

 Согласно алгоритму на рис. 3.2, после нажатия на кнопку «Рисовать», происходит считывание введенных пользователем входных данных с формы, затем создаются экземпляры следующих классов:

  •  Coordinates{}. В этом классе объявлены массивы для хранения числовых значений координат X, Y, T, необходимых для построения графиков зависимостей и фазового портрета;
  •  InitSystem{}. В этом классе происходит инициализация системы 2-х дифференциальных уравнений первого порядка согласно формуле 2.1, а также соответствующих коэффициентов этой системы;
  •  RungeKutta_method{}. В этом классе реализовано численное решение системы дифференциальных уравнений первого порядка методом Рунге-Кутта 4-го порядка точности;

Данные классы в программе связаны между собой по принципу, изображенному UML-диаграммой на рисунке 3.3.

Рис. 3.3. UML - диаграмма, описывающая связь между классами.

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

Пользовательское окно после выполнения программы по нажатию на кнопку «Рисовать» изображено на рисунке 3.3. В этом случае функция дорисовки неактивна. Апплет с дорисовкой изображен на рисунке 3.4. Дорисовка применяется только к фазовому портрету. Графики функций и  строятся без дорисовки.

Рис. 3.3. Пользовательский интерфейс. Фазовый портрет без дорисовки.

Рис. 3.4. Пользовательский интерфейс. Фазовый портрет с дорисовкой.

При компиляции апплета JavaFX в Neatbeans в папке dist проекта создаётся 4 файла:

  •  model.html — страница со встроенным апплетом;
  •  model.jar — сам апплет;
  •  model.jnlp — для запуска апплета через Webstart;
  •  model_browser.jnlp — для запуска апплета встроенного в страницу;

Протокол JNLP (Java Network Launch Protocol — сетевой протокол запуска приложений на языке Java) описывает запуск приложений Java Web Start. JNLP состоит из набора правил, определяющих, как конкретно реализуется запускающий механизм. Файлы JNLP включают такую информацию, как месторасположение jar архивов (Java ARchive), имя главного класса приложения, ссылки на библиотеки JavaFX. Правильно сконфигурированный веб-обозреватель передает JNLP файлы среде JRE (Java Runtime Environment — реализация виртуальной машины), которая загружает приложение на компьютер клиента и запускает его.

4. ЗАКЛЮЧЕНИЕ

В курсовой работе был проведен анализ технологий разработки интерактивных программ, встраиваемых в веб-обозреватель, в частности, Java и JavaFX, а также рассмотрены программные средства для создания апплетов. В качестве апробации выбранных методов был разработан Java-апплет математической модели межвидовой конкуренции с применением достаточно новой и перспективной технологии JavaFX. Разработанный апплет размещен в сети Интернет и находится по адресу http://mathmod.aspu.ru/dist/model.html .

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

  •  Хищник-Жертва;
  •  Тримолекулярная модель («брюсселятор»);
  •  Модель Холлинга-Теннера;
  •  Модель Ресслера;
  •  Модель Лоренца;
  •  Классически модели Лотки и Вольтера и др.

Полный перечень математических моделей, подлежащих переработке находится на сайте совместной лаборатории Института математических проблем биологии РАН и Астраханского государственного университета «Математическое моделирование и информационные технологии в науке и образовании» (http://mathmod.aspu.ru).  

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


5. СПИСОК ЛИТЕРАТУРЫ

  1.  Тарасевич Ю.Ю. Математическое и компьютерное моделирование. Вводный курс: Учебное пособие. 4-е изд., испр. М.: Едиториал УРСС, 2004.
  2.  Маликов Р.Ф. Практикум по компьютерному моделированию физических явлений и объектов. Учебное пособие. 2-е изд., дополненное. Уфа: Изд-во БашГПУ, 2005.-291с., 2004.
  3.  Зелепухина В.А. Разработка интернет-ориентированных виртуальных лабораторий математического моделирования посредством разделения вычислительных и визуализационных задач // Информационные технологии.— 2010.— № 10.— 22-29.
  4.  Sun Microsystems – http://ru.sun.com/java/.
  5.  NetBeans IDE – The Smarter Way to Code – http://www.netbeans.com/.
  6.  Управление «Институт информатики ИжГТУ». Среда разработки ПО – NetBeans IDE – http://www.pro-spo.ru/index.php.
  7.  Michael Thomas Flanagan's Java Scientific Library – http://www.ee.ucl.ac.uk/~mflanaga/java/index.html.
  8.  Свободная энциклопедия Википедия – http://en.wikipedia.org.


6. ПРИЛОЖЕНИЕ

Приложение 1

Класс инициализации системы дифференциальных уравнений первого порядка для модели межвидовой конкуренции имеет следующий вид:

InitSystem.java

package model;

class InitSystem {

private float k1_1 = 0.0f, k1_2 = 0.0f, k1_3 = 0.0f, k2_1 = 0.0f, k2_2 = 0.0f, k2_3 = 0.0f;

        public float[ ] derivn(float x, float[ ] y){

                 float[ ] dydx = new float [y.length];

                 dydx[0] = y[0]*(k1_1-k1_2*y[0]-k2_3*y[1]);

                 dydx[1] = y[1]*(k2_1-k2_2*y[1]-k1_3*y[0]);

                 return dydx;

        }

        public void setKvalues(float k1_1, float k1_2, float k1_3, float k2_1,float k2_2,float k2_3){

           this.k1_1 = k1_1;

           this.k1_2 = k1_2;

           this.k1_3 = k1_3;

           this.k2_1 = k2_1;

           this.k2_2 = k2_2;

           this.k2_3 = k2_3;

        }

}


Приложение 2

Класс инициализации значений ,  и  в виде массивов данных имеет следующий вид:

coordinates.java

package model;

public class coordinates {

float[] X=new float[1000];

float[] Y=new float[1000];

float[] T=new float[1000];

}


Приложение 3

Класс численного решения дифференциального уравнения, а также системы дифференциальных уравнений первого порядка методом Рунге-Кутта 4 порядка точности имеет следующий вид:

RungeKutta_method.java

/*

*   Class RungeKutta

*       requires interfaces DerivFunction and DerivnFunction

*

*   Contains the methods for the Runge-Kutta procedures for solving

*   single or solving sets of ordinary differential equations (ODEs)

*   [draws heavily on the approach adopted in Numerical Recipes

*   (C language version)http://www.nr.com]

*

*   A single ODE is supplied by means of an interface,

*       DerivFunction

*   A set of ODEs is supplied by means of an interface,

*       DerivnFunction

*

*   WRITTEN BY: Dr Michael Thomas Flanagan

*

*   DATE:     February 2002

*   UPDATES:    22 June 2003,  April 2004,

*               15 September 2006 (to incorporate improvements suggested by Klaus Benary [Klaus.Benary@gede.de])

*               11 April 2007,  25 April 2007,   4 July 2008,   26-31 January 2010

*

*   DOCUMENTATION:

*   See Michael Thomas Flanagan's Java library on-line web page:

*   http://www.ee.ucl.ac.uk/~mflanaga/java/RungeKutta.html

*   http://www.ee.ucl.ac.uk/~mflanaga/java/

*

*   Copyright (c) 2002 - 2010

*

*   PERMISSION TO COPY:

*   Permission to use, copy and modify this software and its documentation for

*   NON-COMMERCIAL purposes is granted, without fee, provided that an acknowledgement

*   to the author, Michael Thomas Flanagan at www.ee.ucl.ac.uk/~mflanaga, appears in all copies.

*

*   Dr Michael Thomas Flanagan makes no representations about the suitability

*   or fitness of the software for any or for a particular purpose.

*   Michael Thomas Flanagan shall not be liable for any damages suffered

*   as a result of using, modifying or distributing this software or its derivatives.

*

*************************************************************/

package model;

public class RungeKutta_method{

       private float x0;               

       private float xn;             

       private float y0;               

       private float[] yy0;                 

       private int nODE = 0;                           

       private float step;             

       public RungeKutta_method(){

       }

       public void setInitialValueOfX(float x0){

           this.x0 = x0;

       }

       public void setFinalValueOfX(float xn){

           this.xn = xn;

       }

       public void setInitialValuesOfY(float[] yy0){

           this.yy0 = yy0;

           this.nODE = yy0.length;

           if(this.nODE==1)this.y0 = yy0[0];

       }

       public void setStepSize(float step){

           this.step = step;

       }

    

public void fourthOrderMass(InitSystem g,coordinates XY){

           if(Double.isNaN(this.x0))throw new IllegalArgumentException("No initial x value has been entered");

           if(Double.isNaN(this.xn))throw new IllegalArgumentException("No final x value has been entered");

           if(this.yy0==null)throw new IllegalArgumentException("No initial y values have been entered");

           if(Double.isNaN(this.step))throw new IllegalArgumentException("No step size has been entered");

        float[] k1 =new float[this.nODE];

        float[] k2 =new float[this.nODE];

        float[] k3 =new float[this.nODE];

        float[] k4 =new float[this.nODE];

        float[] y =new float[this.nODE];

        float[] yd =new float[this.nODE];

        float[] dydx =new float[this.nODE];

        float x = 0.0f;

       

        float ns = (this.xn - this.x0)/this.step;

        ns = (float) Math.rint(ns);

        int nsteps = (int) ns;

        this.nIter = nsteps;

        float stepUsed = (this.xn - this.x0)/ns;

               float[][] Y=new float[this.nODE][nsteps];

        

        for(int i=0; i<this.nODE; i++)y[i] = this.yy0[i];

               XY.X[0]=yy0[0];

               XY.Y[0]=yy0[1];

        for(int j=0; j<nsteps; j++){

             x  = this.x0 + j*stepUsed;

             dydx = g.derivn(x, y);

             for(int i=0; i<this.nODE; i++)k1[i] = stepUsed*dydx[i];

             for(int i=0; i<this.nODE; i++)yd[i] = y[i] + k1[i]/2;

             dydx = g.derivn(x + stepUsed/2, yd);

             for(int i=0; i<this.nODE; i++)k2[i] = stepUsed*dydx[i];

             for(int i=0; i<this.nODE; i++)yd[i] = y[i] + k2[i]/2;

             dydx = g.derivn(x + stepUsed/2, yd);

             for(int i=0; i<this.nODE; i++)k3[i] = stepUsed*dydx[i];

             for(int i=0; i<this.nODE; i++)yd[i] = y[i] + k3[i];

             dydx = g.derivn(x + stepUsed, yd);

             for(int i=0; i<this.nODE; i++)k4[i] = stepUsed*dydx[i];

             for(int i=0; i<this.nODE; i++)y[i] += k1[i]/6 + k2[i]/3 + k3[i]/3 + k4[i]/6;

                       XY.X[j]=y[0];

                       XY.Y[j]=y[1];

                       XY.T[j]=this.x0+j*this.step;

                       

        }

    

        

    }

}


Приложение 4

Главный файл апплета Main.fx модели межвидовой конкуренции с пользовательским интерфейсом:

Main.fx

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package model;

import javafx.stage.Stage;

import javafx.scene.Scene;

import javafx.scene.layout.LayoutInfo;

import javafx.scene.layout.Tile;

import javafx.scene.chart.LineChart;

import javafx.scene.chart.part.NumberAxis;

import javafx.scene.control.Label;

import javafx.scene.control.TextBox;

import javafx.scene.control.ScrollBar;

import javafx.scene.control.Button;

import javafx.scene.chart.part.Side;

import java.lang.*;

import javafx.scene.image.*;

import javafx.scene.layout.Flow;

import javafx.scene.control.CheckBox;

/**

* @author Admin

*/

//var X0= 0;

var numberGraf=-1;

//var numOfEquat: Integer;

var numOfEquat=2;

var stepSize=0.1;

var t0=0;

var tn=100;

var numSteps=1000;

//var beginValue=[X0,Y0];

var coordinat=coordinates{};

var tempX0=bind Float.valueOf(textX0.text);

var J=123.456789;

var Imagesystem=ImageView{image:Image{url:"{__DIR__}system.jpg" width: 200

       height: 100}

       }

var modelNAME=Label { layoutInfo: LayoutInfo { width: 300} text: "                    Модель межвидовая конуренция"}

//var CoordinateOfXY = LineChart. Series {};

var CoordinatesOfXY:LineChart. Series[]=[

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {},

                                         LineChart.Series {}

                                        ];

var CoordinateOfXT = LineChart. Series {name: "X(t)"};

var CoordinateOfYT = LineChart. Series {name: "Y(t)"};

var grafikXY =  LineChart {

       legendVisible: false

       showSymbols: false

title: "Фазовый портрет"

       layoutInfo: LayoutInfo { width: 400  height: 400}

xAxis: NumberAxis {

 lowerBound: 0

 upperBound: 10

               label: "x"

}

yAxis: NumberAxis {

 lowerBound: 0

 upperBound: 10

               label: "y"

 }

 data: CoordinatesOfXY

} //инициализация графика X от Y

var grafikXYT =  LineChart {

title: "График"

       legendSide: Side.RIGHT

       showSymbols: false

       layoutInfo: LayoutInfo { width: 600  height: 200}

xAxis: NumberAxis {

              minorTickCount:10

               tickUnit: 10

 lowerBound: 0

 upperBound: 100

               label: "t"

}

yAxis: NumberAxis {

 lowerBound: 0

 upperBound: 10

               label: "x y"

}

data: [CoordinateOfXT,CoordinateOfYT]

} //инициализация графика Y от T

var labelX0=Label { width: 20 text: "Xo"}

var textX0=TextBox {layoutInfo: LayoutInfo {

width: 100} text: bind String.valueOf(valX0) columns: 10 selectOnFocus: false

                   disable:true

                  }

var scrollX0 = ScrollBar { layoutInfo: LayoutInfo { width: 140  height: 15}

   min: 0 max: 10  vertical: false value: 10 unitIncrement: 0.1 visibleAmount :0.01

  

   }

//scrollX0.onMouseDragged

//textX0.onKeyReleased

var labelY0=Label {width: 20 text: "Yo:"}

var textY0=TextBox { layoutInfo: LayoutInfo { width: 100}  text: bind String.valueOf(valY0) columns: 10

                   disable:true

                  }

var scrollY0 = ScrollBar {layoutInfo: LayoutInfo { width: 140  height: 15}

min: 0 max: 10  vertical: false value: 10 unitIncrement:0.1 visibleAmount :0.01}

var labela1=Label {width: 20 text: "a1:"}

var texta1=TextBox { layoutInfo: LayoutInfo { width: 100}  text: bind String.valueOf(vala1) columns: 10 selectOnFocus: false

                   disable:true

                  }

var scrolla1 = ScrollBar {layoutInfo: LayoutInfo { width: 140  height: 15}

   min: 0.01 max: 1  vertical: false value: 0.1 unitIncrement:0.01 visibleAmount :0.01}

var labela2=Label {width: 20 text: "a2:"}

var texta2=TextBox {layoutInfo: LayoutInfo { width: 100}  text: bind String.valueOf(vala2) columns: 10 selectOnFocus: true

                   disable:true

                  }

var scrolla2 = ScrollBar {layoutInfo: LayoutInfo { width: 140  height: 15}

   min: 0.01 max: 1  vertical: false value: 0.2 unitIncrement:0.0099 visibleAmount :0.01}

var labelb1=Label {width: 20 text: "b1:"}

var textb1=TextBox {layoutInfo: LayoutInfo { width: 100} text: bind String.valueOf(valb1) columns: 10 selectOnFocus: true

                   disable:true

                  }

var scrollb1 = ScrollBar {layoutInfo: LayoutInfo { width: 140  height: 15}

   min: 0.01 max: 1  vertical: false value: 0.05 unitIncrement:0.0099 visibleAmount :0.01}

var labelb2=Label {width: 20 text: "b2:"}

var textb2=TextBox {layoutInfo: LayoutInfo { width: 100} text: bind String.valueOf(valb2) columns: 10 selectOnFocus: true

                   disable:true

                  }

var scrollb2 = ScrollBar {layoutInfo: LayoutInfo { width: 140  height: 15}

   min: 0.01 max: 0.15  vertical: false value: 0.1 unitIncrement:0.0014 visibleAmount :0.01}

var labelg1=Label {width: 20 text: "g1:"}

var textg1=TextBox {layoutInfo: LayoutInfo { width: 100} text: bind String.valueOf(valg1) columns: 10 selectOnFocus: true

                  disable:true

                  }

var scrollg1 = ScrollBar {layoutInfo: LayoutInfo { width: 140  height: 15}

   min: 0.01 max: 1  vertical: false value: 0.03 unitIncrement:0.0099 visibleAmount :0.01}

var labelg2=Label {width: 20 text: "g2:"}

var textg2=TextBox {layoutInfo: LayoutInfo { width: 100} text: bind String.valueOf(valg2) columns: 10 selectOnFocus: true

                   disable:true

                  }

var scrollg2 = ScrollBar {layoutInfo: LayoutInfo { width: 140  height: 15}

   min: 0.01 max: 0.15  vertical: false value: 0.15 unitIncrement:0.0014 visibleAmount :0.01}

var repaint=CheckBox {text: "Дорисовка" allowTriState: false selected: false}

var buttonpaint=Button {text: "Рисовать" action: function() {

        var X0= scrollX0.value;

        var Y0= scrollY0.value;

        var a1= scrolla1.value;

        var a2= scrolla2.value;

        var b1= scrollb1.value;

        var b2= scrollb2.value;

        var g1= scrollg1.value;

        var g2= scrollg2.value;

        var beginValue=[X0,Y0];

        var system = InitSystem{};

       system.setKvalues(a1, b1, g1, a2, b2, g2);

        var solve = RungeKutta_method{};

        solve.setInitialValueOfX(t0);

        solve.setFinalValueOfX(tn);

        solve.setInitialValuesOfY(beginValue);

        solve.setStepSize(stepSize);

        

        solve.fourthOrderMass(system,coordinat);

       // delete CoordinatesOfXY[numberGraf+1].data;

        //CoordinateOfXY.data=null;

        delete CoordinateOfXT.data;

        delete CoordinateOfYT.data;

//Определяем режим дорисовки графика

        if (repaint.selected==true) then numberGraf=numberGraf+1;

        if (repaint.selected==false) then {numberGraf=-1;

                                           delete CoordinatesOfXY[numberGraf+1].data;

                                           for (i in [0..9 step 1])

                                            delete CoordinatesOfXY[i].data;

                                          }

       for (i in [0..numSteps-1 step 1]) {

       insert LineChart.Data {

           xValue: coordinat.X[i]

           yValue: coordinat.Y[i]

                             } into CoordinatesOfXY[numberGraf+1].data;

       insert LineChart.Data {

           xValue: coordinat.T[i]

           yValue: coordinat.X[i]

                             } into CoordinateOfXT.data;

        insert LineChart.Data {

           xValue: coordinat.T[i]

           yValue: coordinat.Y[i]

                             } into CoordinateOfYT.data;

        }

       

}

}

var valX0=bind RoundToThree(scrollX0.value);

var valY0=bind RoundToThree(scrollY0.value);

var vala1=bind RoundToThree(scrolla1.value);

var vala2=bind RoundToThree(scrolla2.value);

var valb1=bind RoundToThree(scrollb1.value);

var valb2=bind RoundToThree(scrollb2.value);

var valg1=bind RoundToThree(scrollg1.value);

var valg2=bind RoundToThree(scrollg2.value);

function RoundToThree(a: Number):  Number{

    var h;

    h=a*1000;

    h=Math.round(h);

    h=h/1000;

   return h;

   }

Stage {

   title: "Модель межвидовой конкуренции"

   resizable: false

   scene: Scene {

       width: 800

       height: 600

       content: [

       Flow { layoutInfo: LayoutInfo { width: 800 height: 600}

content: [

      grafikXY,

       Flow {content: [

               Flow { layoutInfo: LayoutInfo { width: 310}  hgap: 20 vgap: 10 width: 400

         content: [ modelNAME,Flow{ content:[ Imagesystem]translateX: 45},

                          labelX0,textX0,labelY0,textY0,

                          scrollX0,scrollY0,

                          labela1,texta1,labela2,texta2,

                          scrolla1,scrolla2,

                          labelb1,textb1,labelb2,textb2,

                          scrollb1,scrollb2,

                          labelg1,textg1,labelg2,textg2,

                          scrollg1,scrollg2,

                          buttonpaint,repaint

                 ] translateY: 10 }

           ]translateX: 45},

      grafikXYT

      

           ]

}//Tile

       ]

   }

}


 

А также другие работы, которые могут Вас заинтересовать

3994. Совершенствование деятельности органов местного самоуправления по реализации молодежной политики 224.65 KB
  Актуальность темы исследования заключается в том, что молодежь является движущей силой общества, так как её вклад в социально- экономическое развитие страны обеспечивает благосостояние общества. Молодежь необходимо оценивать как часть общес...
3995. Статистические методы обработки опытных данных. Числовые характеристики выборки 225.31 KB
  Лабораторная работа № 5 СТАТИСТИЧЕСКИЕ МЕТОДЫ ОБРАБОТКИ ОПЫТНЫХ ДАННЫХ. ЧИСЛОВЫЕ ХАРАКТЕРИСТИКИ ВЫБОРКИ Цель: Научиться основным методам обработки данных, представленных выборкой. Изучить графические представления данных. Овладеть навыками расчета с...
3996. Класифікація компютерних злочинів 222.3 KB
  Закордонними фахівцями розроблені різні класифікації способів здійснення комп'ютерних злочинів. Нижче приведені назви способів здійснення подібних злочинів, що відповідають кодифікаторові Генерального Секретаріату Інтерполу. У 1991 році даний кодифікатор був інтегрований в автоматизовану систему пошуку і в даний час доступний НЦБ більш ніж 100 країн.
3997. Аналіз ефективності інвестиційних проектів засобами ПК 221.95 KB
  АНАЛІЗ ЕФЕКТИВНОСТІ ІНВЕСТИЦІЙНИХ ПРОЕКТІВ ЗАСОБАМИ КОМП’ЮТЕРНИХ ТЕХНОЛОГІЙ Теоретична довідка. Основна задача аналізу ефективності інвестиційного проекту полягає у визначенні цінності проекту з погляду зіставлення вигод і витрат проекту, вираж...
3998. Програмування та настроювання малоканального програмованого логічного контролера МІК-51 підприємства Мікрол 228.81 KB
  Робота 2. Програмування та настроювання малоканального програмованого логічного контролера МІК51 підприємства «Мікрол». Мета роботи Вивчення основних можливостей програмного пакета «Редактор FBD-програм АЛЬФА», програмна реалізація мовою FBD-блок...
3999. Імітаційне моделювання інвестиційних ризиків засобами ПК 219.7 KB
  Лабораторна робота. ІМІТАЦІЙНЕ МОДЕЛЮВАННЯ ІНВЕСТИЦІЙНИХ РИЗИКІВ ЗАСОБАМИ КОМП’ЮТЕРНИХ ТЕХНОЛОГІЙ Вибір та обґрунтування доцільності реалізації того чи іншого інвестиційного проекту пов’язані з аналізом подій, які відбуватимуться в майбу...
4000. Амортизація. Метод рівномірної амортизації 216.18 KB
  Амортизація. Амортизація – це списання частини вартості активу (як правило основних засобів), яке пов’язане з його використанням у процесі отримання доходу. Списання відбувається поступово по мірі зносу активу, в залежності від строку його...
4001. Изучение пакета NetCracker Pro 205.99 KB
  Лабораторная работа № 1 Изучение пакета NetCracker Pro Цель работы: познакомиться с основными возможностями пакета NetCracker Pro и получить навыки построения компьютерных сетей. Краткое руководство по использованию программы NetCracker Pro. Програм...
4002. Изучение центрального соударения двух тел. Проверка второго закона Ньютона 192.98 KB
  ЛАБОРАТОРНАЯ РАБОТА № 2 Изучение центрального соударения двух тел. Проверка второго закона Ньютона Цель работы 1. Экспериментальная проверка законов упругого и неупругого центрального соударения для системы двух тележек, движущихся с малым трением. ...