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

ЛИЧНЫЙ КАБИНЕТ 

Здравствуйте гость!

 

Логин:

Пароль:

 

Запомнить

 

 

Забыли пароль? Регистрация

 

Повышение оригинальности

Предлагаем нашим посетителям воспользоваться бесплатным программным обеспечением «StudentHelp», которое позволит вам всего за несколько минут, выполнить повышение оригинальности любого файла в формате MS Word. После такого повышения оригинальности, ваша работа легко пройдете проверку в системах антиплагиат вуз, antiplagiat.ru, РУКОНТЕКСТ, etxt.ru. Программа «StudentHelp» работает по уникальной технологии так, что на внешний вид, файл с повышенной оригинальностью не отличается от исходного.

Работа № 101447


Наименование:


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

Информация:

Тип работы: Курсовик. Предмет: Программирование. Добавлен: 2.12.2016. Год: 2015. Страниц: 57. Уникальность по antiplagiat.ru: < 30%

Описание (план):


ВВЕДЕНИЕ 5
1.МАТЕМАТИЧЕСКАЯ ФОРМУЛИРОВКА ЗАДАЧИ 6
2.ОПИСАНИЕ ПРОГРАММЫ 7
2.1 Структурная схема программы 7
2.2 Описание разработанного класса 7
2.3 Описание технологии COM 15
2.4 Описание динамической библиотеки 15
2.5 Основные возможности программы 21
2.6 Средства использования сервисов пакета Microsoft Office 22
3. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ 23
4. МЕТОДИКА ИСПЫТАНИЙ 27
ЗАКЛЮЧЕНИЕ 34
ЛИТЕРАТУРА 35
ПРИЛОЖЕНИЕ 35

ВВЕДЕНИЕ

Для математического моделирования природных процессов чаще используются не трансцендентные, а дифференциальные, в том числе обыкновенные дифференциальные уравнения. Наиболее известные примеры - кинетика химических (биохимических) реакций, динамика биологических популяций, движение космических объектов, задачи экономики природопользования.
Целью данной курсовой работы является разработка программы в среде C# для описания процессов развития динамики популяции. Данные процессы описываются моделью Ферхюльда, представляющей собой дифференциальное уравнение первого порядка. Решение данного уравнения будем искать с помощью метода Эйлера. В ходе курсового проектирования будет проведен обзор теоретических вопросов, разработан алгоритмы решения поставленной задачи.
Для разработки программы была выбрана среда визуального проектирования C#, которая позволяет создавать достаточно мощные приложения, при этом не затрачивая огромное количество усилий и ресурсов, что и обуславливает то, что она до сих пор является крайне популярной.

1. МАТЕМАТИЧЕСКАЯ ФОРМУЛИРОВКА ЗАДАЧИ

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


Рисунок 1.1 - Биологическая популяция N1 и N2.


Пусть при количестве пищи, достаточном для полного удовлетворения рассматриваемых видов, существуют постоянные положительные коэффициенты прироста популяций: d1 = 0,7мес-1 для медведей и d2= 0,9мес-1 для волков. Для каждого вида заданы "коэффициенты прожорливости" - ?1 = 0,7кг-1 и ?2 = 0,5 кг-1, соответствующие потребности в пище для каждой из двух популяций.

Пусть F(N1, N2) - количество пищи, поедаемой обеими популяциями в единицу времени. Оно задается уравнениями (1) и (2), где уравнение (1) соответствует случаю, когда обе популяции активны, а уравнение (2) - когда медведи впадают в спячку:

(1)

(2)

Переключение между режимами (1) и (2) происходит периодически, причем с режима (1) на режим (2) переключение происходит через отрезок времени Time1 = 9мес, а с режима (2) на режим (1) - через Time2 = 3мес. Здесь ?1 и ?2 - некие положительные коэффициенты. Пусть ?1= 0,01кг/(мес?шт), ?2= 0,02кг/(мес?шт).

В начальный момент времени популяции обладают начальной численностью N1= 10шт и N2=20шт.

Тогда развитие популяций описывается следующими уравнениями: для медведей

