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

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

 

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

 

Логин:

Пароль:

 

Запомнить

 

 

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

Повышение уникальности

Предлагаем нашим посетителям воспользоваться бесплатным программным обеспечением «StudentHelp», которое позволит вам всего за несколько минут, выполнить повышение уникальности любого файла в формате MS Word. После такого повышения уникальности, ваша работа легко пройдете проверку в системах антиплагиат вуз, antiplagiat.ru, etxt.ru или advego.ru. Программа «StudentHelp» работает по уникальной технологии и при повышении уникальности не вставляет в текст скрытых символов, и даже если препод скопирует текст в блокнот – не увидит ни каких отличий от текста в Word файле.

Результат поиска


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


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

Информация:

Тип работы: курсовая работа. Добавлен: 23.06.2012. Сдан: 2011. Страниц: 17. Уникальность по antiplagiat.ru: < 30%

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


Федеральное агентство по образованию Российской Федерации
___________________________________________________________
Санкт-Петербургский  Государственный Технологический  институт
(Технический  Университет) 
 

Кафедра систем автоматизированного проектирования и управления
Направление подготовки  «Информатика и вычислительная техника» 
 
 
 
 

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

Пояснительная записка к курсовой работе 

Тема  работы:   
 

 Исполнитель
 студентка 885 гр.                    _____________________  Сергеева Е.В.
                         (подпись дата)
Руководитель
                            _____________________  И.В. Ананченко
               (подпись дата) 

              

                             
 
                                                   ______________________
                                (оценка) 
 
 
 
 
 
 
 

Санкт - Петербург
2009 год
Содержание 
 
 
 
 
 
 

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

1 Аналитический обзор

1.1 Определение популяции
       Популяция - это совокупность особей одного вида, находящихся во взаимодействии между собой и совместно заселяющих общую территорию.
       Основные  характеристики популяции: численность, плотность, рождаемость, смертность, темп роста и др. Кроме того, популяции имеют определенную структуру: возрастную (соотношение особей разного возраста), сексуальную (соотношение полов), пространственную (колонии, семьи, стаи и пр.). Так возрастная структура популяции является важной характеристикой влияющей на рождаемость и смертность.
       Соотношение разных возрастных групп в популяции  определяет ее способность к размножению  в данный момент, причем обычно в  быстро растущих популяциях значительную долю составляют молодые особи. Соотношение  молодых особей у промысловых  птиц и пушных зверей к численности всей популяции определяет во время охотничьего сезона размер допустимых квот на отстрел или отлов. Соотношение полов также имеет практическое значение (стада домашних животных, когда без ущерба динамики численности популяции можно изъять определенное количество особей того или иного вида).
       Все живые организмы теоретически способны к очень быстрому увеличению численности. При неограниченных ресурсах и отсутствии гибели от болезней, хищников и т.п. даже при низкой исходной численности популяция любого вида за сравнительно короткий срок может так вырасти, что покроет весь земной шар сплошным слоем. Способность к увеличению численности за данный промежуток времени называют биотическим потенциалом вида. У разных видов биотический потенциал разный: у крупных млекопитающих численность может возрастать в год лишь в 1,05 - 1,1 раза, а у мелких насекомых (рачков, дафний) численность в год может возрасти в 1010-1030раз. А у бактерий и одноклеточных водорослей еще быстрее. Во всех этих случаях, при идеальных условиях численность будет расти в геометрической прогрессии и график изменения численности будет представлять собой экспоненту. Рост численности в геометрической прогрессии называется экспоненциальным ростом. В лабораторных условиях наблюдать экспоненциальный рост можно в популяциях дрожжей, водоросли хлореллы, бактерий на начальных стадиях роста. 
В природе экспоненциальный рост наблюдается при вспышках саранчи, непарного шелкопряда и других насекомых. Экспоненциально может расти численность животных, заселенных в новую местность, где у них мало врагов и много пищи (классический пример - рост численности кроликов, завезенных в Австралию). Во всех этих случаях экспоненциальный рост наблюдается в течение коротких промежутков времени, после чего скорость роста численности снижается.

1.2 Модель Ферхюльста (рождаемость  и смертность с  учетом роста численности) 
       Постановка  задачи.
       Как правило, численность популяции  зависит не только от рождаемости  и смертности, но и от ограниченности пищевых и других ресурсов. Вскоре за созданием модели Мальтуса, бельгийский математик Ферхюльст задался вопросом: будет ли население Бельгии расти неограниченно? Ответом на этот вопрос было создание новой модели динамики численности популяции при ограниченных ресурсах, описываемая следующим уравнением:
       dN/dt=r*N-m*N (1),
