
Фазовый портрет позволяет визуализировать динамику системы дифференциальных уравнений, отображая траектории в пространстве состояний. В MATLAB для этого обычно используют функции ode45 для численного решения уравнений и plot или quiver для отображения векторов скорости.
Начальный шаг – определить систему уравнений в виде анонимной функции или отдельного файла. Например, для системы dx/dt = y, dy/dt = -x создается функция f = @(t, X) [X(2); -X(1)];. Затем задаются сетки начальных условий, чтобы получить полное представление о фазовом пространстве.
Для построения фазового портрета рекомендуется использовать цикл по начальным точкам и сохранять результаты решения через ode45. Для каждого решения строятся траектории с помощью plot(X(:,1), X(:,2)), а для отображения направлений потока удобно применять quiver с сеткой векторов, вычисленных как [dx, dy] = f(t, [x; y]).
Особое внимание стоит уделять масштабу сетки и шагу интегрирования. Малый шаг ode45 увеличивает точность, но замедляет расчет. Для систем с сильными нелинейностями полезно предварительно оценить устойчивость точек равновесия и использовать axis equal для корректного отображения фазовых траекторий.
Подготовка системы дифференциальных уравнений для построения фазового портрета

Перед построением фазового портрета в MATLAB необходимо преобразовать систему дифференциальных уравнений в стандартную форму для численного решения. Для систем второго порядка следует перейти к эквивалентной системе первого порядка, вводя новые переменные: если задано уравнение y» = f(y, y’), вводим v = y’ и получаем систему y’ = v, v’ = f(y, v).
Все уравнения должны быть представлены в виде функции, принимающей два аргумента: вектор состояния t и вектор переменных Y. Например, для системы x’ = y, y’ = -x + x^2 функция должна возвращать вектор производных [Y(2); -Y(1) + Y(1)^2]. Это обеспечит корректную работу MATLAB-функций ode45 и ode23.
Рекомендуется проверить линейность и потенциальные стационарные точки системы. Стационарные точки определяются решением уравнения f(Y) = 0. Их нахождение заранее позволит строить фазовый портрет с отображением точек равновесия и определить область интегрирования, чтобы траектории не уходили в бесконечность.
Следует заранее выбрать диапазон значений переменных для построения портрета. Для систем с устойчивыми и неустойчивыми точками равновесия рекомендуется сетка начальных условий по двум направлениям с шагом, обеспечивающим видимость динамики без избыточной плотности траекторий. Например, шаг 0.2–0.5 подходит для большинства двухмерных систем.
Для более точного построения фазового портрета необходимо масштабировать переменные и проверять скорость изменения. В MATLAB можно использовать функцию quiver для отображения векторного поля, и функция ode45 для построения траекторий из выбранных начальных условий. Это обеспечит корректное представление направлений движения в фазовом пространстве и позволит выявить особенности динамики.
Создание функции MATLAB для вычисления производных системы
Для построения фазового портрета необходимо сначала определить функцию, вычисляющую правые части системы дифференциальных уравнений. В MATLAB это реализуется через создание отдельного файла с расширением .m. Имя файла должно совпадать с именем функции.
Функция принимает два входных аргумента: вектор состояния y и текущее время t. Возвращаемое значение – вектор производных dydt, соответствующий каждому уравнению системы. Пример структуры функции:
function dydt = system_derivatives(t, y)
Внутри функции задаются параметры системы, если они не передаются извне, и определяется каждая производная отдельно. Для двухмерной системы с переменными x и y это может выглядеть так:
x = y(1); y_var = y(2);
dxdt = a*x - b*x*y_var;
dydt_var = -c*y_var + d*x*y_var;
После вычисления всех производных формируется выходной вектор:
dydt = [dxdt; dydt_var];
Файл сохраняется в рабочей директории MATLAB, после чего его можно использовать с функциями интегрирования, такими как ode45 или ode23. Строго соблюдайте порядок переменных в векторе состояния и векторе производных, чтобы фазовый портрет корректно отображал траектории системы.
Использование ode45 для численного решения системы уравнений
Функция ode45 в MATLAB применяется для численного решения систем обыкновенных дифференциальных уравнений (ОДУ) вида dx/dt = f(t,x). Она реализует метод Рунге–Кутты четвертого-пятого порядка с адаптивным шагом, обеспечивая баланс между точностью и вычислительной нагрузкой.
Пример базовой структуры вызова:
[T,X] = ode45(@f,[t0 tf],x0);
@f– функция, возвращающая производные в видеdx/dt. Может быть анонимной или отдельным файломfunction dxdt = f(t,x).[t0 tf]– интервал интегрирования, гдеt0начальное,tfконечное время.x0– вектор начальных условий для всех переменных системы.T– вектор времени,X– матрица решения, каждая колонка соответствует переменной системы.
Пример решения системы двух уравнений:
f = @(t,x) [x(2); -x(1)]; % dx1/dt = x2, dx2/dt = -x1
[t,X] = ode45(f,[0 10],[1 0]);
plot(X(:,1), X(:,2))
xlabel('x_1'); ylabel('x_2');
Рекомендации для точного построения фазового портрета:
- Использовать плотную сетку времени, если требуется плавный график:
tspan = linspace(0,10,1000); - Проверять размер шага через параметры
odeset('RelTol',1e-6,'AbsTol',1e-8)для систем с быстро меняющимися динамиками. - Для систем с несколькими устойчивыми точками запускать
ode45с разными начальными условиями и объединять траектории на одном графике. - Следить за ростом решений: при экспоненциальном разрастании
ode45может потребоваться замена наode15sдля жестких систем.
Важная особенность: ode45 не требует ручного выбора шага. Тем не менее, для фазового портрета рекомендуется контролировать плотность точек и точность интеграции, чтобы траектории не выглядели разрывными.
Построение траекторий фазового портрета с помощью plot

