
- •Предисловие
- •Введение
- •Зачем нужен такой практикум?
- •О чем сказано далее
- •О системе MATLAB
- •Первые задачи
- •Фигуры Лиссажу
- •Биения
- •Волны
- •Основные графические объекты и их использование
- •Отрисовка движущихся кривых
- •Об использовании безразмерных переменных
- •Маятник
- •Свободные колебания
- •Вынужденные колебания
- •Переходные колебания
- •Резонанс
- •О случайном движении
- •Движение частиц в центральном поле
- •Траектория финитного движения
- •Влияние малого возмущения
- •Движение двух частиц
- •Случайные блуждания и диффузия
- •Закономерности случайных блужданий
- •Оценка параметров движения броуновской частицы в жидкости
- •Программа, изображающая случайные блуждания
- •Броуновские частицы в поле тяжести
- •Броуновское движение
- •Случайные силы
- •Корреляционные функции
- •Шары
- •Расчет движения шаров
- •Алгоритм расчета
- •Процедура Balls
- •Динамический хаос
- •Почему движение шаров становится непредсказуемым?
- •Как убедиться в появлении хаоса?
- •Функции распределения
- •Стохастический нагрев и стохастическое охлаждение
- •Потери пучка при прохождении через вещество
- •Эффективные сечения
- •Потери частиц пучка при прохождении слоя
- •Потери энергии
- •Распределение по углам и энергиям
- •Работа с сигналами и модель диодного выпрямителя
- •Работа с сигналами
- •Расчет простейших цепей
- •Статическая модель диода. Решение нелинейных уравнений
- •ПРИЛОЖЕНИЕ
- •Свободные колебания
- •Электрические и магнитные поля
- •Частица в магнитной ловушке
- •Фокусировка пучков частиц
- •Концентрация частиц
- •Приближенные методы решения систем дифференциальных уравнений
- •Моделирование распределения случайных величин
- •Компиляция файлов MATLAB
- •Список литературы
- •Работа в командном окне
- •Вход в систему MATLAB
- •Интерактивный доступ к справочной информации и документации
- •Команда hеlр
- •Команда lookfor
- •Меню Help
- •Редактирование и перевызов командной строки
- •Формат вывода
- •Копия протокола сессии
- •Введение матриц
- •Явное определение матриц
- •Функции построения матриц
- •Операции, выражения и переменные
- •Правила записи операторов
- •Матричные операции
- •Операции с массивами
- •Сохранение данных из рабочей области
- •Операторы for, while, if, case и операторы отношения
- •Цикл for
- •Цикл while
- •Условный оператор if
- •Оператор переключения case
- •Условия (операторы отношения)
- •Функция find
- •Функции MATLAB
- •Скалярные функции
- •Векторные функции
- •Матричные функции
- •M-файлы
- •Файлы-программы, или сценарии
- •Файлы-функции
- •Текстовые строки, сообщения об ошибках, ввод
- •Работа с m-файлами
- •Список путей доступа
- •Работа со списком путей доступа
- •Текущий каталог
- •Средство просмотра и редактирования путей доступа Path Browser
- •Использование редактора/отладчика
- •Отладка m-файлов
- •Сравнение алгоритмов: flops и etime
- •Графика
- •Плоские графики
- •Команда plot
- •Разметка графика и надписи
- •Управление осями при выводе графиков
- •Несколько графиков на листе
- •Специальные виды графиков
- •Столбиковые диаграммы
- •Ступенчатые кривые
- •Гистограммы
- •Изображение функций
- •Трехмерные изображения
- •Одномерная кривая
- •Сеточные поверхности
- •Изолинии
- •Дескрипторная графика (графика низкого уровня)
- •Графические объекты и их иерархия
- •Дескрипторы и работа с ними
- •Свойства графических объектов и работа с ними. Функции get и set
- •Движущиеся графики (анимация)
- •Разработка графического интерфейса пользователя
- •Создание внешнего вида интерфейса
- •Способы взаимодействия графического интерфейса с функциями пользователя
- •Общая структура функции NAME.M графического интерфейса
- •Функционирование графического интерфейса
- •Разработка функции Run
- •Разработка функции Exit
- •Разработка функции Edit
Из существенных для нас свойств этого объекта отметим свойство ’Callback’, значение которого (в данном примере ’Func_Run’) определяет имя функции, которая будет вызываться при нажатии мышкой на эту кнопку. Текст, который выводится на кнопке, определяется значением свойства ’String’, а свойство ’Tag’ (значение которого можно выбрать по своему усмотрению) определяет возможность впоследствии обратиться к этому объекту.
Начальные значения, которые необходимо задать для занесения начальных значений в интерфейсную форму, помещаются в начале функции NAME.M в виде
N=1;
R=1; % Задание начальных значений
C=1;
info.N=N;
info.R=R; % Задание начальных значений в записи INFO. info.C=C;
В операторах uicontrol, которые ответственны за редактируемые окна (признаком этого является строка ’Style’,’edit’,...), необходимо свойству ’String’ присвоить значение num2str(N), а вместо формального, одинакового дескриптора h1 использовать в этих строках дескриптор info.sN, так что соответствующее обращение будет иметь вид
info.sN = uicontrol(’Parent’,h0, ...
’Units’,’normalized’, ...
’FontUnits’,’normalized’, ...
’BackgroundColor’,[1 1 1], ...
’Callback’,’Func_Edit’, ...
’FontSize’,0.26, ...
’ListboxTop’,0, ...
’Position’,[0.814 0.89 0.12 0.058], ...
’String’,num2str(N), ...
’Style’,’edit’, ...
’Tag’,’EditN’);
В конце функции NAME.M необходимо вставить строку Set(h0,’UserData’,info);. Это сохранение всех данных из записи info в общем хранилище данных - UserData.
9.2.2.Функционирование графического интерфейса
Принципиальная схема взаимодействия модулей разработанной программы показана на рис. 11. Головная программа DRIVE вызывает основную графическую
166