где r - удельная скорость роста численности,
N - численность популяции,
m - число встреч членов популяции, при котором они могут конкурировать за какой-либо ресурс.
       Уравнение это отличается от уравнения экспоненциального роста (уравнения Мальтуса) выражением m*N2, которое как раз и отражает ограниченность ресурсов. Перепишем уравнение (1) так:
       dN/dt=N(r-m*N).(2)
       Выражение в скобках - это удельная скорость роста популяции. Причем чем больше численность популяции (N), тем меньше скорость роста. Если в правой части уравнения вынести за скобки выражение r
       dN/dt=N*r(1-N*m/r)
       и обозначить m/r за 1/K, то уравнение (1) можно  переписать так: 
dN/dt=N*r(1-N/K) (3)

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

       
       Рисунок 1 – Модель Ферхюльста
         Величину К называют емкостью среды. Она отражает возможности среды обитания предоставить популяции нужные для ее роста ресурсы.
       Уравнение (3) графически отображается в виде S- образной кривой. Эта кривая называется логистической кривой, а рост численности, соответствующий уравнению (3) - логистическим. Исследуя кривую, можно сказать, что максимальная скорость роста достигается, когда численность равна K/2. В некоторый момент численность стабилизируется и остается постоянной величиной. Популяции, существующие в условиях ограниченных ресурсов, часто хорошо подчиняются правилам логистического роста. Например, когда овцы были завезены в Тасманию, рост их стада описывался логистической кривой. Но правила логистического роста приложимы не ко всем случаям. Например, у размножающихся половым путем видов, при слишком малой численности мала вероятность встреч особей разного пола и размножение может вообще прекратиться. Для реализации модели в среде электронных таблиц уравнение (3) следует представить в дискретном виде:
       N(i+1)=N(i)*r*(1-N(i)/K) (4)
где N(i) - численность популяции в i-й момент времени;
r - удельная скорость роста популяции (рождаемость/смертность); 
К - емкость среды.
 

                  A        B        C        D        E        F
  Коэффициент  
рождаемости 
14,5
Коэффициент 
смертности 
10,2
Начальная  
численность 
147000000
Емкость среды 
К (7350000000)
Удельная скорость роста 
=$A$1/$B$1
        
22
0
=A2+1 
1
=B2+1 
2
=C2+1 
3
=D2+1 ...
33 =c$1 
1000
=A3*$E$1*(1 - A3/$D$1)   Копировать  формулу из B3 ... ... ...
 
       Для этой модели нужно взять побольше временной диапазон ,т.к. она наглядна на длинном промежутке времени.