Для построения фазового портрета системы в MATLAB используется функция plot, которая позволяет визуализировать траектории на плоскости фазовых переменных. Основной подход заключается в численном интегрировании системы дифференциальных уравнений с использованием ode45 или других методов решения ODE.
Пример: система Лотки–Вольтерры:
dx/dt = α*x — β*x*y, dy/dt = δ*x*y — γ*y
Сначала задаются параметры и начальные условия:
α = 1.2; β = 0.6; δ = 0.8; γ = 1;
y0 = [10 5]; % начальные значения для x и y
Определяем функцию для ode45:
f = @(t,y) [α*y(1) — β*y(1)*y(2); δ*y(1)*y(2) — γ*y(2)];
Задаем временной интервал:
tspan = [0 20];
Вычисляем траекторию:
[T,Y] = ode45(f, tspan, y0);
Строим фазовый портрет:
plot(Y(:,1), Y(:,2), ‘LineWidth’, 2);
xlabel(‘x’); ylabel(‘y’); grid on;
Для анализа нескольких начальных условий используйте цикл:
initial_conditions = [5 2; 10 5; 15 10];
hold on;
for i = 1:size(initial_conditions,1)
[T,Y] = ode45(f, tspan, initial_conditions(i,:));
plot(Y(:,1), Y(:,2), ‘LineWidth’, 2);
end
hold off;
Рекомендации: выбирайте шаг интегрирования и временной интервал, достаточные для визуализации устойчивых и предельных траекторий. Используйте разные цвета и маркеры для сравнения поведения системы при различных начальных условиях.
Для улучшения наглядности фазового портрета добавляйте точки равновесия, вычисленные аналитически или численно, с помощью plot с маркерами.
Настройка сетки начальных условий для анализа поведения системы

Для построения точного фазового портрета необходимо определить сетку начальных условий, охватывающую интересующую область фазового пространства. В MATLAB это делается через функции meshgrid и ndgrid. Например, для двухмерной системы с координатами x и y можно задать сетку так:
[X, Y] = meshgrid(linspace(-5, 5, 21), linspace(-5, 5, 21));
Здесь linspace(-5, 5, 21) создает 21 точку от -5 до 5, обеспечивая равномерное распределение. Количество точек выбирается исходя из необходимой точности и вычислительной нагрузки: 10–20 точек по каждой оси подходят для предварительного анализа, 50 и более – для детализированных исследований.
Для систем размерности выше двух используется ndgrid, например:
[X, Y, Z] = ndgrid(linspace(-2, 2, 11), linspace(-3, 3, 11), linspace(-1, 1, 11));
Важно учитывать границы фазового пространства, которые определяют динамику системы. Расширение сетки за пределы интересующих значений приводит к лишним вычислениям и потенциально к нерелевантным траекториям.
Для анализа устойчивости фиксированных точек рекомендуется размещать сетку с увеличенной плотностью вблизи этих точек. Например, если известна неподвижная точка в (1, -1), можно задать локальную сетку:
[X, Y] = meshgrid(linspace(0.8, 1.2, 11), linspace(-1.2, -0.8, 11));
После создания сетки начальных условий для каждой точки решается система уравнений с помощью ode45 или аналогичных методов. Это обеспечивает полное покрытие динамических сценариев и позволяет выявить устойчивые и неустойчивые траектории, а также границы областей притяжения.
Добавление стрелок направления движения на фазовом портрете

Для визуализации направления движения траекторий на фазовом портрете в MATLAB используют функции quiver или streamline. Они позволяют добавить стрелки вдоль кривых решения системы.
Пошаговая инструкция:
- Создайте сетку координат с помощью
meshgridдля областей x и y, где строится фазовый портрет:[X, Y] = meshgrid(-5:0.5:5, -5:0.5:5); - Вычислите компоненты векторного поля системы для каждой точки сетки. Например, для системы
dx/dt = y,dy/dt = -x:U = Y; V = -X; - Используйте
quiverдля отображения стрелок:quiver(X, Y, U, V, 'AutoScale', 'on', 'Color', 'b');'AutoScale','on'автоматически подбирает длину стрелок.'Color','b'задаёт синий цвет стрелок.
- Для более гладкой визуализации можно использовать
streamsliceилиstreamline:startX = -5:1:5; startY = -5:1:5; streamline(X, Y, U, V, startX, startY);- Стартовые точки задают положение начала каждой линии тока.
- Стрелки автоматически показывают направление движения.
- Чтобы визуализировать фазовый портрет полностью, комбинируйте
plotтраекторий сquiverилиstreamlineдля направления движения.
Рекомендации:
- Сетка не должна быть слишком густой – это делает стрелки нечитаемыми.
- Для систем с быстро меняющейся скоростью используйте
'AutoScaleFactor'для контроля длины стрелок. - Комбинируйте разные цвета для траекторий и стрелок для лучшей наглядности.
- Для нелинейных систем стрелки полезны на критических участках, где векторы сильно меняются.
Визуализация устойчивых и неустойчивых точек равновесия