(3)

для волков:

(4)

Как только численность той или другой популяции становится меньше 1 (умирает последняя особь), засекается отрезок времени Time3 = 3мес (если это медведи) или Time3’ = 5мес (если это волки), по истечении которого вместо прежней популяции поселяется новая популяция с новой начальной численностью N1,если это медведи и N2 если волки.
1.1 Метод Эйлера.
Исторически первым и наиболее простым способом численного решения задачи Коши для ДУ первого порядка является метод Эйлера. В его основе лежит аппроксимация производной отношением конечных приращений зависимой (y) и независимой (x) переменных между узлами равномерной сетки.
Например, даны некоторое дифференциальное уравнение и начальное условие, необходимо найти такую функцию, которая удовлетворяла бы как дифференциальному уравнению, так и начальному условию. Рассмотрим такой численный метод на простых и наглядных примерах. Для этого заменим производную в левой части дифференциального уравнения на близкое ей по величине отношение конечных приращений зависимой и независимой переменной.
Если теперь преобразовать полученное уравнение, то получится итерационная формула, по которой можно вычислить yi+1 , если известно yi в точке хi:
Сравнивая формулу Эйлера с общим выражением, полученным ранее, видно, что для приближённого значения интеграла в методе Эйлера используется простейшая формула интегрирования - формула прямоугольников по левому краю отрезка. Суть метода Эйлера заключается в замене функции y(x) на отрезке интегрирования прямой линией, касательной к графику в точке x=xi. Если искомая функция сильно отличается от линейной на отрезке интегрирования, то погрешность вычисления будет значительной. Ошибка метода Эйлера прямо пропорциональна шагу интегрирования: ошибка ~ h.
Процесс вычислений строится следующим образом: при заданных начальных условиях x0 и y0 можно вычислить
Таким образом строится таблица значений функции y(x) с определенным шагом (h) по x на отрезке [x0, xN]. Ошибка в определении значения y(xi) при этом будет тем меньше, чем меньше выбрана длина шага h (что определяется точностью формулы интегрирования).
При больших h метод Эйлера весьма неточен. Он дает все более точное приближение при уменьшении шага интегрирования. Если отрезок [xi, xi+1] слишком велик, то каждый участок [xi, xi+1] разбивается на N отрезков интегрирования и к каждому их них применяется формула Эйлера с шагом , то есть шаг интегрирования h берется меньше шага сетки, на которой определяется решение.
Если программа не предусматривает автоматического выхода из бесконечного цикла и прекращения вычислений по достижении заданной точности результата, то блок-схема алгоритма решения дифференциальных уравнений методом Эйлера состоит из трёх частей: первая часть соответствует основной программе, в ней вызывается подпрограмма, реализующая алгоритм Эйлера. Эта подпрограмма в свою очередь при каждом обращении к ней вызывает подпрограмму ДУ, в которой вычисляется правая часть дифференциального уравнения.
Если решается тип задач с заданными начальными условиями, то из исходных данных сначала вводится начальное условие, т.е надо указать начальное значение (х) и соответствующее ему начальное значение (у). Кроме того, необходимо ввести значение (х), для которого надо найти значение (у).
Если хотят рассчитать значение (у) не в одной, а в нескольких точках, то необходимо запустить программу соответствующее число раз (с тем же начальным условием). Затем полученные точки вместе с начальным условием можно нанести на диаграммную бумагу и построить график искомой функции.
Правильность решения можно легко проверить, подставив эту функцию в исходное уравнение.

