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

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


Скачать 1.13 Mb.
НазваниеФизических процессов с использованием
АнкорПрактикум по матлабу
Дата21.06.2021
Размер1.13 Mb.
Формат файлаpdf
Имя файлапрактикум по матлабу.pdf
ТипУчебное пособие
#219898
страница9 из 17
1   ...   5   6   7   8   9   10   11   12   ...   17
Фокусировка пучков частиц
6.
Пучок частиц, летевших параллельно оси X, фокусируется в поле U
(x, r).
Изобразите движение группы частиц, стартовавших с большого расстояния с разными прицельными параметрами одновременно:
а) U
=
Ay
2
r
2
+B
2
,
б) U
=
Ay
2
(r
2
+B
2
)
2 7.
Пучку частиц, фокусируемых в поле, можно сопоставить картину фокуси- ровки волн в неоднородной среде. Можно показать (но мы не будем этого делать), что длина волны должна быть обратно пропорциональна скорости частицы. Иначе говоря, фронт волны должен смещаться в направлении Ev, но на расстояние
Er ∼ Evt/v
2
.
Получите картину волновых поверхностей, соответствующих фокусировке пуч- ка в полях, заданных в задаче 9.
8.
Пучок частиц летит параллельно оси X и рассеивается в поле
U
(r) = −α/

r
2
+ a
2
.
Определить распределение рассеянных частиц по углам. Считать, что пада- ющий поток частиц равномерно распределен по площади своего поперечного сечения.
9.
Движение частиц в стоячей волне на поверхности жидкости
x
= x
0
+ ae
kz
0
cos kx
0
cos ωt, z = z
0
+ ae
kz
0
sin kx
0
cos ωt.
Получите картину движения частиц. Дуги траекторий, прорисованные части- цами за время τ
 1, дадут представление о линиях тока жидкости.
Концентрация частиц
10.
Рассматривается диффузия (случайные блуждания) частиц в поле U
=
k
2
(x
2
+
y
2
+ z
2
). Определите наблюдаемую концентрацию частиц в зависимости от
r
=

x
2
+ y
2
+ z
2 81

B.
Приближенные методы решения систем
дифференциальных уравнений
B.1.
Примеры численного решения дифференциальных уравнений
Во многих случаях бывает нужно исследовать так называемые динамические си-
стемы – системы, движение которых определяется дифференциальными уравне- ниями. Рассмотрим простой пример – движение частицы в поле сил, причем огра- ничимся движением вдоль одной прямой. Координата частицы x и ее скорость v
определяются уравнениями
dx
dt
= v,
dv
dt
= a(x),
где a
(x) = F (x)/m, F (x) – действующая на частицу сила, m – масса частицы.
Задача состоит в вычислении зависимостей x
(t), v(t) при условии, что заданы начальные значения координаты и скорости значения x
(0) и v(0).
Вид этих уравнений представляет собой очевидный намек на возможный способ вычислений: выбрать достаточно малое конечное значение величины dt, а затем воспользоваться соотношениями
x
(t + dt) ≈ x(t) +
dx
dt
dt
= x(t) + v(t)dt,
v
(t + dt) ≈ v(t) +
dv
dt
dt
= v(t) + a(t)dt.
Многократно применяя эти соотношения, можно рассчитать значения x и v в ряде дискретных, но достаточно близких друг к другу точек. Чтобы оценить величину отклонения от истинного закона движения, запишем, например для x, более точное равенство
x
(t + dt) ≈ x(t) +
dx
dt
dt
+
1 2
d
2
x
dt
2
(dt)
2
= x(t) + v(t)dt +
1 2
a
(t)(dt)
2
.
()
Из него видно, что неточность на каждом шаге пропорциональна
(dt)
2
; для про- движения на время t необходимо число шагов, равное t/dt, так что неточность окажется пропорциональна t
· dt. Если необходимо (при заданном интервале t)
улучшить точность в 10 раз, то нужно в 10 раз уменьшить шаг dt. Во столько же раз вырастет число шагов и время, необходимое для расчета.
Смысл равенства
() состоит в учете ускорения на интервале dt. Можно до- биться примерно той же точности, что и в
(), если взять среднее значение скоро- сти на том же интервале или, что удобнее всего, значение скорости в середине ин- тервала, v
(t + dt/2). Ускорение же, необходимое для выполнения сдвига на шаг по
82
времени для скорости, нужно будет вычислять в середине интервала
(t + dt/2, t +
dt/
2 + dt), т.е. в момент t + dt, что нас тоже устраивает, так как это позволит найти x
(t + dt).
Таким образом, для увеличения точности достаточно вычислять значения коор- динат в моменты времени
t,
t
+ dt,
t
+ 2dt,
t
+ 3dt, ... ,
а значения скорости – в моменты
t
+ dt/2, t + 3dt/2, t + 5dt/2, t + 7dt/2, ... .
Для оценки неточности расчета запишем (вновь только для x)
x
(t + dt) ≈ x(t) + v(t + dt/2)dt ≈ x(t) +

