Главная страница

Практикум по матлабу. практикум по матлабу. Физических процессов с использованием


Скачать 1.13 Mb.
НазваниеФизических процессов с использованием
АнкорПрактикум по матлабу
Дата21.06.2021
Размер1.13 Mb.
Формат файлаpdf
Имя файлапрактикум по матлабу.pdf
ТипУчебное пособие
#219898
страница2 из 17
1   2   3   4   5   6   7   8   9   ...   17
.m, который содержит последовательность операторов MAT-
LAB. Наберите приведенный далее текст или модифицируйте протокол своей ра- боты (который вы можете получить с помощью команды
diary).
10

%%%%%%%%%%%%%%%%%%%%%%%%%%
% Второй вариант расчета фигур Лиссажу
%
%%%%%%%%%%%%%%%%%%%%%%%%%%
% Задание коэффициентов
a1=1.2; a2=1.0; w2=1.0;
% Задание значений вектора t
t=0:0.1:15; x=a1*cos(w2*t);
% Задание разных частот w1
w1=1.25:0.25:2.0;
% Цикл вывода разных графиков на одном листе
for k=1:4,
y=a2*cos(w1(k)*t);
% Задание вектора-строки вывода надписей
s=[’w1/w2=’ num2str(w1(k))];
% Вывод разных графиков в разных местах листа (экрана)
% Оператор subplot задает место на листе, где
% график будет нарисован последующей командой
subplot(2,2,k); plot(x,y); title(s);
end;
Написанная выше программа-сценарий имеет несколько новых операторов. Опе- ратор
s=[’w1/w2=’ num2str(w1(k))]; можно для большей ясности предста- вить в виде нескольких операторов
s1=’w1/w2’ – формирование вектор-строки,
каждый элемент которой является символом, т.е. формирование строки текста. Опе- ратор
s2=num2str(w1(k)) – формирование строки текста с помощью функ- ции
num2str, которая превращает числовую переменнную w1(k) в ее строковое представление. Пусть, например,
w1(1)=2.34, тогда оператор s2=num2str(w1(1))
эквивалентен присвоению
s2=’2.34’. И последнее действие – объединение двух векторов
s1 и s2 в один с помощью конструкции вида s=[s1 s2]. Таким образом можно явно задавать вектора и матрицы (см. Дополнение, п.
2
), причем элемен- тами, стоящими внутри квадратных скобок, могут быть как числа или буквы, так и целые вектора и даже матрицы.
Созданная описанным образом строковая переменная s используется впослед- ствии в операторе
title в качестве аргумента, в результате чего у каждого подри- сунка появляется свой заголовок.
Новым в приведенной программе является также оператор цикла
for...end и оператор
subplot(m,n,k), который позволяет на одном рисунке создать матри- цу из mxn отдельных рисунков, причем параметр k определяет номер рисунка по
11

−2
−1 0
1 2
−1
−0.5 0
0.5 1
w1/w2=1.25
−2
−1 0
1 2
−1
−0.5 0
0.5 1
w1/w2=1.5
−2
−1 0
1 2
−1
−0.5 0
0.5 1
w1/w2=1.75
−2
−1 0
1 2
−1
−0.5 0
0.5 1
w1/w2=2
Рис. 3. Одновременный вывод 4 фигур Лиссажу.
порядку слева направо и сверху вниз. Результат использования программы пока- зан на рис.
3
. Заметим, что в исходном тексте программы представлены фигуры
Лиссажу не самого общего вида.
Задание 2.
Включите начальные фазы ϕ
1
и ϕ
2
в аргументы косинусов, т.е.
cos(ω
1
t
)
замените на cos(ω
1
t
+ ϕ
1
) и cos(ω
2
t
) на cos(ω
2
t
+ ϕ
2
).
Задание 3.
Еще одна модификация программы – замена процедуры
plot на процедуру
comet – позволит изображать «бегущий» участок кривой (см.
Дополнение, п.
8.1
) и анализировать, сколько раз точка пробегает кривую при изменении времени t в заданном интервале.
2.2.
Биения
Вторая программа для первого занятия изображает кривую
y
(t) = a
1
cos ω
1
t
+ a
2
cos ω
2
t.
12