1.3. Решение дифференциальных уравнений
       При решении научных и инженерно-технических  задач часто бывает необходимо математически  описать какую-либо динамическую систему. Лучше всего это делать в виде дифференциальных уравнений (ДУ) или  системы дифференциальных уравнений. Приведём примеры:
       1.Кинетика  химических реакций. 
       2.Явления  переноса. Наиболее часто такая  задача возникает при решении  проблем, связанных с моделированием  кинетики химических реакций  и различных явлений переноса (тепла, массы, импульса) – теплообмена, перемешивания, сушки, адсорбции, при описании движения макро- и микрочастиц.
       3.Динамика  популяций. Изменения численности  популяций хищников и их жертв  можно описать, например, двумя  несложными  дифференциальными уравнениями,  предполагая, что известна зависимость рождаемости и гибели отдельных видов животных от их количества.
       4.Распространение  «нового». Распространение эпидемий, слухов, опыта и мнений в определённых  условиях также можно описать  дифференциальными уравнениями.  Для эпидемий следует учитывать также различия  между «здоровыми», «инфицированными», «резистентными», и «изолированными» популяциями. Кинетические закономерности для каждой из этих популяций в соответствии с выбранной моделью могут различаться.
       При решении дифференциальных уравнений могут встретиться 3 типа задач:
         1. Дифференциальные уравнения с заданными начальными условиями, т.е необходимо найти такое частное решение дифференциального уравнения, которое удовлетворяет определенным начальными условиям, заданным в одной точке:  
 

       Такого  рода задача встречается при решении  ДУ, которые описывают, например, кинетику химических реакций. В этом случае известны концентрации веществ в начальный  момент времени (t = 0), и необходимо найти концентрации веществ через некоторый промежуток времени (t). В качестве примера можно так же привести задачу о теплопереносе или массопереносе (диффузии), уравнение движения материальной точки под действием сил и т.д.
         2. Краевая задача. (в этом случае известны значение функции или её производных в определённых точках, и необходимо найти  решение между этими точками.) Сами дополнительные условия в этом случае называются краевыми (граничными) условиями. Краевая задача может решаться для ДУ не ниже 2-го порядка. Ниже приведен пример ДУ второго порядка с граничными условиями-заданы значения функции в двух различных точках:   
         

       3. Задачи на собственное значение. Задачи этого типа очень похожи  на краевую задачу. При их решении  необходимо найти, при каких  значениях какого-либо параметра  решение ДУ удовлетворяет граничным условиям (собственные значения) и функции, которые являются решением ДУ при каждом значении параметра (собственные функции). Например, многие задачи квантовой механики являются задачами на собственные значения.
       Рассмотрим  два метода, которые позволяют решать дифференциальные уравнения: метод Эйлера и улучшенный метод Эйлера. 

            1.4 Метод Эйлера.
       Исторически первым и наиболее простым способом численного решения задачи Коши для  ДУ первого порядка является метод  Эйлера.  В его основе лежит аппроксимация производной отношением конечных приращений зависимой (y) и независимой (x) переменных между узлами равномерной сетки.
         Например, даны некоторое дифференциальное уравнение и начальное условие, необходимо найти такую функцию, которая удовлетворяла бы как дифференциальному уравнению, так и начальному условию. Рассмотрим такой численный метод на простых и наглядных примерах. Для этого заменим производную в левой части дифференциального уравнения на близкое ей по величине отношение конечных приращений зависимой и независимой переменной.
                             
