Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Визуализация в научных исследованиях

Покупка
Основная коллекция
Артикул: 637288.01.01
К покупке доступен более свежий выпуск Перейти
В учебном пособии рассмотрены методы графического представления результатов расчета физических и инженерных задач, представляемые специализированными программами и средствами операционных систем. Подробно исследуются графические возможности пакета MATLAB, который наряду с мощными расчетными средствами обладает прекрасной компьютерной графикой. Ряд задач визуализации решается методами программирования компьютерной графики на С++. Используются функции графического интерфейса GDI из набора системных функций API, которые предоставляет пользователю операционная система Windows. Все примеры на С++ апробированы в среде разработки проектов Visual Studio 2008. Рассматриваются вопросы взаимодействия пакета MATLAB и программ, написанных на С++ в среде Visual Studio. Соответствует требованиям федеральных государственных образовательных стандартов высшего образования последнего поколения. Для студентов, обучающихся по направлению подготовки «Программная инженерия».
6
195
268
334

Только для владельцев печатной версии книги: чтобы получить доступ к дополнительным материалам, пожалуйста, введите последнее слово на странице №157 Вашего печатного экземпляра.

Корнеев, В. И. Визуализация в научных исследованиях : учебное пособие / В.И. Корнеев, Л.Г. Гагарина, М.В. Корнеева. — Москва : ИНФРА-М, 2021. — 400 с. + Доп. материалы [Электронный ресурс]. — (Высшее образование: Магистратура). — DOI 10.12737/1029660. - ISBN 978-5-16-015308-7. - Текст : электронный. - URL: https://znanium.com/catalog/product/1029660 (дата обращения: 26.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
ВИЗУАЛИЗАЦИЯ 

В НАУЧНЫХ 

ИССЛЕДОВАНИЯХ

В.И. КОРНЕЕВ
Л.Г. ГАГАРИНА
М.В. КОРНЕЕВА

УЧЕБНОЕ ПОСОБИЕ

Рекомендовано Межрегиональным учебно-методическим советом 

профессионального образования в качестве учебного пособия для студентов 

высших учебных заведений, обучающихся по направлению подготовки 

09.04.04 «Программная инженерия» (квалификация (степень) «магистр») 

(протокол № 10 от 12.10.2020)

Москва
ИНФРА-М

2021

УДК 004.42(075.8) 
ББК 32.973-018я73
 
К67

Р е ц е н з е н т :

Т.Ю. Крупкина, доктор технических наук, профессор, профессор кафедры 

интегральной электроники и микросистем Национального исследовательского университета «Московский институт электронной техники»

ISBN 978-5-16-015308-7 (print)
ISBN 978-5-16-109433-4 (online)

Материалы, отмеченные знаком 
, 

доступны в электронно-библиотечной системе Znanium.com

©  Корнеев В.И., Гагарина Л.Г., 

Корнеева М.В., 2021

Корнеев В.И.

К67  
Визуализация в научных исследованиях : учебное пособие / 

В.И. Корнеев, Л.Г. Гагарина, М.В. Корнеева. — Москва : ИНФРА-М, 
2021. — 400 с. + Доп. материалы [Электронный ресурс]. — (Высшее образование: Магистратура). — DOI 10.12737/1029660.

ISBN 978-5-16-015308-7 (print)
ISBN 978-5-16-109433-4 (online)
В учебном пособии рассмотрены методы графического представления 

результатов расчета физических и инженерных задач, представляемые 
специализированными программами и средствами операционных си  стем. 
Подробно исследуются графические возможности пакета MATLAB, который наряду с мощными расчетными средствами обладает прекрасной 
компьютерной графикой. Ряд задач визуализации решается методами 
программирования компьютерной графики на С++. Используются функции графического интерфейса GDI из набора системных функций API, 
которые предоставляет пользователю операционная система Windows. Все 
примеры на С++ апробированы в среде разработки проектов Visual Studio 
2008. Рассматриваются вопросы взаимодействия пакета MATLAB и программ, написанных на С++ в среде Visual Studio.

