Содержание

Компьютерное моделирование — метод и методология

1.Дерево Целей

1.0 Тема Компьютерное Моделирование
1.1 Уложиться в 2 месяца


2.Структура(сроки)

2.0 Работа в wiki
2.1 Презентация


3.Структура разбиения работ:

3.0 Сбор информации (1 неделя)
3.1 Сбор ссылок (1 неделя)
3.2 Размещение информации на сайте (2 недели)
3.3 Структуирование информации (2 недели)
3.4 Отформатирование информации (2 недели)
3.5 Создание презентации (1 неделя)
3.6 Подготовка к выступлению (2 недели)



Моделирование - процесс построения, изучения и применения моделей.

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

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

К основным этапам компьютерного моделирования относятся:

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

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

Процесс моделирования


Компьютерная графика в моделировании.


Общую цель здесь можно сформулировать так: сделать невидимое и абстрактное «видимым». Берем последнее слово в кавычки, так как часто эта «видимость» весьма условна. Можно ли увидеть распределение температуры внутри неоднородно нагретого тела сложной формы без введения в него сотен микродатчиков, т.е., по существу, его разрушения? — да, если есть соответствующая математическая модель, и, что очень важно — договоренность о восприятии определенных условностей на рисунке. Можно ли увидеть распределение металлических руд под землей без раскопок? Строение поверхности чужой планеты по результатам радиолокации? На эти и множество других вопросов ответ — да, можно, с помощью машинной графики и предшествующей ей математической обработки.

Более того, можно «увидеть» и то, что, строго говоря, вообще плохо соответствует слову «видеть». Так, возникшая на стыке химии и физики наука — квантовая химия — дает нам возможность «увидеть» строение молекулы. Эти изображения — верх абстракции и системы условностей, так как в атомном мире обычные наши понятия о частицах (ядрах, электронах и т.д.) принципиально не применимы. Однако, многоцветное «изображение» молекулы на экране компьютера для тех, кто понимает всю меру его условности, приносит большую пользу, чем тысячи чисел, являющихся плодом квантовохимического расчета.

Приведем несколько конкретных примеров, привязанных к нашему курсу.

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

Поскольку основные графические команды языка Turbo Pascal известны, опишем лишь общие моменты построения графиков и траекторий. Пусть численные расчеты уже закончены и нам известны границы значений координат [xmin, xmax] [ymin, ymax] и есть таблица значений х и у в некоторые моменты времени, разделенные равными промежутками: 0, t, 2t, 3t, … , nt. Требуется построить графики зависимости x(t), y(t) и траекторию. Проиллюстрируем это, используя графические процедуры Turbo Pascal.

С помощью директивы Uses Graph и процедуры InitGraph осуществляется переход в графический режим, в котором можно строить изображения. Необычная ориентация «экранной» системы координат создает определенные проблемы при построении графиков и траекторий. Мы хотим выводить их и задавать координаты точек в «естественной» системе координат х, у, изображенной на рис. 1, а графические процедуры (Сiгсlе, Linе, ОutText и др.) воспринимают аргументы в «экранной» системе Сделаем разметку так, как показано на рисунке, и произведем линейное преобразование координат x`=αx+β, y`=χy+δ
\\Если известны разрешающая способность экрана — М точек по оси и N точек по оси , то для нахождения коэффициентов α, β, χ, δ достаточно связать любые две точки в разных системах координат, например

(x=xmin, y=ymin) ⇒ (x`= 10, y`= N-10),
(x=xmax, y=ymax) ⇒ (x`= M-10, y`= 10),

перевод одних координат в другие осуществляется по формулам

x = ( (M-20)X+10Xmax-(M-10)Xmin )/(Xmax-Xmin)

y = ( (20-N)Y+(N+10)Ymax-10Ymin )/(Ymax-Ymin)

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

Изолинии


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

Опишем типичную процедуру построения изолиний на экране компьютера. На старте мы имеем двумерную таблицу значений некоторой величины А, полученную в ходе математического моделирования; числа в этой таблице соответствуют значениям этой величины в узлах пространственной сетки.

Зададим некоторый, совершенно условный, пространственный шаг h между соседними узлами по горизонтали и вспомогательную систему координат, в которой узел (1, 1) имеет координату (0, 0), узел (1, 2) — координату (h, 0), узел (1, 3) — координату (2h, 0) и т.д. Если шаг по вертикали h*, то узел (i, j) в этой системе имеет координату 1)

1) i-1)h, (j-1)h)

Предварительно найдем в таблице наибольшее и наименьшее значения величин aij — допустим, это amin и amax. Пусть b — некоторое промежуточное значение: amin < b < amax. Обсудим в общих чертах, как построить изолинию А = b. Будем для этого (в цикле) просматривать вначале все пары ближайших чисел в первой строке таблицы в поисках такой пары, для которой b находится «внутри». Допустим, число b находится между а1k и a1,k+1, т.е. либо a1k<b< a1,k+1, либо a1k>b> a1,k+1.

С помощью линейной интерполяции найдем соответствующую горизонтальную координату точки, в которой А = b:

x=(K-1)h+(b-a1k)/(a1,k+1 - a1k)h

координата y определяется номером горизонтальной линии; в данном случае y = 0).

Найденные координаты запомним и просмотрим первую строку в таблице до конца, затем просмотрим вторую строку и т.д. Покончив с просмотром строк, мы получим часть точек, соответствующих изолинии A = b.