Если  теперь преобразовать полученное уравнение, то получится итерационная формула, по которой можно вычислить  yi+1 , если известно y в точке х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.5 Улучшенный метод Эйлера
       Метод Эйлера для расчёта дифференциальных уравнений имеет небольшую точность расчёта. Как было показано ранее, точность расчёта у него зависит от размера шага линейно, зависимость точности от шага – первой степени. То есть, чтобы увеличить точность в десять раз, надо уменьшить шаг в десять раз. На практике интересуются более совершенными методами. Вопрос стоит так: можно ли увеличить точность на порядок, но при этом сэкономить на количестве вычислений? Да, такие методы есть. Модифицированный метод Эйлера имеет точность второго порядка. В методе Эйлера производная берётся в начале шага и по ней прогнозируется движение системы на конец шага, считая, что во время шага производная неизменна. То есть в течение всего шага производная считается той, какой она была в самом начале шага. Это и есть основной источник неточности. 
            Улучшение метода состоит в том, что берётся производная не в начале шага, а как промежуточное или среднее на разных участках одного шага.  В разных вариантах метода вычисляют несколько производных в разных частях шага и усредняют их. Конечно, в этом случае число вычислений увеличивается, но не в десятки раз ,а вот точность возрастает на порядок, в этом и состоит выигрыш. 
      Пусть, требуется решить уравнение  y' f(xyt). Идея уточнённого метода Эйлера состоит в том, что производную вычисляют не в  i-ой точке, а между двумя соседними точками: i и + 1. Данная процедура состоит из следующих шагов:
      1.в  точке i вычисляют значение производной: f(xiyit);
      2.делают  пол-шага и вычисляют значение  функции на середине отрезка: y+ 1/2 yf(xiyit) · ?t/2;
      3.в  точке + 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 - Движение реальной и расчетной системы
        
       На  рисунке показано, как по значению производной, вычисленной в точке 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.
       Подход, использованный в данном методе, используется для построения так называемых методов  прогноза и коррекции.
    Язык  Pascal
       В 1970 г. возник еще один новый элегантный язык, который в последующие годы оказал влияние на программистов во всем мире.
       Язык  назывался Паскаль - в честь французского философа и математика XVII в. Блеза  Паскаля, а его автором был  Никлаус Вирт (Niklaus Wirth).
       Он  начал писать Паскаль в 1968 г., когда Хоару так и не удалось воспрепятствовать утверждению Алгола-68. В то время Вирт был профессором информатики в Федеральном техническом университете в Швейцарии (где в первый раз собирался комитет по Алголу-58) и нуждался в инструменте для обучения студентов навыкам программирования.
       Вирта не удовлетворял не только новый Алгол, но и все «ныне используемые основные языки программирования, свойства и конструкции которых зачастую нельзя объяснить логически и убедительно и которые нередко просто оскорбляют здравый смысл». Еще подростком Вирт страстно увлекался конструированием радиоуправляемых моделей самолетов. Это привело к тому, что в 1963 г. он получил степень бакалавра по электротехнике в Калифорнийском университете. Он подошел к разработке языка, как инженер подошел бы к конструированию машины. «Если смотреть на программирование как на проектирование машины, - писал он, - то необходимость точности становится более очевидной». 
       Новый язык Вирта отражал эту точку  зрения. В отдельном разделе в  начале программы на Паскале программист  должен определить все переменные и  задать явно типы их значений, т. е. указать, будет ли содержимое конкретной переменной рассматриваться, например, как целое число или как строка литер.
       Паскаль также поощряет использование логической структуры, которая делит программу  на небольшие простые подзадачи.
       Вводя такой раздел, Паскаль ограничивает свободу программиста. Но одновременно язык способствует более строгому стилю программирования, который сокращает количество ошибок.
       Структура Паскаля делает программы легко  читаемыми, позволяя даже людям, не писавшим ту или иную программу , обнаруживать и исправлять имеющиеся в ней  ошибки и вносить изменения.
       Благодаря этому Паскаль особенно удобен для  изучения теории и практики программирования, но не для реальных применений. Например, Паскаль, подобно Алголу, не имеет  в самом формальном языке аппарата ввода и вывода. По мнению Вирта, машинно-зависимые действия, такие, как ввод данных с клавиатуры или запись данных во внешнюю память, не соответствуют логике изучения программирования; компиляторы, написанные для реальных компьютеров, должны иметь особые средства реализации таких возможностей.
       Успех Паскаля намного превысил скромные ожидания Вирта. Коллеги по обе стороны  Атлантического океана приняли его  как средство обучения программированию будущих специалистов по информатике.
       Возможно, самое важное состояло в том, что  Паскаль стал путеводной звездой зарождающегося в то время движения за структурное программирование, которое обрело силу в конце 70-х годов. Оно ставило своей целью пересмотр способа разработки программ, и начало ему было положено публикацией в 1972 г. книги «Структурное программирование» англичанина К.А.Р. Хоара, норвежца О.Дж. Дала и выдающегося голландского специалиста по информатике Эдсгера Дейкстры.
       Упор  на логику. Хотя эту фразу разные программисты могут понимать совершенно по-разному, однако по существу она  характеризует систематический математический подход к созданию программного обеспечения, в частности требует разделения программы на небольшие логически увязанные задачи, как это делается в Паскале.
       Одна  из специфических целей структурного программирования - уменьшение использования так называемых безусловных переходов, или операторов GOTO.
       В большинстве основных языков программирования этот оператор используется для передачи управления из одного места программы  в другое, которое может быть расположено  достаточно далеко по тексту. Хотя оператор GOTO и удобен при написании программ, но обычно усложняет их чтение, а значит, увеличивает вероятность пропуска возможной ошибки.
       Хотя Pascal в целом очень удобный и  полезный язык, у него есть свои недостатки, перечень которых приведен ниже.
       1. В определении этого языка  имеется некоторое противоречие  между идеологией самого языка  и его реализацией. Например, конструкция  forward нужна только для того, чтобы  компиляция могла выполняться  в один проход, - это следствие  представлений о том, что таким образом достигается максимальная эффективность компиляции. Но это не всегда верно. Например, компилятор PL/C для языка PL/I совершал три прохода и вместе с тем являлся одним из самых эффективных среди наиболее распространенных компиляторов своего времени . Кроме того, в настоящее время при использовании недорогих быстродействующих компьютеров скорость компиляции не имеет большого значения.
       2. Возможно, самой главной слабостью  языка Pascal является то, что массивы  рассматриваются как отдельные типы, а не как агрегация различных объектов одного типа. Это приводит к тому, что, например, array [1. .10] of Integer и аггау[1. .20] of integer представляют собой/разные типы данных. В результате алгоритмы обработки массивов усложняются, поскольку массивы различных размеров невозможно передать общей подпрограмме (например, подпрограмме перемножения матриц). Строки реализованы как массивы символов, что также затрудняет их обработку в случае строк различной длины.
и т.д.................


Перейти к полному тексту работы


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


Смотреть полный текст работы бесплатно


Смотреть похожие работы


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