Для построения фазового портрета с выделением устойчивых и неустойчивых точек равновесия в MATLAB необходимо определить стационарные точки системы, решив уравнения \(\dot{x}=0, \dot{y}=0\). После нахождения точек равновесия следует вычислить якобиан в каждой из них:
J = [diff(f,x), diff(f,y); diff(g,x), diff(g,y)];
Его собственные значения определяют тип точки: если все действительные части отрицательны – точка устойчивая, если хотя бы одна положительна – неустойчивая. Для визуализации можно использовать функцию plot и различные маркеры:
| Тип точки | Маркер MATLAB | Цвет |
|---|---|---|
| Устойчивая | ‘o’ | зеленый |
| Неустойчивая | ‘x’ | красный |
Пример кода для отображения точек равновесия:
hold on
plot(x_eq, y_eq, 'o', 'MarkerSize',8, 'MarkerEdgeColor','g') % устойчивые
plot(x_ueq, y_ueq, 'x', 'MarkerSize',8, 'MarkerEdgeColor','r') % неустойчивые
hold off
Для уточнения визуализации рекомендуется добавлять стрелки направления потока с помощью quiver, что позволяет наглядно увидеть, куда стремятся траектории относительно точек равновесия.
Если система нелинейная, можно дополнительно строить линейные приближения вокруг каждой точки, используя собственные векторы якобиана, чтобы очертить локальные траектории и уточнить устойчивость.
Сохранение и экспорт готового фазового портрета из MATLAB

Для сохранения фазового портрета в MATLAB используется функция saveas или exportgraphics. Например, если фигура построена командой figure(1), то ее можно сохранить в формате PNG следующей командой:
saveas(figure(1), 'phase_portrait.png')
Для более точного контроля качества и разрешения рекомендуется использовать exportgraphics:
exportgraphics(gca, 'phase_portrait.pdf', 'ContentType', 'vector', 'Resolution', 300)
Опция ‘ContentType’,’vector’ сохраняет график в векторном формате, что идеально для публикаций и печати. Для растрового формата достаточно заменить на ‘ContentType’,’image’. Параметр ‘Resolution’ указывает DPI; стандартная рекомендация для публикаций – 300–600 DPI.
Если требуется экспортировать несколько фазовых портретов в цикле, лучше использовать сохранение через переменную фигуры:
f = figure;
plot(x, y);
exportgraphics(f, sprintf('phase_portrait_%d.png', i));
Для быстрого экспорта в PowerPoint или Word можно использовать прямой копипаст через буфер MATLAB, выбрав Edit → Copy Figure и вставив в документ с сохранением исходного разрешения.
При сохранении в PDF или SVG сохраняется возможность масштабирования без потери качества, а PNG и JPEG подходят для веб-использования. Для максимальной совместимости с другими инструментами рекомендуется сохранять как PDF + PNG, чтобы иметь векторную версию для печати и растровую для просмотра.
Вопрос-ответ:
Что такое фазовый портрет и зачем он нужен в MATLAB?
Фазовый портрет — это графическое представление траекторий динамической системы в пространстве состояний. В MATLAB его используют для визуализации поведения системы при разных начальных условиях. Это помогает понять стабильность равновесных точек, выявить предельные циклы и оценить, как система реагирует на изменения параметров.
Какие команды MATLAB применяются для построения фазового портрета?
Основные команды включают `ode45` или другие интеграторы для решения дифференциальных уравнений и `plot` для отображения траекторий. Для двумерных систем удобно использовать `quiver` или `streamline` для отображения векторного поля. Важно правильно задать сетку точек и диапазон значений, чтобы траектории на портрете были наглядными.
Как выбрать начальные условия для построения фазового портрета?
Начальные условия задаются исходя из интересующих областей состояния системы. Обычно выбирают несколько точек, равномерно распределённых по диапазону значений переменных. Это позволяет увидеть разнообразие траекторий и определить устойчивые и неустойчивые состояния. В MATLAB для генерации сетки можно использовать функции `meshgrid` или `linspace`.
Можно ли строить фазовый портрет для нелинейных систем и как это сделать?
Да, MATLAB позволяет строить фазовые портреты для нелинейных систем. Для этого нужно определить функции правой части системы и использовать численные методы интегрирования, например `ode45`. Важно учитывать, что нелинейные системы могут иметь сложные траектории, поэтому следует выбирать достаточное количество начальных условий и корректно масштабировать оси графика, чтобы увидеть все особенности поведения.