Соответствует требованиям федеральных государственных образова
тельных стандартов высшего образования последнего поколения.

Для студентов, обучающихся по направлению подготовки «Программ
ная инженерия».

УДК 004.42(075.8)
ББК 32.973-018я73

Предисловие

Развитие компьютерной графики и методов математического 
моделирования привело к созданию нового научного направления, 
которое получило название «научная визуализация» (Scientific 
visualization). Годом рождения этого научного направления можно 
считать 1987 г., когда национальный научный фонд США представил отчет «Визуализация в вычислениях» (Visualization in 
Scientific Computing).
Основной задачей научной визуализации является визуальное 
представление результатов научных исследований с помощью 
средств компьютерной графики. Научная визуализация переводит 
результаты научных исследований, выраженные в числовой форме, 
в визуальные образы. Визуальное представление числовых данных 
облегчает работу с информацией и обмен этой информацией.
Следующая цель научной визуализации — увидеть то, чего раньше 
нельзя было увидеть, например движение элементарных частиц, 
распределение температуры в полупроводниковом устройстве, распределение электрического и магнитного поля в волноводе и т.д. 
Такие картины позволяют глубже понять природу протекающих 
процессов и быстрее найти нужное решение задачи.
Дальнейшим развитием научной визуализации является переход 
к технологии виртуального окружения (виртуальная реальность). 
Эта технология визуализации определяется как интерактивная графика в реальном времени с трехмерными моделями, погружающая 
пользователя в мир модели с прямым манипулированием объектами в пространстве модели.
Материал данной книги в значительной степени соответствует 
курсу «Визуализация в научных исследованиях», который один 
из авторов несколько лет читал в Московском институте электронной техники (МИЭТ) для студентов, обучающихся по направлению «Программная инженерия».
Книга состоит из шести глав, в каждой из них исследуются физические, инженерные или математические задачи, с которыми студентам приходится иметь дело в процессе обучения. Для каждой 
задачи формулируется своя математическая модель, которая затем 
решается программными средствами, имеющимися в распоряжении. После того как найдены решения задачи в числовом виде, 
возникает проблема визуализации этих результатов.
Для визуализации используются методы и алгоритмы компьютерной графики. Часть задач решается в пакете MATLAB, который 

наряду с мощными расчетными средствами обладает прекрасной 
компьютерной графикой. Для визуализации полученных решений 
используется графика, которую предоставляет пользователю пакет 
MATLAB. Эту графику можно назвать высокоуровневой компьютерной графикой. Здесь имеется множество функций, рисующих 
различные графические объекты, с учетом большого количества 
алгоритмов и методов компьютерной графики.
Даже не зная глубоко методы и алгоритмы компьютерной графики, можно получать неплохие результаты, используя графику 
MATLAB. Однако для студентов, которые специализируются в программировании, знание основ компьютерной графики необходимо. 
Поэтому некоторые задачи решаются с применением программирования компьютерной графики на С++. Используются функции графического интерфейса GDI из набора системных функций API, которые предоставляет пользователю операционная система Windows.
В этих задачах применяются различные методы 3D-графики, 
такие как ортографическое и центральное проецирование, методы 
удаления невидимых частей объекта, метод Z-буфера, методы окрашивания объекта и т.д. Все примеры на С++ апробированы в среде 
разработки проектов Visual Studio 2008.
Отдельная глава посвящена вопросам взаимодействия пакета 
MATLAB и программ, написанных на С++ в среде Visual Studio. 
Рассматриваются вопросы использования вставок, отдельных 
функций, написанных на языке C++ в программах пакета MATLAB. 
Также исследуется возможность обращения из программы, написанной на языке C++, к графическим модулям пакета MATLAB 
для графического представления результатов расчета физических 
или математических задач.
Книга разбита на шесть глав, в которых рассматриваются различные области физики и математики с использованием визуализации результатов научных исследований в этих областях. 
По каждой главе приводится большое число действующих 
программ.
Учебное пособие предназначено для студентов, обучающихся 
на очной форме (магистратура) по направлению подготовки 
09.04.04 «Программная инженерия», профилям «Программное 
обеспечение автоматизированных систем и вычислительных комплексов», «Администрирование сетей и кибертехнологии».
В результате изучения дисциплины студент будет:
знать
 
