- •1. Лекция: История, предмет, цели системного анализа
- •Вопросы для самоконтроля
- •Задачи и упражнения
- •Темы для научных исследований и рефератов, интернет-листов
- •2. Лекция: Описания, базовые структуры и этапы анализа систем
- •Вопросы для самоконтроля
- •Задачи и упражнения
- •Темы для научных исследований и рефератов, интернет-листов
- •3. Лекция: Функционирование и развитие системы
- •Вопросы для самоконтроля
- •Задачи и упражнения
- •Темы для научных исследований и рефератов, интернет-листов
- •4. Лекция: Классификация систем
- •Вопросы для самоконтроля
- •Задачи и упражнения
- •Темы для научных исследований и рефератов, интернет-листов
- •5. Лекция: Система, информация, знания
- •Вопросы для самоконтроля
- •Задачи и упражнения
- •Темы для научных исследований и рефератов, интернет-листов
- •6. Лекция: Меры информации в системе
- •Вопросы для самоконтроля
- •Задачи и упражнения
- •Темы для научных исследований и рефератов, интернет-листов
- •7. Лекция: Система и управление
- •Вопросы для самоконтроля
- •Задачи и упражнения
- •Темы для научных исследований и рефератов, интернет-листов
- •8. Лекция: Информационные системы
- •Вопросы для самоконтроля
- •Задачи и упражнения
- •Темы для научных исследований и рефератов, интернет-листов
- •Вопросы для самоконтроля
- •Задачи и упражнения
- •Темы для научных исследований и рефератов, интернет-листов
- •10. Лекция: Основы моделирования систем
- •Вопросы для самоконтроля
- •Задачи и упражнения
- •Темы научных исследований и рефератов, интернет-листов
- •11. Лекция: Математическое и компьютерное моделирование
- •Этап 4. Проведение вычислительных экспериментов
- •Этап 5. Модификация (развитие) модели
- •Вопросы для самоконтроля
- •Задачи и упражнения
- •Темы научных исследований и рефератов, интернет-листов
- •12. Лекция: Эволюционное моделирование и генетические алгоритмы
- •13. Лекция: Основы принятия решений и ситуационного моделирования
- •Вопросы для самоконтроля
- •Задачи и упражнения
- •Темы научных исследований и рефератов, интернет-листов
- •14. Лекция: Модели знаний
- •Вопросы для самоконтроля
- •Задачи и упражнения
- •Темы для научных исследований и выступлений (рефератов)
- •15. Лекция: Новые технологии проектирования и анализа систем
Темы научных исследований и рефератов, интернет-листов
-
Моделирование как метод, методология, технология.
-
Модели в микромире и макромире.
-
Линейность моделей (наших знаний) и нелинейность явлений природы и общества.
11. Лекция: Математическое и компьютерное моделирование
Математическая модель описывается (представляется) математическими структурами, математическим аппаратом (числа, буквы, геометрические образы, отношения, алгебраические структуры и т.д.).
У математических моделей есть и дидактические аспекты - развитие модельного и математического стиля мышления, позволяющего вникать в структуру и внутреннюю логику моделируемой системы.
Отметим основные операции (процедуры) математического моделирования.
1.
Линеаризация. Пусть дана математическая
модель М=М(X,
Y, A), где X
- множество входов, Y
- множество выходов, А
- множество состояний системы. Схематически
можно это изобразить так: X
A
Y.
Если X,
Y,
A
- линейные пространства (множества), а
:
X
A,
:
A
Y
- линейные операторы (т.е. любые линейные
комбинации ax+by
аргументов
и
преобразуют
в соответствующие линейные комбинации
a
(x)+b
i;(y)
и a
(x)+b
(y)),
то система (модель) называется линейной.
Все другие системы (модели) - нелинейные.
Они труднее поддаются исследованию,
хотя и более актуальны. Нелинейные
модели менее изучены, поэтому их часто
линеаризуют - сводят к линейным моделям
каким-то образом, какой-то корректной
линеаризующей процедурой.
Пример.
Применим операцию линеаризации к
модели (какой физической системы,
явления?) у=at2/2,
0
t
4,
которая является нелинейной (квадратичной).
Для этого заменим один из множителей t
на его среднее значение для рассматриваемого
промежутка, т.е. на t=2.
Такая (пусть простят меня знакомые с
линеаризацией читатели, - хоть и
очень наглядная, но очень грубая!)
процедура линеаризации дает уже
линейную модель вида y=2at.
Более точную линеаризацию можно
провести следующим образом: заменим
множитель t
не на среднее, а на значение в некоторой
точке (это точка - неизвестная!); тогда,
как следует из теоремы о среднем из
курса высшей математики, такая замена
будет достаточно точна, но при этом
необходимо оценить значение неизвестной
точки. На практике используются достаточно
точные и тонкие процедуры линеаризации.
2. Идентификация. Пусть М=М(X, Y, A), A={ai}, ai=(ai1, ai2, ..., aik) - вектор состояния объекта (системы). Если вектор ai зависит от некоторых неизвестных параметров, то задача идентификации (модели, параметров модели) состоит в определении по некоторым дополнительным условиям, например, экспериментальным данным, характеризующим состояние, системы в некоторых случаях. Идентификация - задача построения по результатам наблюдений математических моделей некоторого типа, адекватно описывающих поведение системы. Если S={s1, s2, ..., sn} - некоторая последовательность сообщений, получаемых от источника информации о системе, М={m1, m2, ..., mz} - последовательность моделей, описывающих S, среди которых, возможно, содержится оптимальная (в каком-то смысле) модель, то идентификация модели М означает, что последовательность S позволяет различать (по рассматриваемому критерию адекватности) две разные модели в М. Последовательность сообщений (данных) S назовем информативной, если она позволяет различать разные модели в М. Цель идентификации - построение надежной, адекватной, эффективно функционирующей гибкой модели на основе минимального объема информативной последовательности сообщений. Наиболее часто используемые методы идентификации систем (параметров систем): метод наименьших квадратов, метод максимального правдоподобия, метод байесовских оценок, метод марковских цепных оценок, метод эвристик, экспертное оценивание и другие.
Пример. Применим операцию идентификации параметра a в модели предыдущего примера. Для этого необходимо задать дополнительно значение y для некоторого t, например, y=6 при t=3. Тогда из модели получаем: 6=9a/2, a=12/9=4/3. Идентифицированный параметр а определяет следующую модель y=2t2/3. Методы идентификации моделей могут быть несоизмеримо сложнее, чем приведенный прием.
3. Оценка адекватности (точности) модели.
Пример.
Оценим адекватность (точность)
модели у=at2/2,
0
t
4,
полученной в результате линеаризации
выше. В качестве меры (критерия)
адекватности рассмотрим привычную меру
- абсолютное значение разности между
точным (если оно известно) значением и
значением, полученным по модели (почему
берется по модулю?). Отклонение точной
модели от линеаризованной будет в рамках
этого критерия равно |at2/2-2at|,
0
t
4.
Если a>0,
то, как несложно оценить с помощью
производной, эта погрешность будет
экстремальна при t=2a.
Например, если a=1,
то эта величина не превосходит 2. Это
достаточно большое отклонение, и можно
заключить, что наша линеаризованная
модель в данном случае не является
адекватной (как исходной системе, так
и нелинеаризованной модели).
4. Оценка чувствительности модели (чувствительности к изменениям входных параметров).
Пример.
Из предыдущего примера следует, что
чувствительность модели у=at2/2,
0
t
4
такова, что изменение входного параметра
t
на 1% приводит к изменению выходного
параметра y на более, чем 2%, т.е. эта модель
является чувствительной.
5. Вычислительный эксперимент по модели. Это эксперимент, осуществляемый с помощью модели на ЭВМ с целью определения, прогноза тех или иных состояний системы, реакции на те или иные входные сигналы. Прибором эксперимента здесь является компьютер (и модель!). Это процедура часто отождествляется с компьютерным моделированием.
Отметим основные причины, несколько тормозящие выход математического моделирования на новые информационные технологии:
-
традиционное описание модели системами математических уравнений, соотношений; в то же время, большинство плохо структурированных и плохо формализуемых систем описываются с помощью экспертных данных, эвристических и имитационных процедур, интегрированных пакетов программ, графических образов и т.д.;
-
существующие средства описания и представление моделей на ЭВМ не учитывают специфику моделирования, нет единого представления моделей, генерации новых моделей по банку моделей;
-
недооценка возможностей компьютера, который может делать больше, чем простая реализация алгоритма, как правило, структурируемого и/или реализуемого хорошо, отсутствие доступа к опыту моделирования на ЭВМ.
В базовой пятерке: "система (исследуемая среда) - модель (описание среды) - алгоритм (программа) - компьютер (компьютерная технология) - пользователь (выработка решения)" при компьютерном моделировании главную роль играют уже алгоритм (программа), компьютер и технология, точнее, инструментальные системы для компьютера, компьютерные технологии.
Пример. При имитационном моделировании (при отсутствии строгого и формально записанного алгоритма) главную роль играют технология и средства моделирования; аналогичная ситуация наблюдается в когнитивной графике.
Модель не эквивалентна программе, а моделирование не сводится к программированию.
Специфические операции математического моделирования, например, идентификация, линеаризация не сводятся в ЭВМ к преобразованию в ней программ. Расширяется и область применения компьютера и компьютерных моделей.
Основные функции компьютера при моделировании систем:
-
исполнение роли вспомогательного средства для решения задач, доступных и для обычных вычислительных средств, алгоритмам, технологиям;
-
исполнение роли средства постановки и решения новых задач, не решаемых традиционными средствами, алгоритмами, технологиями;
-
исполнение роли средства конструирования компьютерных обучающих и моделирующих сред типа: "обучаемый - компьютер - обучающий", "обучающий - компьютер - обучаемый", "обучающий - компьютер - группа обучаемых", "группа обучаемых - компьютер - обучающий", "компьютер - обучаемый - компьютер";
-
исполнение роли средства моделирования для получения новых знаний;
-
исполнение роли "обучения" новых моделей (самообучение модели).
Компьютерное моделирование - основа представления знаний в ЭВМ (построения различных баз знаний). Компьютерное моделирование для рождения новой информации использует любую информацию, которую можно актуализировать с помощью ЭВМ. Прогресс моделирования связан с разработкой систем компьютерного моделирования, которые поддерживает весь жизненный цикл модели, а прогресс в информационной технологии - с актуализацией опыта моделирования на компьютере, с созданием банков моделей, методов и программных систем, позволяющих собирать новые модели из моделей банка. Автономные подмодели модели обмениваются информацией друг с другом через единую информационную шину - банк моделей, через базу знаний по компьютерному моделированию. Особенность компьютерных систем моделирования - их высокая интеграция и интерактивность. Часто эти компьютерные среды функционируют в режиме реального времени.
Вычислительный эксперимент - разновидность компьютерного моделирования.
Можно говорить сейчас и о специальных пакетах прикладных программ, текстовых, графических и табличных процессоров, визуальных и когнитивных средах (особенно, работающих в режиме реального времени), позволяющих осуществлять компьютерное моделирование.
Компьютерное моделирование и вычислительный эксперимент становятся новым инструментом, методом научного познания, новой технологией из-за возрастающей необходимости перехода от исследования линейных математических моделей систем (для которых достаточно хорошо известны или разработаны методы исследования, теория) к исследованию сложных и нелинейных математических моделей систем (анализ которых гораздо сложнее); грубо, но образно, говоря: "наши знания об окружающем мире - линейны и детерминированы, а процессы в окружающем мире - нелинейны и стохастичны".
Информация (абстракция), реализуясь сообщениями реального мира, овеществляется в разных предметных процессах, а реализация на компьютере вызывает необходимость использования в компьютерах специальных формализованных описаний, представлений этих процессов.
Компьютерное моделирование, от постановки задачи до получения результатов, проходит следующие этапы компьютерного моделирования.
-
Постановка задачи.
-
Формулировка задачи.
-
Определение цели и приоритетов моделирования.
-
Сбор информации о системе, объекте моделирования.
-
Описание данных (их структуры, диапазона, источника и т.д.).
-
-
Предмодельный анализ.
-
Анализ существующих аналогов и подсистем.
-
Анализ технических средств моделирования (ЭВМ, периферия).
-
Анализ программного обеспечения (языки программирования, пакеты прикладных программ, инструментальные среды).
-
Анализ математического обеспечения (модели, методы, алгоритмы).
-
-
Анализ задачи (модели).
-
Разработка структур данных.
-
Разработка входных и выходных спецификаций, форм представления данных.
-
Проектирование структуры и состава модели (подмоделей).
-
-
Исследование модели.
-
Выбор методов исследования подмоделей.
-
Выбор, адаптация или разработка алгоритмов, их псевдокодов.
-
Сборка модели в целом из подмоделей.
-
Идентификация модели, если в этом есть необходимость.
-
Формулировка используемых критериев адекватности, устойчивости и чувствительности модели.
-
-
Программирование (проектирование программы).
-
Выбор метода тестирования и тестов (контрольных примеров).
-
Кодирование на языке программирования (написание команд).
-
Комментирование программы.
-
-
Тестирование и отладка.
-
Синтаксическая отладка.
-
Семантическая отладка (отладка логической структуры).
-
Тестовые расчеты, анализ результатов тестирования.
-
Оптимизация программы.
-
-
Оценка моделирования.
-
Оценка средств моделирования.
-
Оценка адекватности моделирования.
-
Оценка чувствительности модели.
-
Оценка устойчивости модели.
-
-
Документирование.
-
Описание задачи, целей.
-
Описание модели, метода, алгоритма.
-
Описание среды реализации.
-
Описание возможностей и ограничений.
-
Описание входных и выходных форматов, спецификаций.
-
Описание тестирования.
-
Создание инструкций для пользователя.
-
-
Сопровождение.
-
Анализ применения, периодичности использования, количества пользователей, типа использования (диалоговый, автономный и др.), анализ отказов во время использования модели.
-
Обслуживание модели, алгоритма, программы и их эксплуатация.
-
Расширение возможностей: включение новых функций или изменение режимов моделирования, в том числе и под модифицированную среду.
-
Нахождение, исправление скрытых ошибок в программе, если таковые найдутся.
-
-
Использование модели.
Пример. Математическое и компьютерное моделирование подробно, поэтапно, мы рассмотрим на примере следующей простой модели производства. Итак, возьмем укрупненные этапы моделирования производства.
|
Этап 1. Содержательная постановка задачи Современное производство характерно тем, что часть производимой продукции (в стоимостном выражении) возвращается в виде инвестиций (т.е. части конечной продукции, используемой для создания основных фондов производства) в производство. При этом время возврата, ввода в оборот новых фондов может быть различным для различного рода производства. Необходимо промоделировать эту ситуацию и выявить динамику изменения величины основных фондов производства (капитала). Сложность и многообразие, слабая структурированность и плохая формализуемость основных экономических механизмов, определяющих работу предприятий, не позволяют преобразовать процедуры принятия решений в экономической системе в полностью эффективные математические модели и алгоритмы прогнозирования. Поэтому целесообразно использование простых, но гибких и надежных процедур принятия решения. Рассмотрим одну такую простую модель социально-экономического процесса. Этап 2. Формулировка гипотез, построение, исследование модели Динамика изменения величины капитала определяется в нашей модели, в основном, простыми процессами производства и описывается так называемыми обобщенными коэффициентами амортизации (расхода фондов) и потока инвестиций (часть конечного продукта, используемого в единицу времени для создания основных фондов). Эти коэффициенты - относительные величины (оцениваются за единицу времени). Необходимо разработать и исследовать модель динамики основных фондов. Считаем при этом допустимость определенных гипотез, определяющих систему производства. Пусть
x(t)
- величина основных фондов (капитала)
в момент времени t,
где 0 Примем следующие гипотезы:
Считая
Δt x´(t) = y(t) - mx(t), x(0)=х0, где х(0) - начальное значение капитала в момент времени t=0. Эта простейшая модель не отражает важного факта: социально-экономические ресурсы производства таковы, что между выделением инвестиций и их введением и использованием в выпуске новой продукции проходит время (лаг). Учитывая это, можно записать модель в виде x´(t) = y(t-T)-mx(t), x(0)=х0 Этой непрерывной, дифференциальной, динамической модели можно поставить в соответствие простую дискретную модель: хi+1=хi +yj - mхi , x0=с, i=0, 1, 2, :, n, 0<j<n, где n - предельное значение момента времени при моделировании. Дискретная модель следует из непрерывной при Δt=1, при замене производной x´(t) на относительное приращение (из определения производной, это справедливо при малых значениях Δt). Этап 3. Построение алгоритма и программы моделирования Возьмем для простоты режим моделирования, когда m, c - известны и постоянны, y - увеличивается на каждый следующий момент времени на 1%, а также рассмотрим наиболее простой алгоритм моделирования в укрупненных шагах.
Алгоритм, записанный на учебном алгоритмическом языке, имеет вид алг Производство (арг вещ m, c, n, рез вещ таб х[1:366], лит p, q); дано | производство с основными фондами, изменяющимися по закону: | х[i+1]=х[i]+y-mx[i], x[0]=c, i=0, 1, 2, :, n, 0<j<n, | t=i*h, h=1 - шаг по времени (день), | i - текущий момент времени, | m - коэффициент амортизации, | х[0]=с - заданная начальная величина капитала, | y - увеличиваемая на 1% каждый раз величина инвестиций надо | промоделировать динамику основных фондов, т.е. выяснить: | 1) чему они равны на момент времени n; | 2) наступает ли гибель предприятия, т.е. обращается ли капитал | (основные фонды) в нуль при некотором t, и найти это t; | 3) наступает ли ситуация, когда капитал стабилизируется нач | начало тела алгоритма | описание типов переменных цел i, | i - переменная цикла прогноза (текущее время) j, | j - задаваемая величина лага k, | k - момент гибели предприятия (если есть) y | y - величина инвестиций, увеличиваемая по закону y:=1.01*y ввод (m, n, c, y) | ввод исходных данных p:='предприятие не гибнет' | задаем начальное значение s q:='капитал не стационарен' | задаем начальное значение q х[0]:=с | начальное значение капитала (не нулевое) i:=0 | задаем начальный момент времени моделирования нц пoка (i<=n) и (х[i]>0) | заголовок цикла прогноза капитала | тело цикла прогноза капитала х[i+1]=х[i]+y-mx[i] | вычисление прибыли в следующий момент y:=1.01*y | и увеличиваем на 1% - для следующего момента если х[i+1]<=0 | проверка гибели то | если гибнет, - выполняется блок погибшего предприятия p:="предприятие гибнет" | заменяем значение s k:=i-1 | и фиксируем время гибели нц для j от k до n | цикла вычисления всех x[j]=0 | остальных, нулевых значений прибыли кц | конец блок обработки погибшего предприятия если х[i+1]=х[i] | проверка стационарности прибыли то q:="капитал стационарен" | заменяем старое значение q кц кон. Пример 11.1. (html, txt) Приведем программу на Паскале для имитационного моделирования (программа реализована для функции типа y=at+b, где a, b - коэффициенты потока инвестиций; структурированность и интерфейс программы "принесены в жертву" компактности, простоте и понятности программы). PROGRAM MODFOND; {Исходные данные находятся в файле in.dat текущего каталога} {Результаты записываются в файл out.dat текущего каталога} Uses Crt, Graph, Textwin; Type Vector = Array[0..2000] of Real; Mas = Array[0..2000] of LongInt; Var Time, Lag, t, dv, mv, i, yi, p :Integer; tmax, tmin :LongInt; a, b, m, X0, maxx, minx, aa, bb, cc, sx, tk :Real; x :Vector; ax, ay :Mas; ch :Char; f1, f2 :Text; {-------------------------------------------------------------------------------------------} Procedure InputKeyboard; { Ввод с клавиатуры } Begin OpenWindow(10,5,70,20,' Ввод данных ',14,4); ClrScr; WriteLn; WriteLn('Введите время Т прогнозирования системы:'); Repeat Writeln('Для удобства построения графика введите Т не меньше 2'); Write('Т='); ReadLn(Time); until Time>=2; WriteLn('Введите лаг:'); Repeat Write('Лаг должен быть строго меньше Т - '); ReadLn(Lag); until Lag<Time; WriteLn('Введите коэффициенты для вычисления потока инвестиций'); Write('Введите a>0: a= '); ReadLn(a); Write('Введите b>0: b= '); ReadLn(b); Repeat Write('Введите коэффициент амортизации ( 0<M<1 ) - '); Readln(m); until (m<1) and (m>0); Write('Введите значение фондов в начальный момент - '); Readln(X0); CloseWindow; end; {-------------------------------------------------------------------------------------------} Procedure InputFile; { Ввод из файла } Begin Assign(f1,'in.dat'); Reset(f1); Readln(f1,time,lag,a,b,m,X0); Close(f1); End; {-------------------------------------------------------------------------------------------} Procedure OutputFile; { Запись результата работы в файл } Begin Assign(f2,'out.dat'); Rewrite(f2); WriteLn(f2,' Результаты моделирования:'); WriteLn(f2,'Значение фондов в заданное время Т = ',x[time]:4:2); WriteLn(f2,'Максимальное значение фондов = ',maxx:4:2); Write(f2,'Минимальное значение фондов = ',minx:4:2); Close(f2); End; {------------------------------------------------------------------------------------------} Procedure InputRnd; { Ввод случайными числами } Begin Randomize; Repeat Time:=Random(90); until Time>=2; Repeat Lag:=Random(80); until Lag<Time; a:=Random(10); b:=Random(10); m:=Random; X0:=Random(200); End; {------------------------------------------------------------------------------------------} Procedure OutputScreen; { Вывод данных на экран } Begin OpenWindow(10,5,70,20,' Вывод данных: ',4,3); WriteLn; WriteLn(' Данный набор входных параметров:'); WriteLn; WriteLn(' Время Т - ',time); WriteLn(' Лаг - ',lag); WriteLn; WriteLn('Коэффициенты потока инвестиций:'); WriteLn; WriteLn(' a - ',a:4:2); WriteLn(' b - ',b:4:2); WriteLn; WriteLn('Эмпирический коэффициент амортизации - ',m:4:3); Write('Состояние фондов в начальный момент - ',X0:4:2); ReadKey; CloseWindow; End; {-------------------------------------------------------------------------------------------} Procedure Worker; { Рабочая процедура } Var yt :real; Begin x[0]:=X0; For t:=1 to Time do Begin If t<Lag+1 then yt:=0 else yt:=a*(t-1-Lag)+b; x[t]:=yt+(1-m)*x[t-1]; End; maxx:=x[0]; minx:=x[0]; tmin:=0; tmax:=0; For t:=1 to Time do If x[t]>maxx then begin maxx:=x[t]; tmax:=t; end else if x[t]<minx then begin minx:=x[t]; tmin:=t; end; OpenWindow(10,5,70,13,' Результат работы модели: ',14,7); ClrScr; WriteLn; WriteLn('Значение фондов в заданное время Т = ',x[time]:4:2); If tmin<>0 then WriteLn(' Величина фондов возрастает с ',tmin,' до ',tmax); WriteLn(' Максимальное значение фондов = ',maxx:4:2); Write(' Минимальное значение фондов = ',minx:4:2); ReadKey; CloseWindow; End; {---------------------------------------------------------------------------------------------} Procedure Mas_OX; { Масштабирование по оси ОХ } Var st :String; Begin p:=1; While Time>p*24 do inc(p); For i:=1 to 24 do Begin Str(p*i,st); OutTextXY(65+20*i,420,st) End; For t:=0 to Time do ax[t]:=70+round(20*t/p); End; {-------------------------------------------------------------------------------------------} Procedure Mas_OY; { Масштабирование по оси ОУ } Var st :String; k, r :Integer; Begin If maxx>16 then Begin k:=1; While maxx>k*16 do inc(k); For i:=1 to 16 do Begin Str(k*i,st);OutTextXY(35,407-20*i,st);End; tk:=k; End else Begin r:=1; While (maxx<=16/r) and (r<16) do inc®; dec®; For i:=1 to (trunc(16/r-0.1)+1) do Begin Str(i,st); OutTextXY(35,407-0*r*i,st) End; tk:=1/r; End; For t:=0 to Time do ay[t]:=410-round(20*x[t]/tk); End; {----------------------------------------------------------------------------------------------} Procedure Ipol(x1,y1,x2,y2,x3,y3:Real); {Процедура интерполяции} Var d1, da, db, dc :Real; Begin d1:=x1*x1*(x2-x3)+x2*x2*(x3-x1)+x3*x3*(x1-x2); da:=y1*(x2-x3)+y2*(x3-x1)+y3*(x1-x2); db:=x1*x1*(y2-y3)+x2*x2*(y3-y1)+x3*x3*(y1-y2); dc:=x1*x1*(x2*y3-y2*x3)+x2*x2*(x3*y1-y3*x1)+x3*x3*(x1*y2-y1*x2); aa:=da/d1; bb:=db/d1; cc:=dc/d1; End; {--------------------------------------------------------------------------------------------} Procedure Graf; { Построение графика } Begin dv:=detect; InitGraph(dv,mv,''); SetBkColor(7); SetColor(6); Rectangle(30,40,600,450); Line(600,60,620,60); Line(620,60,620,470); Line(50,450,50,470); Line(50,470,620,470); SetFillStyle(1,1); FloodFill(610,450,6); SetFillStyle(1,15); FloodFill(100,100,6); SetColor(5); Circle(70,410,2); Line(70,410,70,50); Line(70,410,590,410); { оси ОХ и ОУ } OutTextXY(587,407,'>'); OutTextXY(67,47,'^'); OutTextXY(57,415,'0'); OutTextXY(80,45,'X(T) - (Величина основных фондов производства)'); OutTextXY(590,415,'T'); OutTextXY(540,430,'(Время)'); SetColor(2); For i:=1 to 16 do Line(67,70+20*i,70,70+20*i); For i:=1 to 24 do Line(70+20*i,410,70+20*i,413); Mas_OX; Mas_OY; For t:=0 to time do Вegin SetColor(Blue); Circle(ax[t],ay[t],2); SetFillStyle(SolidFill,Red); FloodFill(ax[t],ay[t],Blue); End; SetColor(Red); SetLineStyle(3,1,1); Line(70,ay[time],ax[time],ay[time]); Line(ax[time],ay[time],ax[time],410); Ipol(0,x[0],1,x[1],2,x[2]); For i:=ax[0] to ax[2] do Begin sx:=p*(i-70)/20; yi:=410-round(20*(aa*sx*sx+bb*sx+cc)/tk); SetColor(Red); Circle(i,yi,1); End; For t:=1 to Time-2 do Begin Ipol(t,x[t],t+1,x[t+1],t+2,x[t+2]); For i:=ax[t+1] to ax[t+2]do Begin sx:=p*(i-70)/20; yi:=410-round(20*(aa*sx*sx+bb*sx+cc)/tk); SetColor(Red); Circle(i,yi,1); End; End; ReadKey; CloseGraph; End; {-------------------------------------------------------------------------------------------} Begin While true do Begin ClrScr; TextBackGround(2); Window(1,1,80,25); ClrScr; OpenWindow(30,22,50,24,' Нажмите клавишу: ',4,1); OpenWindow(5,5,75,16,' Динамика фондов производства ',14,5); ClrScr; WriteLn; WriteLn(' Пусть х(t) - основные фонды в момент времени t, y(t) -'); WriteLn(' инвестиции, m - коэффициент амортизации фондов.'); WriteLn(' Модель динамики основных фондов (L - лаг):'); Write(' x`(t) = y(t-L) - mx(t), где х(0) = Хо, y(t)=at+b, ( a,b>0 ).'); ReadKey; CloseWindow; OpenWindow(15,10,65,17,' Выбирите вариант входа-выхода: ',15,0); ClrScr; WriteLn; WriteLn(' С клавиатуры - <1>'); WriteLn(' Из файла - <2>'); WriteLn(' Случайными числами - <3>'); WriteLn(' Выход - <Esc>'); ch:=ReadKey; Сase ch of #49: InputKeyboard; #50: Вegin InputFile; OutputScreen; Еnd; #51: Вegin InputRnd; OutputScreen; End; #27: Halt(1); End; CloseWindow; Worker; OutputFile; OpenWindow(22,10,58,14,'',15,5); ClrScr; WriteLn; Write('Для просмотра графика нажмите ввод'); ch:=ReadKey; If ch=#13 then begin Graf; RestoreCrtMode; end; CloseWindow; TextBackGround(15); Window(1,1,80,25); ClrScr; OpenWindow(15,10,65,16,'',15,6); ClrScr; WriteLn; WriteLn(' Хотите еще моделировать ?'); WriteLn; WriteLn('Для выхода нажмите - < Esc >'); WriteLn('Для продолжения нажмите любую другую клавишу'); ch:=ReadKey; If ch=#27 then Halt(1); CloseWindow; End; ClrScr; TextBackGround(0); End. Пример 11.2. (html, txt)
|
|
|
|
|