v
(t) +
dv
dt
dt/
2

dt,
что совпадает с
(). Неточность имеет порядок (dt)
3
Очевидно, что такой способ расчетов применим и для векторных величин.
Однако этот прием не срабатывает, если сила, действующая на частицу, зависит не только от координат, но и от скорости.
B.2.
Численное решение обыкновенных дифференциальных уравнений в
системе MATLAB
Выработано много удобных и относительно экономных способов проводить подоб- ные вычисления. С ними вам предстоит познакомиться в курсе "Вычислительные методы". В системе MATLAB существует целый пакет процедур, предназначен- ных для решения систем обыкновенных дифференциальных уравнений, а если фор- мулировать еще более точно, то для решения задачи Коши для системы обыкно- венных дифференциальных уравнений (ОДУ). Причем этот пакет обеспечивает по вашему выбору разные алгоритмы решения такой задачи, но для экономии уси- лий и облегчения работы обращение и написание требуемого дополнительного кода одинаково и не зависит от алгоритма. Поэтому рассмотрим здесь метод подготов- ки M-файлов для решения таких систем независимо от используемого алгоритма решения.
Из приведеных выше примеров понятно, что большой класс ОДУ, а именно уравнения с одной независимой переменной, которую чаще всего именуют време- нем t, разрешенные относительно старшей производной могут быть сведены к си- стеме дифференциальных уравнений первого порядка вида
y

(t) = F(t, y(t))
83
с начальными условиями
y(t
0
) = y
0
.
Если правые части соответстующей системы достаточно гладки, то описанная система имеет единственное решение, которое может быть получено численно с помощью одного из алгоритмов, используемых в системе MATLAB.
B.3.
Подготовка M-файла для решения ОДУ(пример)
Рассмотрим пример подготовки M-файла для решения уравнения Ван-дер-Поля
37
y

− µ(1 − y
2
)y

+ y = 0, µ > 0 .
Сделав очевидные замены y
1
= y, y
2
= y

, можно переписать это уравнение в виде системы двух уравнений:
y

1
= y
2
y

2
= µ(1 (y
1
)
2
)y
2
− y
1
.
Для решения этой системы уравнений необходимо написать M-файл, который опи- сывал бы правую часть системы уравнений. Для нашего случая эта функция (µ
=
1, а y
1
и y
2
становятся элементами двумерного вектора y(1) и y(2)) должна вы- глядеть следующим образом:
function dy = vdp1(t,y)
dy = [y(2); (1-y(1)^2)*y(2)-y(1)];
Хотя в рассматриваемом случае правая часть системы не зависит явно от t, а для некоторых систем уравнений может не зависеть от
y, функция должна иметь не менее двух формальных параметров
t и y.
Для решения системы уравнений на временном интервале
[0 20] и с начальными значениями y
1
(0) = 2, y
2
(0) = 0 необходимо написать
[T, Y]= ode45(’vdp1’,[0 20],[2;0]);
В результате решения получим вектор-столбец
T, содержащий точки на заданном временном интервале, и матрицу
Y, каждая строка которой соответствует времени из
T. Для того чтобы увидеть результат решения, можно написать такую последо- вательность команд
37
Известное в литературе уравнение Ван-дер-Поля характеризуется тем, что в зависимости
от значения параметра µ оно имеет разную степень жесткости и в связи с этим часто исполь-
зуется для тестирования численных решений.
84



















