Файл: М.А. Тынкевич Система Matlab Справочное пособие к курсу Численные методы анализа.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 01.06.2024
Просмотров: 112
Скачиваний: 0
34
получаем фазовый портрет системы, свидетельствующий о ее устойчивости – гармонии между активом и ценами (рис.8.7).
30 |
|
|
|
|
|
|
|
|
|
25 |
|
|
|
|
|
|
|
|
|
20 |
|
|
|
|
|
|
|
|
|
15 |
|
|
|
|
|
|
|
|
|
10 |
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
0 |
2 |
|
|
|
|
|
|
|
1.8 |
|
|
|
|
|
|
|
1.6 |
|
|
|
|
|
|
|
1.4 |
|
|
|
|
|
|
|
1.2 |
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
0.8 |
|
|
|
|
|
|
|
0.6 |
14 |
16 |
18 |
20 |
22 |
24 |
26 |
12 |
Рис.8.6 |
Рис.8.7 |
В качестве другого примера подобных задач рассмотрим известную задачу динамики популяций, где рассматривается модель взаимодействия “жертв” и “хищников”, в которой учитывается уменьшение численности представителей одной стороны с ростом численности другой. Модель была создана для биологических систем, но с определенными корректурами применима к конкуренции фирм, строительству финансовых пирамид, росту народонаселения, экологической проблематике и др.
Эта модель Вольтерра-Лотка с логистической поправкой описывается системой уравнений
dxdt1 = ( a −bx2 )x1 −αx12 dxdt2 = ( −c + dx1 )x2 −αx22
с условиями заданной численности “жертв” и “хищников” в начальный момент t=0.
Решая эту задачу при различных значениях α, получаем различные фазовые портреты (обычный колебательный процесс и постепенная гибель популяций) .
function f=VolterraLog(t,x) a=4;
b=2.5;
c=2;
d=1; alpha=0.1;
f(1)= (a-b*x(2))*x(1)-alpha*x(1)^2; f(2)= (-c+d*x(1))*x(2)-alpha*x(2)^2; f=f';
35
»opt=odeset('OutputSel',[1 2], 'OutputFcn', 'odephas2');
»[T,X]=ode45('VolterraLog', [0 10],[3 1],opt );
2.8 |
|
|
|
|
|
|
|
2.6 |
|
|
|
|
|
|
|
2.4 |
|
|
|
|
|
|
|
2.2 |
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
1.8 |
|
|
|
|
|
|
|
1.6 |
|
|
|
|
|
|
|
1.4 |
|
|
|
|
|
|
|
1.2 |
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
0.8 |
1 |
1.5 |
2 |
2.5 |
3 |
3.5 |
4 |
0.5 |
|||||||
|
|
Рис.8.8 |
(α=0) |
|
|
|
2 |
|
|
|
|
|
|
1.5 |
|
|
|
|
|
|
1 |
1.5 |
2 |
2.5 |
3 |
3.5 |
4 |
1 |
||||||
|
|
Рис.8.9 (α=0.1) |
|
Имеется возможность построения и трехмерного фазового |
|||||||||||
портрета с помощью функции odephas3. |
Например, решение за- |
||||||||||
дачи Эйлера свободного движения твердого тела: |
|
|
|||||||||
dxdt1 = x2 x3 , |
dxdt2 = −x1 x3 , |
dxdt3 |
= −0.51 x1x2 ; |
|
|
||||||
|
x1( 0 ) = x2 ( 0 ) = x3 ( 0 ) = 0 |
|
|
|
|
|
|
||||
выступает в виде: |
|
|
|
|
|
|
|
|
|
|
|
function f=Eiler(t,x) |
|
|
|
|
|
|
|
|
|
||
f(1)= |
x(2)*x(3); |
|
|
|
|
|
|
|
|
|
|
f(2)= |
-x(1)*x(3) ; |
|
|
|
|
|
|
|
|
|
|
f(3)= |
-0.51*x(1)*x(2) ; |
|
|
|
|
|
|
|
|
||
f=f'; |
|
|
|
|
|
|
|
|
|
|
|
» opt=odeset('OutputSel',[1 2 3], 'OutputFcn', 'odephas3'); |
|||||||||||
» [T,X]=ode45('Eiler', [0 |
7.25], [0 |
|
0 1], opt ); % рис.8.10 |
||||||||
» [T,X]=ode45('Eiler', [0:0.25:7.25],[0 1 1]); |
|
|
|
||||||||
» plot(T,X) |
|
|
|
|
|
|
% рис.8.11 |
||||
|
|
|
1 |
|
|
|
|
|
|
|
|
1 |
|
|
0.8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.95 |
|
|
0.6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9 |
|
|
0.4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.85 |
|
|
0.2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.8 |
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.75 |
|
|
-0.2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.7 |
|
|
-0.4 |
|
|
|
|
|
|
|
|
1 |
|
|
-0.6 |
|
|
|
|
|
|
|
|
0.5 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
0 |
|
0.5 |
-0.8 |
|
|
|
|
|
|
|
|
-0.5 |
|
0 |
|
|
|
|
|
|
|
|
|
|
-0.5 |
-1 |
|
|
|
|
|
|
|
|
|
|
-1 -1 |
|
|
|
|
|
|
|
|
||
|
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
|
|
Pис.8.10 |
|
|
Pис.8.11 |
|
|
|
|
36
9. Элементарная графика
Здесь мы рассмотрим лишь небольшую часть графических команд высокого уровня, не затрагивая их базу - графические объекты (Axes, Line, Patch, Surface, Text).
9.1. Двумерная графика
Графика в линейном масштабе
plot (y) - построение графика одномерного массива в зависимости от номера элемента (для двумерного массива строятся графики для столбцов); plot (x,y) - построение графика функции y=y(x) ; при двумерном х строятся графики х=х(у); если оба массива двумерные, строятся зависимо-
сти для соответствующих столбцов;
plot (x,y, LineSpec) – заданием строки LineSpec (до 3 символов) определяет стиль линий , форму маркера точек и цвет линий и маркера:
Символ стиля линии |
Цвет |
|
Цвет |
|
|
Непрерывная |
- |
Желтый |
y |
Зеленый |
g |
Штриховая |
-- |
Фиолетовый |
m |
Синий |
b |
Двойной пунктир |
: |
Голубой |
c |
Белый |
w |
Штрихпунктирная -. |
Красный |
r |
Черный |
k |
Маркер может определяться символами :
. + * ° × s (квадрат) d (ромб) р (пятиугольник) h(шестиугольник) v ^ < > (стрелки)
По умолчанию выбирается непрерывная линия с точечным маркером и чередованием цветов с желтого по синий.
plot (x1,y1, LineSpec1, x1,y1, LineSpec2,...) – строит на одном графи-
ке несколько линий (диапазон по аргументу - объединение х1 и х2;
plot (...,’PropertyName’,PropertyValue,...) –задает значения свойств графического объекта Line (толщину линий LineWidth, размер маркера
MarcerSize, цвет маркера MarcerFaceColor и и др.) .
» x=0:0.3:6; |
|
» y=besselj(0,x); |
% функция J0(x) |
» x1=0:0.4:8; |
|
» y1=besselj(1,x1); |
% функция J1(x) |
» plot(x,y,'-sk', x1,y1,'-pk','LineWidth',1 ) |
% рис.9.1 |
Построение графиков функций |
|
fplot( <имя функции>,limits) строит график функции (функций) в интервале limits=[xmin,xmax]. В качестве имени функции может использо-
ваться М-файл или строка типа ‘sin(x)’, ‘[sin(x) cos(x) ]’, ‘[sin(x), myfun1(x), myfun2(x)]’. Можно установить размеры графика по оси значений функ-
37
ции limits=[xmin,xmax ymin ymax].
fplot( <имя функции>,limits, eps) строит график c относительной погрешностью ерs (по умолчанию 0.002) и максимальное число шагов (1/eps)+1. Эту конструкцию можно дополнить четвертым параметром n (n+1 – минимальное число точек) и параметром LineSpec:
» fplot( '[besselj(0,x) besselj(1,x) 0]',[0 10],[],20) & рис.9.2 ezplot('f(x)') строит график f(x), заданной символьным выражением
(например, ezplot('x^2-2*x+1') ), на интервале [-2π 2π] с выводом выражения в качестве заголовка графика.
ezplot('f(x)', limits) и ezplot('f(x)', limits, fig) строят график f(x) на указанном интервале и в заданном окне.
1 |
|
|
|
|
|
|
|
|
0.5 |
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
-0.5 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
0 |
1 |
|
|
|
|
|
|
|
|
|
|
0.5 |
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
-0.5 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
0 |
Рис.9.1 |
Рис.9.2 |
График в полярных |
координатах определяется функциями |
polar(f,r) и polar(f,r, LineSpec), где f – массив значений угла и r – соответ-
ствующие значения радиуса : x=r cos(ϕ), |
y=r sin(ϕ): |
|
|
|||
» f=0:0.01:2*pi; |
|
» f=0:0.01:12*pi; |
|
|||
» r=sin(2.*f).*cos(2.*f); |
» r=exp(-0.1*f); |
|
|
|||
» hp=polar(f,r),hold on |
» hp=polar(f,r) ,hold on |
|||||
» set(hp,'LineWidth',4) % рис.9.3 |
» set(hp,'LineWidth',2) % рис.9.4 |
|||||
|
90 |
0.5 |
|
90 |
|
|
|
120 |
60 |
1 |
|
||
|
|
|
||||
|
|
120 |
60 |
|||
|
|
0.375 |
|
|
||
|
|
|
|
0.8 |
|
|
|
|
|
|
|
|
|
150 |
|
0.25 |
30 |
150 |
0.6 |
30 |
|
|
|
|
0.4 |
||
|
|
0.125 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.2 |
|
180 |
|
|
0 |
180 |
|
0 |
|
|
|
|
|
||
210 |
|
|
330 |
210 |
|
330 |
|
|
|
|
|
||
|
240 |
|
300 |
240 |
|
300 |
|
270 |
|
|
270 |
|
|
Рис.9.3 |
Рис.9.4 |
38
График в логарифмическом масштабе задается функцией loglog c
тем же набором параметров, что и plot, с той лишь разницей, что проводится масштабирование десятичным логарифмированием по обеим координатам.
График в полулогарифмическом масштабе задается функциями semilogx и semilogy c тем же набором параметров, что и plot (проводится масштабирование логарифмированием по одной из координат).
График с двумя осями ординат (одна отображается слева, другая справа) реализуется функцией plotyy(x1,y1,x2,y2) и той же функцией с добавлением параметров масштабирования ‘f1’ или ‘f1’,’f2’, в роли которых могут выступать plot, semilogx, semilogx, loglog:
»x=0:0.01:12*pi;
»plotyy(x,sin(x).*exp(-0.1.*x),x, 10*exp(-0.1.*x)) % Рис.9.5
1 |
|
|
|
|
|
|
|
1 0 |
0 |
|
|
|
|
|
|
|
5 |
- 1 |
5 |
1 0 |
1 5 |
2 0 |
2 5 |
3 0 |
3 5 |
0 |
0 |
4 0 |
|||||||
|
|
|
|
Рис.9.5 |
|
|
|
|
9.2.Трехмерная графика
Втрехмерной графике выполняются представления функции z=z(x,y), отличающиеся способом соединения точек: линия, сечения, сетчатая или сплошная поверхность.
plot3(x,y,z) в тех же вариациях, что и plot, предполагает задание одномерных и двумерных массивов (строятся точки с координатами x(i,:),y(i,:),z(i,:) для каждого столбца и соединяются прямыми линиями. Если используется [x,y]=meshgrid(...), то строятся сечения.
» t=0:pi/50:10*pi; |
» [x,y]=meshgrid([-2:0.1:2],[-2:0.01:2]); |
|
» plot3(sin(t),cos(t),t) %Рис.9.6 |
» z=exp(-x.^2-y.^2); |
|
|
» plot3(x,y,z) |
%Рис.9.7 |