DRIVE
|
GRAPH |
|
|
|
G?L |
|
MOUSE? |
|
|
>: |
|
RUN |
EDIT |
EXIT |
Рис. 11. Принципиальная схема функционирования графического интерфейса
программу NAME.M, которая при первом исполнении создает графический интерфейсный экран с кнопками, окнами, поясняющим текстом и т.д. После этого система переходит в режим ожидания событий - нажатия мышкой в интерфейсном окне. Если это нажатие происходит в редактируемом окне, после чего с помощью клавиатуры изменяется значение в этом окне и нажимается клавиша Enter, то начинается выполнение процедуры Func_Edit, которая и обновляет соответствующие данные в записи info, после чего заносит обновленные значения в UserData. Если же происходит нажатие на кнопку Run, то обновляются значения редактируемых окон и выполняется функция Run.
9.2.3.Разработка функции Run
Функция выполнения основного действия (кнопка RUN) пишется на основании ранее имевшейся программы расчета R-C цепочки. Первая группа добавляемых операторов - извлечение новых значений задаваемых переменных
h0=gcf;
info=get(h0,’UserData’);
N=info.N;
R=info.R;
C=info.C;
167
....................
%Основной расчетный алгоритм
%Построение насчитанных графиков в окне
%Первое окно - рисуем сигнал
hax1=finobj(’Tag’,’Axes1’); % Определение дескриптора осей этого окна
subplot(hax1); |
% Рисуем подрисунок в этом окне |
cla; |
% Стирание предыдущего изображения в этом окне |
hl1=line(t,E); |
% Определить линию с дескриптором hl1 |
set(hl1,’color’,’r’,... |
% Обновить данные для линии hl1 цветом ’r’ |
’parent’,hax1); |
% в осях hax1 |
title(’Сигнал E(t)’); |
% добавить надпись к этому окну |
........................... |
|
И так далее для каждого окна.
9.2.4.Разработка функции Exit
Самая простая процедура - это процедура отключения программы и стирания рисунка
function f=Func_Exit() delete(gcf);
После выполнения этой процедуры удаляются все графические объекты в текущем окне и закрывается графическое окно.
9.2.5.Разработка функции Edit
Функция редактирования значений в окнах ввода.
h0=gcf;
%Считывание данных из общего блока всего рисунка. info=get(h0,’UserData’);
%Определение дескриптора редактируемого окна hedN=findobj(h0,’Tag’,’EditN’
%Сканирование строки с преобразованием к формату e newN=sscanf(get(hedN,’string’),’%e’);
if ~isempty(newN)
info.N=newN;
end;
................
168
Дескриптор соответствующего редактируемого окна в данном примере находится с помощью функции findobj - нахождение объекта по известному значению его свойства (в данном случае - свойству Tag). Можно эти дескрипторы передавать из процедуры NAME.M с помощью оператора global или через свойство UserData. В конце всей функции после выполнения группы операторов, подобных приведенным, для каждого редактируемого окна необходимо результаты обновления info присвоить свойству ’UserData’ с помощью оператора
set(h0,’UserData’,info); % Занесение новых данных из info в UserData.
169

Глеб Леонидович Коткин Валерий Семенович Черкасский
КОМПЬЮТЕРНОЕ МОДЕЛИРОВАНИЕ ФИЗИЧЕСКИХ ПРОЦЕССОВ Учебное пособие
Подписано в печать |
|
Формат 60 × 84/16 |
Офсетная печать. |
|
Уч.-изд. |
Заказ № |
Тираж 300 экз. |
Цена |
Редакционно-издательский отдел Новосибирского университета; участок оперативной полиграфии НГУ; 630090, Новосибирск-90, ул. Пирогова, 2.