J_r_gb_mjgbyJ_r_gb_
<
\
\
Рис. 15. Представление результатов решения уравнения Ван-дер-Поля для mu=1
на экране
% Вывод результатов решения
plot(T,Y(:,1),’-’,T,Y(:,2),’--’);
title(’Решение ур-ния Ван-дер-Поля для mu=1’);
xlabel(’Время T’);
ylabel(’Решение Y’);
legend(’y1’,’y2’);
В результате получим картинку, подобную рисунку
15
B.4.
Методы решения ОДУ
При решении тех или иных задач можно выбирать разные процедуры числен- ного решения ОДУ. Так, в приведенном выше примере использовалась функция
ode45. Для решения нежестких систем уравнений в MATLAB имеются следую- щие функции
ode45
базируется на явном методе Рунге-Кутта. Это одношаговый алгоритм - для вычисления y
(t
n
) необходимо знание решения в одной предыдущей точке
y
(t
n−1
). Эта функция наиболее удобна для первого, ‘пристрелочного’ реше- ния большинства задач.
85

ode23
тоже базируется на явном методе Рунге-Кутта, но меньшего порядка, по- этому бывает более подходящим для получения более грубого решения (с меньшей точностью) и при наличии небольшой жесткости. Также является одношаговым методом.
ode113
использует метод переменного порядка Адамса-Бэшфорта-Милтона. Он может оказаться более эффективным, чем метод
ode45, особенно при высо- ких точностях и при сложности вычисления правых частей уравнений. Метод многошаговый, поэтому для начала решения необходимо знание решения в нескольких начальных точках.
Для решения жестких систем уравнений в системе MATLAB предусмотрены
4 функции.
ode15s
базируется на методе численного дифференцирования назад, известного как метод Гира. Также, как и метод
ode113, этот метод является многоша- говым. Если вы считаете, что у вас жесткая задача или не смогли ее решить с помощью
ode45, попробуйте ode15s.
ode23s
использует метод Розенброка второго порядка. Поскольку это одношаго- вый метод, он может быть более эффективен, чем метод
ode15s, для случаев невысокой точности.
ode23t
является реализацией правила трапеций со свободным множителем. Этот метод имеет смысл использовать только если задача умеренно жесткая и нет нужды в численном демпфировании решения.
ode23tb
реализует двухстадийное решение по неявной формуле Рунге-Кутта. Как и метод
ode23s этот метод эффективен при невысокой требуемой точности решения.
B.5.
Общие правила вызова решателей ОДУ
Все перечисленные выше функции вызываются одинаковым образом. В простей- шем виде это выглядит следующим образом:
[T,Y] = odeXX(’F’,tspan,y0)
,
где
odeXX
-любая из функций, перечисленных выше;
86

’F’
-строка, содержащая имя файла с описанием правых частей системы;
tspan
-вектор, определяющий интервал интегрирования. Если вектор
tspan
= [t0 tfinal] имеет всего два элемента, то интегрирование идет от t0 до
tfinal. Если вектор tspan имеет более двух элементов, то функция odeXX
выдает решение во всех точках, которые перечислены в векторе
tspan, от- метим, что
t0 > tfinal допустимо;
y0
-вектор начальных условий задачи;
T
-вектор-столбец моментов времени;
Y
-матрица решений. Каждая строка матрицы содержит вектор решений (все
y(i)) для соответствующего момента времени.
В дополнение к простейшему варианту вызова решателя может использоваться бо- лее сложный синтаксис, который расширяет наши возможности по управлению ре- шением. Любая из функций
odeXX может содержать четвертый и последующие аргументы, т.е. обращение может выглядеть следующим образом:
[T,Y] = odeXX(’F’,tspan,y0,options,p1,p2,...)
Аргумент
options задается специальным образом с помощью функции зада- ния опций (см. в помощи
odeset Function). Больший интерес представляют до- полнительные параметры
p1,p2,.... Дело в том, что эти параметры передаются в функцию определения правых частей в виде
F(t,y,flag,p1,p2,...)
Подробнее способы описания правых частей системы и ряда дополнительных па- раметров приведены в следующем параграфе.
B.6.
Общие правила определения функции правых частей
При написании функции правых частей для каждой задачи необходимо руковод- ствоваться следующими правилами.
Функция описания правых частей должна содержать не менее двух входных аргументов
t и y, даже если какой-то из них не используется явно при вы- числении правых частей.
Правые части системы, которые вычисляются этой функцией F (t, y), долж- ны образовывать вектор-столбец.
87

