На головну

Етап 3. Побудова алгоритму і програми моделювання

  1.  III. Дослідження функцій та побудова графіків
  2.  V. Дослідження функцій і побудова їх графіків
  3.  VIII. Побудова табличного звіту
  4.  А. Побудова ізокости
  5.  А. Прогнозування за допомогою програми EXCEL по рівняннях трендів
  6.  автоматизованого моделювання
  7.  автоматизованого моделювання

Візьмемо для простоти режим моделювання, коли m, c - відомі і постійні, y - збільшується на кожен наступний момент часу на 1%, а також розглянемо найбільш простий алгоритм моделювання в укрупнених кроках.

  1. Введення вхідних даних для моделювання: з = х (0) - початковий капітал; n - кінцевий час моделювання; m - коефіцієнт амортизації; s - одиниця виміру часу; y - інвестиції.
  2. обчислення xi від i = 1 до i = n по рекуррентной формулою, наведеною вище.
  3. Пошук стаціонарного стану - такого моменту часу j, 0 j  n, починаючи з якого все хj, хj +1,:, Хn постійні або змінюються на малу допустиму величину ?> 0.
  4. Видача результатів моделювання і, за бажанням користувача, графіка.

Алгоритм, записаний на навчальному алгоритмічній мові, має вигляд

алг Виробництво (арг вещ m, c, n, рез вещ таб х [1: 366], літ p, q); дано | виробництво з основними фондами, що змінюються за законом: | х [i + 1] = х [i] + y-mx [i], x [0] = c, i = 0, 1, 2,:, n, 0 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 кцкон.

Наведемо програму на Паскалі для імітаційного моделювання (програма реалізована для функції типу 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 0: a ='); ReadLn (a); Write ( 'Введіть b> 0: b ='); ReadLn (b); Repeat Write ( 'Введіть коефіцієнт амортизації (0 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 maxx then begin maxx: = x [t]; tmax: = t; end else if x [t] '); 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;{-------------------------------------------------------------------------------------------}BeginWhile 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 ( 'Вихід - '); 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 ( 'Для перегляду графіка натисніть Enter'); 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 ( 'Для виходу натисніть - '); WriteLn ( 'Для продовження натисніть будь-яку іншу клавішу'); ch: = ReadKey; If ch = # 27 then Halt (1); CloseWindow; End; ClrScr; TextBackGround (0); End.

 Етап 2. Формулювання гіпотез, побудова, дослідження моделі |  Етап 5. Модифікація (розвиток) моделі

 Лекція: Функціонування і розвиток системи |  Лекція: Класифікація систем |  Лекція: Система, інформація, знання |  Лекція: Заходи інформації в системі |  Лекція: Система і управління |  Лекція: Інформаційні системи |  Лекція: Інформація і самоорганізація систем |  Лекція: Основи моделювання систем |  Завдання і вправи |  Лекція: Математичне та комп'ютерне моделювання |

© um.co.ua - учбові матеріали та реферати