• методы и алгоритмы, необходимые для преобразования результатов научных исследований в графическую форму;

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

Глава 1. 
ГРАФИЧЕСКИЕ ВОЗМОЖНОСТИ ПАКЕТА 
MATLAB. МОДЕЛИРОВАНИЕ ДВИЖЕНИЯ 
ВОЛНОВОГО ПАКЕТА ЭЛЕКТРОНА.

1.1. НАЧАЛО РАБОТЫ С ПАКЕТОМ MATLAB

Начнем с ознакомления с графическими средствами, которые 
предоставляет пользователю программная система MATLAB. 
Создадим простую программу, рисующую график синуса. Программные файлы пакета MATLAB имеют расширение .m. Поэтому 
создадим первую программу с именем Plot.m. Для этой цели откроем пакет MATLAB, в главном меню пройдем по цепочке команд 
File — New — M-File. В результате откроется окно редактора 
программы. Если в окне имеются какие-нибудь служебные надписи, то его нужно очистить. Затем в пустом окне редактора введем 
следующие строчки кода нашей программы:

clc
clear
 
x = 0:0.1:10;
y = sin(x);
 
plot(x,y)

После этого сохраним программу в файле с именем Plot.m. 
Запускаем программу на выполнение. Результат представлен 
на рис. 1.1.

Рис. 1.1. Результат работы программы Plot.m.

В этом простом коде функция plot() рисует график синуса. Эта 
функция довольно сложная и многофункциональная. Даже в этом 
простом примере она выполняет множество действий. Во-первых, 
она создает окно вывода графика, размер которого эта функция 
вычисляет в соответствии с размерами графика. Затем расставляет 
числа вдоль осей x и y. Во-вторых, функция рисует график синуса 
толщиной в один пиксель синим цветом. Все эти действия функция 
выполняет по умолчанию.
Если требуется заставить функцию plot() выполнить другие 
действия, то нужны дополнительные команды, о которых будем говорить далее.
Входными параметрами функции plot() являются два массива 
одинаковой длины: массив координат x, и массив координат y. Как 
создаются эти массивы в данном примере, видно из кода программы. Если в конце строчки с кодом создания массива убрать 
точку с запятой, то результат вычислений появится в командном 
окне (Command Window) пакета MATLAB. Например, пусть это 
будут следующие строчки кода:

x = 0:1:4
y = sin(x)
 
В результате в командном окне появится следующая информация:

x =
     0     1     2     3     4

y =
         0    0.8415    0.9093    0.1411   -0.7568

Это пять значений координаты x и пять соответствующих значений синуса. Заметим, что если в коде программы окажутся синтаксические ошибки в языке программирования MATLAB, то в командном окне появится сообщение об ошибках (красным цветом).
Теперь скажем о первой строчке кода программы

clc

Эта команда очищает командное окно перед запуском программы (Clear Command Window). Дело в том, что по умолчанию 
в командном окне сохраняется информация обо всех запусках 
программ, пока не выключен MATLAB. Вторая строчка кода программы имеет вид

clear

Эта команда очищает рабочее пространство системы MATLAB, 
по сути, освобождая память (Remove items from workspace, freeing 
up system memory). При запуске программы MATLAB для каждой 
переменной величины выделяет место в памяти, соответствующее 
размеру этой величины. По умолчанию при запуске очередной 
программы информация о предыдущей программе остается в памяти. Пока MATLAB работает, память разбухает и засоряется. 
Дело в том, что в разных программах разные переменные величины 
могут иметь одинаковые имена и это может привести к ошибкам 
в работе программы, если не следить за состоянием памяти.
Иногда такое положение может быть полезным, если разные 
программы работают с одним и тем же набором данных, которые 
располагаются в общей памяти для этих разных программ. Однако 
для обычных программ, чтобы случайно не сделать ошибок, лучше 
всего очищать память перед началом работы программы.
Состояние памяти можно выяснить, если после работы программы, например Plot.m, в командном окне набрать следующую 
команду:

>> whos

В результате в командном окне появится такая информация:

Name        Size               Bytes  Class     

  x         1x101              808  double              
  y         1x101              808  double              

В нашем примере имеется две переменные величины с именами 
x и y. Эти величины являются одномерными массивами, в которых 
содержатся элементы типа double. Количество элементов в массиве равно 101. На элемент типа double выделяется 8 байт памяти, 
поэтому под эти две переменные величины MATLAB выделяет 
1616 байт памяти.
Обратим внимание на размер Size переменной величины x, показанный выше. Немного необычно обозначение, а именно 1x101. 
Дело в том, что в пакете MATLAB любая переменная величина является матрицей. Даже отдельное число, например a = 2.5, имеет 
размер 1x1.
В пакете MATLAB одномерные массивы называются векторами, 
поэтому величину x можно назвать вектором-строчкой с размерно
стью 1x101. Как известно из алгебры матриц, из вектора-строчки 
можно получить вектор-столбик операцией транспонирования. 
В пакете MATLAB транспонирование обозначается штрихом: 
u
w
=
′. Немного изменим программу Plot.m и создадим программу 
Plot1.m:

clc
clear
 
a = 2;
x = 0:0.1:10;
y = x.*sin(x).^a;
 
x1 = x';
y1 = y';
plot(x1,y1)
grid on
 
Запускаем программу и получаем картину, показанную 
на рис. 1.2.

Рис. 1.2. Результат работы программы Plot1.m

Отметим изменения в этой картине по сравнению с той, которая 
изображена на рис. 1.1. Во-первых, здесь показан график другой 
функции:

 
sina
y
x
x
=
. 

На примере этой функции обратим внимание на некоторые особенности синтаксиса языка MATLAB. Заметим, что величина x 
является одномерным массивом и подстановка ее в синус sin(x) 
превращает этот синус также в массив. Далее этот синус возводится 

в степень a. Операция возведения в степень в пакете MATLAB обозначается галочкой ^. Здесь следует обратить внимание на точку, 
стоящую перед этой галочкой. Эта точка обозначает, что операция 
выполняется над массивом, и в данном случае каждый элемент массива возводится в степень a.
Аналогично точка, стоящая перед знаком умножения, обозначает, что каждый элемент массива x умножается на соответствующий элемент массива sina x. Заметим, что если операции выполняются над скалярными величинами, а не над массивами, то 
точку перед знаком операции можно не ставить.
Обратим внимание на последнюю строчку кода:

grid on
 
Эта команда указывает функции plot(), чтобы на картине 
была добавлена сетка (Grid lines for 2-D and 3-D plots). Посмотрим 
также на следующие строчки кода:

x1 = x';
y1 = y';

Здесь создаются два новых одномерных массива x1 и y1 с помощью операции транспонирования. Посредством команды whos 
посмотрим, как представлены эти два новых массива в пакете 
MATLAB:

>> whos
  Name        Size             Bytes  Class     

  a           1x1                  8  double              
  x           1x101              808  double              
  x1        101x1                808  double              
  y           1x101              808  double              
  y1        101x1                808  double              

Итак, видно, что каждый из этих одномерных массивов является 
вектор-столбиком. Их размерность обозначается как 101x1. Здесь 
введена также скалярная величина a, размерность которой равна 1x1.
Если вектор-столбики x1 и y1 вывести в командном окне, то 
они действительно будут представлены в виде столбиков:

x1 =

     0

К покупке доступен более свежий выпуск Перейти