1.2 Улучшенный метод Эйлера
Метод Эйлера для расчёта дифференциальных уравнений имеет небольшую точность расчёта. Как было показано ранее, точность расчёта у него зависит от размера шага линейно, зависимость точности от шага - первой степени. То есть, чтобы увеличить точность в десять раз, надо уменьшить шаг в десять раз. На практике интересуются более совершенными методами. Вопрос стоит так: можно ли увеличить точность на порядок, но при этом сэкономить на количестве вычислений? Да, такие методы есть. Модифицированный метод Эйлера имеет точность второго порядка. В методе Эйлера производная берётся в начале шага и по ней прогнозируется движение системы на конец шага, считая, что во время шага производная неизменна. То есть в течение всего шага производная считается той, какой она была в самом начале шага. Это и есть основной источник неточности.
Улучшение метода состоит в том, что берётся производная не в начале шага, а как промежуточное или среднее на разных участках одного шага. В разных вариантах метода вычисляют несколько производных в разных частях шага и усредняют их. Конечно, в этом случае число вычислений увеличивается, но не в десятки раз ,а вот точность возрастает на порядок, в этом и состоит выигрыш.
Пусть, требуется решить уравнение y = f(x, y, t). Идея уточнённого метода Эйлера состоит в том, что производную вычисляют не в i-ой точке, а между двумя соседними точками: i и i + 1. Данная процедура состоит из следующих шагов:
1.в точке i вычисляют значение производной: f(xi, yi, t);
2.делают пол-шага и вычисляют значение функции на середине отрезка: yi + 1/2 = yi + f(xi, yi, t) • ?t/2;
3.в точке i + 1/2 вычисляют производную: f(xi + 1/2, yi + 1/2, t + ?t/2);
4.делается полный шаг из точки i в точку i + 1 по значению уточненной производной: yi + 1 =yi + f(xi + 1/2, yi + 1/2, t + ?t/2) • ?t;
5.значение t увеличивается: t := t + ?t. Вся процедура повторяется сначала.
На рисунке показано, какой будет ошибка, если шаг делается по значению производной, вычисленной в точке i, как это делается в методе Эйлера. Эта ошибка может быть достаточно велика! (смотри рисунок 2!)




Рисунок 1.2 - Движение реальной и расчетной системы

На рисунке показано, как по значению производной, вычисленной в точке i , делается полшага до точки t + ?t/2 и в этой точке вычисляют новую производную. Касательная в этой точке будет другой.
Далее переносят линию B обратно в точку t. Это соответствует тому, что из точки t снова делается, - но уже полный, - шаг ?t до точки t + ?t по направлению, соответствующему линии C. Линия C параллельна B. То есть значение производной в точке t берется искусственно равным производной в точке t + ?t/2. Ошибка расчета во многих случаях при этом уменьшается. Точность метода Эйлера можно повысить, если воспользоваться для аппроксимации интеграла более точной формулой интегрирования - формулой трапеции.
Данная формула оказывается неявной относительно yi+1 (это значение есть и в левой и правой части выражения), т.е является уравнением относительно yi+1 , решать которое можно, например, численно, применяя какой-либо итерационный метод. Однако, можно поступить иначе и приблизительно вычислить значение функции в узле i+1 с помощью обычной формулы Эйлера , которое затем использовать при вычислении. Таким образом получается улучшенный метод Эйлера (или его ещё называют метод Эйлера с пересчётом).
Благодаря более точной формуле интегрирования, погрешность этого метода пропорциональна уже квадрату шага интегрирования: Ошибка ~ h2.
Правую часть дифференциального уравнения вычисляют исходя из известных уже значений. Метод решения дифференциальных уравнений такого типа работает как при положительных приращениях, так и при отрицательных. С помощью так называемого прогноза можно найти вспомогательную величину yi+1. В качестве прогноза мы принимаем рекуррентную формулу Эйлера. За прогнозом следует коррекция, которая позволяет оценить правую часть дифференциального уравнения между обеими точками. Если применить этот простой метод прогноза и коррекции, то ошибка уменьшается пропорционально h в кубе: Ошибка ~ h3.
Подход, использованный в данном методе, используется для построения так называемых методов прогноза и коррекции.


2 ОПИСАНИЕ ПРОГРАММЫ

2.1 Структурная схема программы

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


Рисунок 2.1 - Структурная связь модулей программы

2.2 Описание разработанного класса

В результате анализа предметной области для её описания и моделирования были разработаны 3 класса: 1 абстрактный класс родитель Animal и 2 класса наследника Bear и Wolf