Несмотря на простоту формулировки, эта задача очень содержательна. В процессе исполнения программы Beats на экран выводится участок кривой y
(t) для интер- валов времени t от t
0
до t
m
. Исходный текст программы:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Учебная программа расчета биений
%
% Это вариант с выводом полной кривой биений
%
% и перемещением по ней с помощью команды AXIS
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
a1=1.0;
% Амплитуды гармонических
a2=1.0;
%
колебаний
w1=1.0;
% Частоты гармонических
w2=1.2;
%
колебаний
t0=0;
% Начальный момент времени
tm=20;
% Конечный момент времени
N=600;
% Число точек вывода/расчета
T=tm-t0;
% Время вывода биений
dt=T/N;
% Шаг по времени
t=t0:dt:tm;
% Вектор времени
y=a1*cos(w1*t)+a2*cos(w2*t);
% Функция биений
plot(t,y);
% Вывод графика
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
После вывода результата расчета на экран можно изменить масштаб осей с повторным выводом соответствующего участка кривой. Так, в приведенном выше примере переменная t на графике будет изменяться от 0 до 20. Если мы хотим рас- смотреть подробности графика в другом диапазоне (например, по t от 1 до 2), то необходимо ввести в командном окне команду
axis([xmin xmax ymin ymax]),
где
xmin xmax -диапазон вывода по оси x, а ymin ymax -диапазон выво- да по оси
y. В результате выполнения этого оператора график будет перестроен в указанном масштабе
4
Задание 1.
Частота биений при сложении двух гармонических колебаний равна разности их частот. Повторится ли через период биений после наибольшего максимума в одном всплеске биений наибольший максимум в следующем?
4
Следует иметь в виду, что построение нового графика идет на основе все тех же насчитан-
ных массивов
t и y, поэтому если в выбранный диапазон попадет мало точек, то и качество
графика будет невысокое.
13

Задание 2.
Будет ли синусоидой «огибающая максимумов» при неравных друг другу амплитудах складываемых колебаний?
Задание 3.
Другого вида биения можно наблюдать при ω
1
 ω
2
. Для того что- бы увидеть, как действительно выглядят колебания в этом случае, желательно увеличить время вывода биений (т.е. диапазон изменения переменной t) при- мерно в 10-20 раз.
2.3.
Графический интерфейс в задаче «Биения»
Для решения многих учебных и научных задач очень часто бывает удобно не менять
(даже так удобно, как в MATLAB) данные внутри программы с последующим ее запуском, а менять каким-либо образом исходные данные, не прекращая при этом наблюдать за тем, как изменяется график соответствующего решения. Для реали- зации такого способа взаимодействия с программой (интерактивного интерфей-
са) удобно иметь на экране одновременно окно вывода графической информации,
«кнопки управления» и окошки «редактирования» данных (рис.
4
)
5
При выполнении задачи о биениях вы получаете готовое решение, в котором уже создано окно интерфейса (функция Interface_Window) и частично решение задач организации связи с вычислительной программой. При этом две функции
(Drive_Beats и Run_Problem) при выполнении заданий вам придется видоизме- нять.
При запуске задачи мы будем вызывать программу Drive_Beats, а из нее бу- дут вызываться остальные функции. В этой программе определяются начальные значения параметров (амплитуд, частот и т.п.). Они будут далее передаваться в функцию, содержащую основной, расчетный алгоритм задачи – Run_Problem.
Параметры, которые не меняются в процессе исследования, можно передавать из этой программы с помощью глобальных переменных (а можно просто задать их в
Run_Problem). Те же параметры, которые необходимо менять при исследовании режимов расчета («редактируемые» переменные), передаются специальным обра- зом, описанным далее.
Для исходного варианта задачи «Биения» передаваемыми параметрами явля- ются: амплитуды a
1
, a
2
, частоты ω
1
и ω
2
, начальный момент времени вывода t
1
и конечный момент вывода t
2 5
Для разработки такого интерфейса в MATLABимеется специальный пакет, который на-
зывается GUI – Graphics User Interface (графический интерфейс пользователя). О работе с
этим пакетом рассказывается в Дополнении (п.
9
).
При выполнении данной задачи обращаться к нему не потребуется.
14