Любые дополнительные параметры, которые необходимо передавать функ- ции F
(t, y), должны быть в конце списка параметров самой функции (после специального параметра
flag) и в списке аргументов вызова решателя там же.
Рассмотрим ранее описанный пример функции для системы Ван-дер-Поля. В при- веденном ранее примере предполагалось, что µ
= 1. Рассмотрим вариант с пере- дачей этого параметра явно.
function [out1,out2,out3] = vdpode(t,y,flag,mu)
if nargin < 4 | isempty(mu)
% Если нет 4-го параметра,
mu = 1;
% то mu=1
end
% Если нет 3-го параметра
if nargin < 3 | isempty(flag)
% вычисляем правые части dy/dt = F(t,y)
out1 = [y(2); mu*(1_y(1)^2)*y(2)_y(1)];
% Если аргумента 3 и flag=’init’
elseif strcmp(flag,’init’)
% Вывод [tspan,y0,options].
% Начальные условия включены в функцию vdpode
out1 = [0; 20];
% tspan
out2 = [2; 0];
% начальные условия
% дополнительные опции (точность)
out3 = odeset(’RelTol’,1e_4);
end
88

C.
Метод наименьших квадратов
С помощью метода наименьших квадратов находится прямая на плоскости XY(рис.
16
),
проходящая в определенном смысле наиболее близко к заданным N точкам с коор- динатами (x
i
, y
i
). Речь идет о такой прямой, чтобы сумма квадратов отклонений от нее по вертикали
y
i
принимала наименьшее значение.
Такая задача возникает, если мы хотим
Рис. 16. Аппроксимация данных ме- тодом наименьших квадратов аппроксимировать линейной функцией y
=
a
0
+ a
1
x экспериментально найденную за- висимость y
(x), причем точность определе- ния величин x была высокой, а величины y
находились приближенно. Минимум функ- ции F
=

i
(a
0
+ a
1
x
i
− y
i
)
2
определяет- ся условиями
∂F/∂a
0
= ∂F/∂a
1
= 0,
которые приводят к системе линейных уравнений
N a
0
+ a
1

x
i
=

y
i
,
a
0

x
i
+ a
1

x
2
i
=

x
i
y
i
.
Из этой системы уравнений находятся коэффициенты a
0
и a
1
, которые опреде- ляют искомую прямую.
Пусть данные (вектора x
i
и y
i
) представляют собой вектор-столбцы. Введя еще один вектор-столбец
od, совпадающий по длине с длиной x, состоящий из еди- ниц, можно записать вышеприведенную систему уравнений (точнее, вычисление ее коэффициентов) в виде
od = ones(size(x));
s(1,1) = od*(od’);
s(2,1) = od*(x’);
s(1,2) = s(2,1);
s(2,2) = x*(x’);
p = [od*(y’); x*(y’)];
Тогда саму систему уравнений можно записать в матричном виде
sa = p,
а решение ее в виде
a
= s
1
p .
89

Используя правила обращения матриц в MATLAB, это решение можно записать в виде
a = s
\ p;. Полученный вектор-столбец a и будет содержать требуемые коэффициенты.
Можно вычислить соответствующие коэффициенты и насчитать полученную
«теоретическую» прямую (в общем случае -кривую) с помощью функций
polyfit
и
polyval, например, следующим образом:
1   ...   5   6   7   8   9   10   11   12   ...   17


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