abstract class Animal
{
public string Name { get; set; }

public double coeffAdding; //коэфициент прироста

public double CoeffAdding //свойство
{
get { return coeffAdding; }
set
{
if (value ‹ 0)
coeffAdding = 0;
else if (value › 1000)
coeffAdding = 1000;
else coeffAdding = value;
}
}

public double coeffVoracity; //коэфициент прожорливости

public double CoeffVoracity //свойст о
{
get { return coeffVoracity; }
set
{
if (value ‹ 0)
coeffVoracity = 0;
else if (value › 1000)
coeffVoracity = 1000;
else coeffVoracity = value;
}
}

public double somefCoeff; //некоторый коэфициент

public double SomeCoeff //свойство
{
get { return somefCoeff; }
set
{
if (value ‹ 0)
somefCoeff = 0;
else if (value › 1000)
somefCoeff = 1000;
else somefCoeff = value;
}
}

public int numberIndividuals; //количество особе

public int NumberIndividuals //с ойство
{
get { return numberIndividuals; }
set
{
if (value ‹ 0)
numberIndividuals = 0;
if (value › 1000)
numberIndividuals = 1000;
else numberIndividuals = value;
}
}

public double GetEatFod() //метод расчёта поедаемой пищи
{
return SomeCoeff * NumberIndividuals;
}

public override string ToString() //переопределённый метод вывода информации
{
return String.Format("Назва ие популяции: {0} \nКоличество особей {1}" +
"\nКоэффициент прироста: {2} \nКоэффициент прожорливости: {3}" +
"\nНекоторый коэффициент : {4} \nПоедаемая пища за единицу времени: {5}",
Name, NumberIndividuals, CoeffAdding, CoeffVoracity, SomeCoeff, GetEatFod());
} }

class Bear: Animal
{
public Bear(double CoeffAdding = 0.7, double CoeffVoracity = 0.7, double SomeCoeff = 0.01, int NumberIndividuals = 10) //конструктор класса
{
Name = "Bear";
this.CoeffAdding = CoeffAdding;
this.CoeffVoracity = CoeffVoracity;
this.SomeCoeff = SomeCoeff;
this.NumberIndividual = NumberIndividuals;
}
}
class Wolf: Animal
{public Wolf(double CoeffAdding = 0.9, double CoeffVoracity = 0.5, double SomeCoeff = 0.02, int NumberIndividuals = 20) //конструктор класса
{Name = "Wolf";
this.CoeffAdding = CoeffAdding;
this.CoeffVoracity = CoeffVoracity;
this.SomeCoeff = SomeCoeff;
this.NumberIndividual = NumberIndividuals;
}
}


2.3 Описание технологии COM

В соответствии с требованиями на разработку данной курсовой работы была также реализована возможность экспорта методов созданного класса с помощью технологии COM. Для этого был создан сервер в виде DLL - программный модуль SCOM.

2.4 Описание динамической библиотеки

В ходе разработки приложения была создана динамическая библиотека, в которой хранятся 2 класса.
using System;
using System.Runtime.Inter pServices;

namespace ComServer
{
// Since the .NET Framework interface and coclass have to behave as
// COM objects, we have to give them guids.
[ComVisible(true)] // This is mandatory.
[ProgId("Bear.ComServ r")]
[ClassInterface(ClassIn erfaceType.None)]
[Guid("1689B8DF-8AD2- A46-A517-5332FA0E524C )]

public class ComServerObjectBear : IComServerObjectBear //класс для Bear
{
public string Name { get; set; }

public double coeffAdding = 0.7; //коэфициент прироста

public double CoeffAdding
{
get { return coeffAdding; }
set
{
if (value ‹ 0)
coeffAdding = 0;
else if (value › 1000)
coeffAdding = 1000;
else coeffAdding = value;
}
}

public double coeffVoracity = 0.7; //коэфициент прожорливости

public double CoeffVoracity
{
get { return coeffVoracity; }
set
{
if (value ‹ 0)
coeffVoracity = 0;
else if (value › 1000)
...


Смотреть работу подробнее




Скачать работу


Скачать работу с онлайн повышением уникальности до 90% по antiplagiat.ru, etxt.ru


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