Рис. 4. Вид экрана при использовании разработанного графического интерфейса в задаче о биениях.
Рассмотрим примерную программу Drive_Beats
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Это процедура для запуска BEATS
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
% Первоначальная очистка рабочего пространства
% Задание начальных значений рабочих переменных
a1=1; a2=1; w1=1; w2=1.2; t1=0; t2=20; N=600;
% Переменную N объявляем глобальной
global N;
% Занесение начальных значений в транспортный массив
VALUE(1)=a1;
VALUE(2)=a2;
VALUE(3)=w1;
VALUE(4)=w2;
VALUE(5)=t1;
VALUE(6)=t2;
% Занесение имен передаваемых переменных
15

% в транспортный массив
NAME(1,:)=’
a1’;
NAME(2,:)=’
a2’;
NAME(3,:)=’
w1’;
NAME(4,:)=’
w2’;
NAME(5,:)=’
t1’;
NAME(6,:)=’
t2’;
% Вызов процедуры графического интерфейса и передача
% транспортных массивов
Interface_Window(VALUE, NAME, ’Run_Beats’)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
При разработке подобной программы для любой задачи необходимо иметь в виду:
1.
Имена массивов (в примере – это массивы VALUE и NAME) могут быть любыми;
2.
Размер (число строк) у массивов VALUE и NAME должны совпадать;
3.
При задании строк-имен в массиве NAME длина строк (включая пробелы)
должна быть одинаковой для всех переменных, желательно не более 8 симво- лов;
4.
Имя программы (m-файла), которое стоит в обращении, может быть лю- бым – это имя основной, исполнительной программы. В нашем примере –
это Run_Beats
Программа Drive_Beats вызывает функцию Interface_Window – основную функцию графического интерфейса. Эта функция строит изображение окна ин- терфейса на экране и помещает значения параметров, заданных в вызвавшей ее программе (в данном случае – в Drive_Beats), в «буферный объект» по имени
’UserData’. Далее ее действия зависят от нажатия мыши на кнопках интерфейс- ного (графического) экрана или – при редактировании передаваемых данных – в специальных окнах редактирования.
Для редактирования (изменения) параметров задачи необходимо щелкнуть мы- шью в окошке численного значения данных, после чего эти численные значения можно изменять. Новые значения заносятся в буфер ’UserData’.
При нажатии кнопки Run запускается программа Run_Beats. При этом пара- метры она получает из ’UserData’. Графики, создаваемые программой Run_Beats,
16
строятся в графическом окне, созданном для этого программой Interface_Window.
При завершении построения графика или работы программы Run_Beats програм- ма Interface_Window проверяет, не было ли сигнала от мыши
6
, и если был, то переходит к соответствующим действиям.
При нажатии кнопки Exit программа завершает свою работу, а рисунок удаля- ется с экрана.
Run_Beats-функция, к которой происходит обращение, при нажатии кнопки
RUN. Как правило -это функция, содержащая основной алгоритм расчета зада- чи. Имя этой m-функции (совпадающее с именем файла) должно быть передано функции Interface_Window в качестве третьего параметра в виде текстовой стро- ки.
Рассмотрим примерную программу Run_Beats.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Функция, выполняющая действия по нажатию кнопки RUN %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function r=Run_Beats()
% Задание параметров, не передающихся через меню,
% или их передача через механизм GLOBAL из головной
% программы
global N;
% Идентификация текущего графика и определение
% его дескриптора
h0=gcf;
% Извлечение совокупности передаваемых данных,
% хранящихся в UserData
info=get(h0,’Userdata’);
% Запись извлеченных данных в локальные переменные
a1=info.VALUE(1);
w2=info.VALUE(2);
w1=info.VALUE(3);
w2=info.VALUE(4);
t1=info.VALUE(5);
t2=info.VALUE(6);
% Подготовительные вычисления для реализации
6
По правде говоря, программа Interface_Window работает при этом совместно с другими,
но это не существенно для ее использования.
17

