ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 31.03.2021
Просмотров: 6753
Скачиваний: 51
586
строения графика аналитически заданной функции на произвольном отрезке; здесь мы детализи-
руем рассмотрение. Пусть численные расчеты уже закончены и нам известны границы значений
координат [
x
min
,
x
max
] и [
y
min
,
y
mах
] и есть таблица значений
х
и
у
в некоторые моменты времени,
разделенные равными промежутками: 0,
t
, 2
t
, 3
t
,...,
пt.
Требуется построить графики зависимости
x(t)
,
у(t)
и траекторию. Проиллюстрируем это, используя графические процедуры PASCAL.
С помощью директивы Uses Graph и процедуры InitGraph (<параметры>) осуществляется
переход в графический режим, в котором можно строить изображения. Необычная ориентация
«экранной» системы координат создает определенные проблемы при построении графиков и тра-
екторий. Мы хотим выводить их и задавать координаты точек в «естественной» системе коорди-
нат
x, y,
изображенной на рис. 7.4, а графические процедуры (Circle, Line. OutText и др.) воспри-
нимают аргументы в «экранной» системе
x'
,
у'.
Сделаем разметку так,
как показано
на
рисунке, и
произведем линейное преобразование координат
Если известны разрешающая способность экрана -
М
точек по оси
х'
и
N
точек по оси
у',
то
для нахождения коэффициентов
α, β, γ, δ
достаточно связать любые две точки в разных системах
координат, например
(отступ на 10 позиций от краев экрана позволит создавать подписи, разметку осей и
др.). Имеем
откуда
откуда
Таким образом, перевод одних координат в другие осуществляется по формулам
587
Рис. 7.4.
Экранная и «естественная» системы координат
Теперь достаточно поставить точку с нужной координатой (
x
,
у)
с помощью процедуры
PutPixel, а введя ее в цикл, изобразить график или траекторию. Если же требуется изобразить дви-
жение тела, то перед выводом на экран очередной точки достаточно стереть предыдущую или
воспользоваться несколькими видеостраницами - соответствующие приемы программирования
читателю, скорее всего, известны. Отметим, что создание на экране дисплея динамических зри-
тельных изображений - так называемая анимация - одно из перспективных направлений искусст-
венного интеллекта-раздела современной информатики.
Изолинии.
В задачах моделирования достаточно стандартная проблема - построение линий
(поверхностей), вдоль которых некоторая функция имеет одинаковое значение, называемых изо-
линиями (изоповерхностями). Это очень распространенная задача визуализации характеристик
некоторого скалярного поля в приближении сплошной среды: изотермы - линии равной темпера-
туры, изобары - линии равного давления, изолинии функции тока жидкости или газа, по которым
легко можно представить себе их потоки, изолинии численностей экологической популяции на
местности, изолинии концентрации вредных примесей в окружающей среде и т.д.
Опишем типичную процедуру построения изолиний на экране компьютера. На старте мы
имеем двумерную таблицу значений некоторой величины А, полученную в ходе математического
моделирования; числа в этой таблице соответствуют значениям этой величины в узлах простран-
ственной сетки (рис. 7.5).
Зададим некоторый, совершенно условный, пространственный шаг
h
между соседними уз-
лами по горизонтали и вспомогательную систему координат, в которой узел (1, 1) имеет коорди-
нату (0, 0), узел (1, 2) - координату (
h
, 0), узел (1, 3) - координату
(2h, 0)
и т.д. Если шаг по верти-
кали
h
*, то узел
(i, j)
в этой системе имеет координату ((
i
-1) ∙
h,
(
y
-1) ∙
h
*).
Предварительно найдем в таблице наибольшее и наименьшее значения величин
а
ij
-
допус-
тим, это
a
min
и
а
mах
. Пусть
b -
некоторое промежуточное значение:
a
min
< b <
a
max
. Обсудим в об-
щих чертах, как построить изолинию
A
=
b.
Будем для этого (в цикле) просматривать вначале все
пары ближайших чисел в первой строке таблицы в поисках такой пары, для которой
b
находится
«внутри». Допустим, число
b
находится между
a
1k
и
a
1,k+1
, т.е. либо
a
1k
<
b <
a
1,k+1
, либо
a
1k
>
b >
a
1,k+1
.
588
Рис. 7.5.
Пространственная сетка и соответствующая ей таблица значений величины А
С помощью линейной интерполяции найдем соответствующую горизонтальную координа-
ту точки, в которой
А = b:
(координата
у
определяется номером горизонтальной линии; в данном случае у = 0).
Найденные координаты запомним и просмотрим первую строку в таблице до конца, затем
просмотрим вторую строку и т.д. Покончив с просмотром строк, мы получим часть точек, соот-
ветствующих изолинии
А = b.
После этого займемся просмотром столбцов. Допустим, во втором столбце нашлась пара
чисел, для которой число
b
находится между
а
p2
и
a
p+1,2
. Она дает следующую точку для изолинии.
Закончив просмотр всех столбцов, мы получим максимально возможный набор координат точек,
принадлежащих данной изолинии. Выведя их на экран в нужном масштабе, получим точечное
изображение изолинии
А = b,
после чего можем, взяв другое значение
b,
построить следующую
изолинию. Более детально эта процедура изложена ниже в пункте 3.8 на примере построения ли-
ний равного потенциала электрического поля.
Условные цвета, условное контрастирование
. Еще один интересный прием современной
научной графики - условная раскраска. Она находит широчайшее применение в самых разных
приложениях науки и представляет собой набор приемов по максимально удобной, хотя и очень
условной, визуализации результатов компьютерного моделирования.
Приведем примеры. В различных исследованиях температурных полей
встает
проблема на-
глядного представления результатов. Самый простой (и, с точки зрения специалиста, весьма не-
эффективный) - привести карту (чертеж, план), в некоторых точках которой обозначены значения
температуры.
Другой способ - набор изотерм - гораздо эффективнее; к нему прибегают некоторые газеты,
давая состояние и прогноз погоды. Но можно добиться еще большей наглядности, учитывая, что
большинству людей свойственно, сравнивая разные цвета, воспринимать красный как «горячий»,
голубой как «холодный», а все остальные - между ними. Допустим, что на некоторой территории
температура в данный момент имеет в разных местах значения от -25°С до + 15°С. Разделим этот
диапазон на участки с шагом, равным, например, 5°
[-25,-20], [-20,-15],...,[+10,+15],
и закрасим первый из них в ярко-голубой, последний - в ярко-красный, а все остальные - в проме-
589
жуточные оттенки голубого и красного цветов. Получится замечательная наглядная картина тем-
пературного поля.
А что делать, если дисплей монохромный?! Или если изображение надо перенести с цвет-
ного дисплея на бумагу при отсутствии возможности цветной печати? -Тогда роль цвета может
сыграть контраст. Сделаем самый «горячий» участок самым темным, самый «холодный» - про-
зрачным, а остальные - между ними. Эффектность, конечно, меньше, чем при цветовой раскраске,
но для наметанного глаза изображение информативно.
То же самое можно делать при иллюстрации температурного поля и на поверхности обра-
батываемой на станке детали, и на поверхности далекой планеты.
В нашем курсе есть несколько моделей, в которых можно (и очень полезно) прибегнуть к
подобному приему визуализации. В задаче о теплопроводности в стержне это даже не очень слож-
но; можно делать такие условные раскраски при моделировании распределения электрических по-
лей. Если заниматься имитационным моделированием конкурирующих популяций, то, раскрасив
их в разные цвета, можно получить на экране причудливые картины, передающие ход конкурент-
ной борьбы.
Условные раскраски бывают и гораздо более абстрактными, чем в описанных выше случа-
ях. При моделировании сложных органических молекул компьютер может выдавать результаты в
виде многоцветной картины, на которой атомы водорода изображены одним цветом, углерода -
другим и т.д., причем атом представлен шариком (кружочком), в пределах которого плотность
цвета меняется в соответствии с распределением электронной плотности.
При поиске полезных ископаемых методами аэрофотосъемки с самолетов или космических
спутников компьютеры строят условные цветовые изображения распределений плотности под по-
верхностью Земли. Подобных примеров можно привести достаточно много.
Подведем итог: изображения в условных цветах и контрастах - мощнейший прием научной
графики. Он позволяет понять строение не только плоских, но и объемных (трехмерных) объектов,
дает в руки исследователя один из замечательных методов познания. Приведем в качестве иллю-
страции фрагмент программы.
Программа 147.
Условная раскраска неравномерно нагретого стержня в разные моменты
времени (по заранее заготовленным данным).
Program Stergen;
Uses Crt, 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, N1, Nt : Integer; MaxF, L, T, HI, Ht : Real;
Procedure Initialize; (Процедура инициализации графического режима)
Var GraphDriver, GraphMode : Integer;
Begin
DetectGraph(GraphDriver, GraphMode) ;
InitGraph(GraphDriver, GraphMode, '');
End;
(Графическая иллюстрация решения)
Procedure Postar.ovka (U : Mas2; Nt, N1 : Integer; HI, 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;
590
Dlin := GetMaxX -2 * X_N; Shag := Trunc(Dlin / N1); Str(Shag,Ff) ;
Col[0] := 0; Col[l] := 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[l0] := 5; Col[ll] := 12; Col [12] := 4;
For I :== 0 To M - 1 Do (номер временного промежутка)
Begin
For J := 0 To N1 - 1 Do (номер участка стержня)
Begin
Flag := False;
For К := 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]) * К / 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+l]-U[I,J])*K/Shag) : 5 : 3, Ff);
OutTextXY(K+X_N+Shag*J, Y_N*(1+1)-19, Ff) ;
Flag := True
End;
{рисование точки}
PutPixel(K+X_N+Shag*J, Y+Y_N*(1+I), Col[Color])
End
End
End
End;
SetColor(White); OutTextXY(150, 450, 'Нажмите любую клавишу ');
Repeat Until KeyPressed; CloseGraph
End;
Begin (ОСНОВНАЯ ПРОГРАММА)
L := 4; Т := 10; Hi := 1; Ht := 1;
N1 := Trunc(L / HI); Nt := Trunc(T / Ht); MaxF := 5;
Postanovka (U. Nt, N1, HI, L, MaxF)
End.
§3. МОДЕЛИРОВАНИЕ ФИЗИЧЕСКИХ ПРОЦЕССОВ
3.1. ФИЗИКА И МОДЕЛИРОВАНИЕ
Физика - наука, в которой математическое моделирование является чрезвычайно важным
методом исследования. Наряду с традиционным делением физики на экспериментальную и теоре-
тическую сегодня уверенно выделяется третий фундаментальный раздел - вычислительная физика
(computational physics).
Причину этого в целом можно сформулировать так: при максимальном
проникновении в физику математических методов, порой доходящем до фактического сращивания
этих наук, реальные возможности решения возникающих математических задач традиционными
методами очень ограниченны. Из многих конкретных причин выделим две наиболее часто встре-
чающиеся: нелинейность многих физических процессов (примеры - ниже в тексте) и необходи-
мость исследования совместного движения многих тел, для которого приходится решать системы
большого числа уравнений. Часто численное моделирование в физике называют вычислительным
экспериментом, поскольку оно имеет много общего с лабораторным экспериментом.
Таблица 7.1