После этого займемся просмотром столбцов. Допустим, во втором столбце нашлась пара чисел, для которой число b находится между и . Она дает следующую точку для изолинии. Закончив просмотр всех столбцов, мы получим максимально возможный набор координат точек, принадлежащих данной изолинии. Выведя их на экран в нужном масштабе, получим точечное изображение изолинии A = b, после чего можем, взяв другое значение b, построить следующую изолинию. Более детально эта процедура будет изложена ниже на примере построения линий равного потенциала электрического поля.

==== Условные цвета, условное контрастирование ====
Еще один интересный прием современной научной графики — условная раскраска. Она находит широчайшее применение в самых разных приложениях науки и представляет собой набор приемов по максимально удобной, хотя и очень условной, визуализации результатов компьютерного моделирования.

Приведем примеры. В различных исследованиях температурных полей встает проблема наглядного представления результатов. Самый простой (и самый неудобный для восприятия) способ — привести карту, в некоторых точках которой обозначены значения температур.

Другой способ, описанный выше (набор изотерм) — гораздо нагляднее. Но можно добиться еще большей наглядности, учитывая, что большинству людей свойственно, сравнивая разные цвета, воспринимать красный как «горячий», голубой как «холодный», а все остальные — между ними. Допустим, что на некоторой территории температура в данный момент имеет в разных местах значения от –25°С до + 15°С. Разделим этот диапазон на участки с шагом, равным, например, 5º

[–25, –20], [–20, –15], …, [+ 10, +15],

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

А что делать, если дисплей монохромный? Или если изображение надо перенести с цветного дисплея на бумагу при отсутствии возможности цветной печати? Тогда роль цвета может сыграть контраст. Сделаем самый «горячий» участок самым темным, самый «холодный» — прозрачным, а остальные — промежуточными.

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

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

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

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

Program Stergen;
Uses Crt_ii, Graph;
Type Mas2 = array[0..10,0..4] of Real;
  Const {Массив распределения температуры в разные моменты времени}
  U : Mas2 =
    ((3.000, 3.667, 4.333, 5.000, 3.000),  (3.000, 3.628, 4.128, 3.952, 3.000),
    (3.000, 3.514, 3.783, 3.593, 3.000),  (3.000, 3.377, 3.546, 3.396, 3.000),
    (3.000, 3.267, 3.381, 3.272, 3.000),  (3.000, 3.187, 3.266, 3.188, 3.000),
    (3.000, 3.131, 3.185, 3.131, 3.000),  (3.000, 3.091, 3.129, 3.091, 3.000),
    (3.000, 3.064, 3.090, 3.064, 3.000),  (3.000, 3.044, 3.063, 3.044, 3.000),
    (3.000, 3.031, 3.044, 3.031, 3.000));
      Var
        M,I,J,Nl,Nt: Integer; MaxF,L,T,Hl,Ht: Real;
        Procedure Initialize; {Процедура инициализации графического режима}
        Var GraphDriver, GraphMode : Integer;
      Begin
        GraphDriver:=Detect;
        InitGraph(GraphDriver, GraphMode,'c:\bp\bgi');
      End;
        {Графическая иллюстрация решения}
        Procedure Postanovka (U : Mas2; Nt, Nl : Integer; Hl, L, MaxF : Real);
      Var X_N, Shag, Y_N, Shir, Dlin, Color, I, J, K, Y : Integer;
        Flag : Boolean; Ff : String; Col : Array [0..15] Of Byte;
      Begin
 Initialize; {Инициализация графического режима}
  X_N:= GetMaxX Div 6;
  If Nt <= 6 Then M:= Nt Else M:= Nt Div 2;
  Y_N:= GetMaxY Div M-20; Shir:= Y_N Div 2;
  Dlin:= GetMaxX-2*(X_N); Shag:= Trunc(Dlin / Nl); Str(Shag, Ff);
  Col[0]:= 0; Col[1]:= 8; Col[2]:= 1; {Палитра цветов}
  Col[3]:= 9; Col[4]:= 3; Col[5]:= 11;
  Col[6]:= 2; Col[7]:= 10; Col[8]:= 14;
  Col[9]:= 13; Col[10]:= 5; Col[11]:= 12; Col[12]:= 4;
 For I:= 0 To M-1 Do {Номер временного промежутка}
  Begin
   For J := 0 To Nl-1 Do {Номер участка стержня}
     Begin
       Flag := False;
       For K := 0 To Shag Do
         Begin
          For y := 0 To Shir Do
            Begin
              Color :=1 + Round((U[I, J] + {определение номера цвета}
              (U[I,J + 1] - U[I,J]) * K/Shag-U[0,0])/3*16);
              If Random(64) > 32
            Then If Random(64) > 32 Then Color:= Color + 1 Else
               Color := Color - 1;
              If Not Flag Then {вывод текущей температуры}
              Begin
                 Str((U[I, J] + (U[I, J]) * K / Shag) : 5 : 3, Ff);
                 OutTextXY(K+X_N+Shag * J, Y_N * (1+I) - 19, Ff);
                 Flag := True
              End;
              {рисование точки}
              PutPixel(K+X_N+Shag * J, Y + Y_N * (1+I), Col[Color]);
              End;
         End
     End
    End;
    SetColor(White);
    SetTextStyle(1,0,2);
    OutTextXY(150, 420, 'нажмите любую клавишу');
    Repeat Until Keypressed;
    CloseGraph;
  End;
  Begin {OCHOBHAЯ ПРОГРАММА}
     L:= 4; T:= 10; Hl:= 1; Ht := 1;
     Nl := Trunc(L / Hl); Nt := Trunc(T / Ht); MaxF := 5;
     Postanovka (U, Nt, Nl, Hl, L, MaxF)
       End.