% основного алгоритма
tm=t2-t1;
% Время вывода биений
dt=tm/N;
% Шаг по времени
% Расчет биений
t=t1:dt:t2;
% Вектор времени
y=a1*cos(w1*t)+a2*cos(w2*t);
% Функция биений
% Организация графического вывода результатов
cla;
% Очистка области вывода
axis([t1 t2 -2 2]);
% Задание осей
hl=line(t,y);
% Вывод графика
set(hl,’color’,’b’);
% Задание цвета линии
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Заметим, что при исполнении программы Interface_Window в объект ’UserData’
был занесен массив VALUE с помощью записи info.VALUE, который и извле- кается в функции Run_Beats с помощью оператора info=get(gcf,’Userdata’).
Для работы интерактивного графического интерфейса необходимо включить в свою рабочую директорию (в которой вы разрабатываете свои программы) еще две заранее приготовленные функции Edit_Value.m и Exit_Problem.m.
Задание 4.
Изучите влияние второй и третьей гармоник на форму колебания.
Для этого удобно выбрать функцию y
(t) в форме
y
(t) = a
1
· cos(ωt) + a
2
· cos(2ωt + ϕ
2
) + a
3
· cos(3ωt + ϕ
3
)
и контролировать амплитуды a
2
, a
3
и фазы ϕ
2
, ϕ
3
2.4.
Волны
Речь может идти о самых разных волнах – волнах на поверхности воды, звуке,
радиоволнах и т.п. Если амплитуды волн не слишком велики, то для них справедлив принцип суперпозиции, что мы и будем предполагать.
Функция
y
(x, t) = a cos(kx − ωt)
задает бегущую волну с амплитудой a, волновым числом k и угловой частотой ω.
Длина волны λ
= 2π/k, а ее период T = 2π/ω. Скорость волны (скорость максимума, определяемого условием kx
− ωt = 0) равна v = x/t = ω/k.
Суперпозиция двух волн
y
(x, t) = a
1
cos(k
1
x
− ω
1
t
) + a
2
cos(k
2
x
− ω
2
t
)
(1)
18
в любой момент представляет картину биений в зависимости от x.
При a
2
= a
1
y
(x, t) = a(x, t) cos(kx − ωt),
где
a
(x, t) = 2a
1
cos(dk x − dω t),
k
=
1 2
(k
1
+ k
2
), ω =
1 2
(ω
1
+ ω
2
), dk =
1 2
(k
1
− k
2
), dω =
1 2
(ω
1
− ω
2
).
Функция
|a(x, t)| определяет модуляцию суммарной волны; она перемещается со скоростью u
= dω/dk, называемой групповой скоростью.
Программа
Wavepak изображает сумму волн, причем изображение на экране сменяется с определенным шагом по времени т.е. осуществляется анимация изоб- ражения. Прежде чем подробно анализировать приведенную далее программу вы- вода бегущей волны, сделаем несколько общих замечаний относительно графики в системе MATLAB. Подробнее с особенностями графики в системе MATLAB
можно познакомиться в Дополнении (п.
8
) и в [
1
,
2
,
3
,
5
].
2.4.1.
Основные графические объекты и их использование
Дело в том, что функции, реализующие те или иные действия по созданию гра- фических объектов, а также сами эти объекты (такие как линии, оси, надписи и т.д.) фактически являются объектами (подробнее см. Дополнение, п.
8.4
) в смысле объектно-ориентированного программирования. В то же самое время большинство из них можно использовать как обычные функции, ничего не зная об их особенной природе. При реализации же анимации приходится использовать эти особенности,
поэтому мы должны вкратце познакомиться с ними.
Существует иерархия объектов: рисунок (figure), оси координат (axes), ли- ния (line). Обычно старшие объекты называют «родителями», а младшие – их
«детьми». Существуют и другие объекты, но нам пока понадобятся только эти.
Всякий объект имеет дескриптор, которым он однозначно определяется
7
, и набор
свойств, таких как цвет, размер, способ вывода и т.д. Полный список свойств лю- бого объекта можно посмотреть с помощью системы помощи. Многие свойства, без которых объекты не могут существовать, имеют свои значения по умолчанию. По- этому можно вызывать объекты, не указывая никаких свойств, кроме обязатель- ных. Например, для функции
line обязательно указать два массива x и y – коор- динаты соединяемых точек. Для задания и/или изменения каких-либо свойств ис-
7
Лучше подошло бы отечественное слово
ярлык
, имеющее кроме смысла «метка» еще и
исторический смысл – «ярлык на управление», созвучный с английским handle.
19
пользуется функция
set(handle, ’PropertyName’, ’PropertyValue’, ...). Необ- ходимо только знать имя дескриптора соответствующего объекта
handle, имя со- ответствующего свойства
1   2   3   4   5   6   7   8   9   ...   17


написать администратору сайта