Двумерным будем считать такой график, в котором положение точки определяется двумя величинами. Двумерные графики наиболее часто строят в декартовой и полярной системах координат.
Декартова, или прямоугольная система координат задаётся двумя перпендикулярными прямыми, называемыми осями координат. Горизонтальная прямая $$X$$ — ось абсцисс, а вертикальная $$Y$$ — ось ординат. Точку пересечения осей называют началом координат. Четыре угла, образованные осями координат, носят название координатных углов. Положение точки в прямоугольной системе координат определяется значением двух величин, называемых координатами точки. Если точка имеет координаты $$x$$ и $$y$$, то $$x$$ — абсцисса точки, $$y$$ — ордината. Уравнение, связывающее координаты $$x$$ и $$y$$ является (называется) уравнением линии, если координаты любой точки этой линии удовлетворяют ему.
Величина y называется функцией переменной величины $$x$$, если каждому из тех значений, которые может принимать $$x$$, соответствует одно или несколько определённых значений $$y$$. При этом переменная величина $$x$$ называется аргументом функции $$y = f (x)$$. Говорят также, что величина $$y$$ зависит от величины $$x$$. Функция считается заданной, если для каждого значения аргумента существует соответствующее значение функции. Чаще всего используют следующие способы задания функций:
Совокупность всех значений, которые может принимать в условиях поставленной задачи аргумент $$x$$ функции $$y = f (x)$$, называется областью определения этой функции. Совокупность значений $$y$$, которые принимает функция $$f (x)$$, называется множеством значений функции.
Далее будем рассматривать построение графиков в прямоугольной системе координат на конкретных примерах.
Пример 4.1. Построить график функции $$y=\sin(x)+\frac{1}{3} \sin(3x)+\frac{1}{5}\sin(5x)$$ на интервале [-10; 10].
Для того, чтобы построить график функции $$f (x)$$ необходимо сформировать два массива $$x$$ и $$y$$ одинаковой размерности, а затем обратиться к функции $$plot$$.
Решение этой задачи представлено в листинге 4.1.
x = -10:0.1:10; % Формирование массива x. y=sin(x)+sin (3*x)/3+ sin (5*x )/5; % Формирование массива y. plot(x, y) % Построение графика функции.
В результате обращения к функции $$plot(x, y)$$ будет создано окно с именем Figure 1, в котором будет построен график функции $$y=\sin(x)+\frac{1}{3} \sin(3x)+\frac{1}{5}\sin(5x)$$.
График формируется путём соединения соседних точек прямыми линиями. Чем больше будет интервал между соседними точками (чем меньше будет точек), тем больше будет заметно, что график представляет из себя ломанную.
Если повторно обратиться к функции $$plot$$, то в этом же окне будет стёрт первый график и нарисован второй. Для построения нескольких графиков в одной системе координат можно поступить одним из следующих способов:
Рассмотрим построение нескольких графиков этими способами на примере решения следующей задачи.
На рис. 4.2. изображены графики функций: $$v = sin x, w = cos x, r = sin\frac{x}{2}, p =\frac{3}{2}cos x$$
(рис 4.2) Графики функций
Пример 4.2. Построить графики функций $$v=\sin x, w=\cos x, r=\sin \frac{x}{2}, p=\frac{3}{2} \cos x$$ на интервале $$[-4\pi; 4\pi]$$.
Построение графиков функций первым и вторым способом представлено в листинге 4.2. Получившиеся графики функций представлены на рис. 4.2.
% Способ первый x=-4*pi:0.1:4*pi; v=sin(x);w=cos(x); r=sin(x)/2; p=1.5*cos(x); plot(x, v, x, w, x, r, x, p); % Способ второй x=-4*pi:0.1:4*pi; v=sin(x); plot(x, v); hold on; v=cos(x); plot(x, v); v=sin(x)/2; plot(x, v); v=1.5*cos(x); plot(x, v);
Обратите внимание, что при построении графиков первым способом Octave> автоматически изменяет цвета изображаемых в одной системе координат графиков. Однако управлять цветом и видом каждого из изображаемых графиков может и пользователь, для чего необходимо воспользоваться полной формой функции $$plot: plot(x1, y 1, s1, x2, y 2, s2, . . ., xn, yn, sn)$$, где $$x1, x2, . . ., xn$$ — массивы абсцисс графиков; $$y1, y 2, . . ., yn$$ — массивы ординат графиков;
| Символ маркера | Изображение маркера |
| . | $$\cdot$$(точка) |
| * | * |
| $$\times$$ | $$\times$$ |
| + | + |
| $$\circ$$ | $$\odot$$ |
| s | $$\blacksquare$$ |
| d | $$\blacklozenge$$ |
| v | $$\blacktriangledown$$ |
| ^ | $$\blacktriangle$$ |
| < | $$\bigtriangledown$$ |
| > | $$\bigtriangleup$$ |
| p | $$\square$$ |
| h | $$\lozenge$$ |
| Символ | Цвет линии |
| y | жёлтый |
| m | розовый |
| c | голубой |
| r | красный |
| g | зелёный |
| d | синий |
| w | белый |
$$s1, s2, . . ., sn$$ — строка форматов, определяющая параметры линии и при необходимости, позволяющая вывести легенду.
В строке могут участвовать символы, отвечающие за тип линии, маркер, его размер, цвет линии и вывод легенды. Попробуем разобраться с этими символами. За сплошную линию отвечает символ "-". За маркеры отвечают следующие символы (см. табл. 4.1).
Цвет линии определяется буквой латинского алфавита (см. табл.4.2), можно использовать и цифры, но на взгляд авторов использование букв более логично (их легче запомнить по английским названиям цветов).
(рис 4.3) Результат работы функции plot(x = -pi:0.1:pi,sin(x)," -k; sin(x); ")
При определении строки, отвечающей за вывод линии, следует учитывать следующее:
Если необходима легенда для графика, то её следует включить в строку форматов, заключённую в символы ";". Например, команда $$plot(x = -pi : 0.1 : pi, sin(x), " -k; sin(x); ")$$ выведет на экран график функции $$y = sin(x)$$ чёрного цвета на интервале $$[-\pi; \pi]$$ c легендой $$"sin(x)"$$ (см. рис. 4.3)
Пользователь может управлять и величиной маркера, для этого после строки форматов следует указать имя параметра $$markersize$$ (размер маркера) и через запятую величину — целое число, определяющее размер маркера на графике. Например, команда $$plot(x = -pi : 0.1 : pi, sin(x), " -ok; sin(x); ", "markersize"$$, 4); выведет на экран график, представленный на рис. 4.4.
(рис 4.4) Результаты работы функции plot(x = -pi:0.1:pi, sin(x), " -ok; sin(x); ", "markersize", 4);
Для того, чтобы чтобы вывести график в новом окне, перед функцией plot, следует вызвать функцию $$figure()$$.
Внимание! При работе с графиками в Octave необходимо понимать следующее: щелчок по кнопке закрытия окна с графиками приводит не к уничтожению (закрытию) окна, а к его скрытию. При повторном вызове команды рисования графиков происходит восстановление окна, в котором и изображаются графики. Корректное закрытие графического окна можно осуществить в Octave только программно.
Графическое окно создаётся функцией $$figure : h =figure ()$$;
Здесь $$h$$ — переменная, в которой будет храниться дескриптор (номер) окна. Для дальнейших операций с окном надо будет использовать именно переменную, в которой хранится дескриптор.
Уничтожение (закрытие) окна осуществляется с помощью функции $$delete(h)$$, где $$h$$ — имя дескриптора закрываемого окна.
В Octave есть функция $$pause(n)$$, которая приостанавливает выполнение программы на $$n$$ секунд. Её логично вставлять перед функцией закрытия окна.
Octave представляет дополнительные возможности для оформления графиков:
При выводе текста с помощью функций $$xlabel, ylabel, title, text$$ можно выводить греческие
e^{cos(x)}, а для вывода $$x_{min}$$ — текст x_{min}. При работе с текстом можно также использовать синтаксис $$T_EX$$.
| Команда | Символ | Команда | Символ |
| \alpha | $$\alpha$$ | \upsilon | $$\upsilon$$ |
| \beta | $$\beta$$ | \phi | $$\phi$$ |
| \gamma | $$\gamma$$ | \chi | $$\chi$$ |
| \delta | $$\delta$$ | \psi | $$\psi$$ |
| \epsilon | $$\epsilon$$ | \omega | $$\omega$$ |
| \zeta | $$\zeta$$ | \Gamma | $$\Gamma$$ |
| \eta | $$\eta$$ | \Delta | $$\Delta$$ |
| \theta | $$\theta$$ | \Theta | $$\Theta$$ |
| \iota | $$\iota$$ | \Lambda | $$\Lambda$$ |
| \kappa | $$\kappa$$ | \Xi | $$\Xi$$ |
| \lambda | $$\lambda$$ | \Pi | $$\Pi$$ |
| \mu | $$\mu$$ | \Sigma | $$\Sigma$$ |
| \nu | $$\nu$$ | \Upsilon | $$\Upsilon$$ |
| \xi | $$\xi$$ | \Phi | $$\Phi$$ |
| \pi | $$\pi$$ | \Psi | $$\Psi$$ |
| \rho | $$\rho$$ | \Omega | $$\Omega$$ |
| \sigma | $$\sigma$$ | \forall | $$\forall$$ |
| \varsigma | $$\varsigma$$ | \exists | $$\exists$$ |
| \tau | $$\tau$$ | \approx | $$\approx$$ |
| \int | $$\int$$ | \in | $$\in$$ |
| \wedge | $$\wedge$$ | \sim | $$\sim$$ |
| \vee | $$\vee$$ | \leq | $$\leq$$ |
| \pm | $$\pm$$ | \leftrightarrow | $$\leftrightarrow$$ |
| \geq | $$\geq$$ | \leftarrow | $$\leftarrow$$ |
| \infty | $$\infty$$ | \uparrow | $$\uparrow$$ |
| \partial | $$\partial$$ | \rightarrow | $$\rightarrow$$ |
| \neq | $$\neq$$ | \downarrow | $$\downarrow$$ |
| \nabla | $$\nabla$$ | \circ | $$\circ$$ |
После описания основных возможностей по оформлению графиков рассмотрим ещё несколько примеров построения графиков.
Пример 4.3. Последовательно вывести в графическое окно графики функций $$y=\sin{x}, y=\sin(\frac{3x}{4}), y=\cos{x}, y=\cos\frac{x}{3}$$ с задержкой 5 секунд.
Текст решения задачи с комментариями приведён в листинге 4.3.
okno1=figure( ); % Создаём графическое окно c дескриптором okno1. x=-6*pi( ):pi( )/50:6*pi( ); % Определяем аргумент на интервале $$[-6\pi; 6\pi]$$ y=sin(x); % Вычисляем значение функции sin(x). plot(x, y, ’k’); % Выводим график функции sin(x) чёрного цвета. grid on; % Выводим линии сетки. title(’Plot y=sin(x)’ ); % Выводим заголовок графика. pause(5); % Приостанавливаем выполнение программы на 5 секунд. y=sin(0.75*x); plot(x, y, ’b’); % Выводим график функции sin(0.75x) голубого цвета. grid on; % Выводим линии сетки. title(’Plot y=sin(0.75x)’);% Выводим заголовок графика. pause(5); % Приостанавливаем выполнение программы на 5 секунд. y=cos(x); plot(x, y, ’r’); % Выводим график функции cos(x) красного цвета. grid on; % Выводим линии сетки. title(’Plot y=cos(x)’); % Выводим заголовок графика. pause(5); % Приостанавливаем выполнение программы на 5 секунд. y=cos(x /3); plot(x, y, ’g’); % Выводим график функции cos(x/3) зелёного цвета. grid on; % Выводим линии сетки. title(’Plot y=cos(x/3)’); % Выводим заголовок графика. pause(5); % Приостанавливаем выполнение программы на 5 секунд. delete(okno1); % Закрываем окно с дескриптором okno1.
При запуске программы будет создано графическое окно, в котором будет выведен график функции $$sin(x)$$ чёрного цвета с линиями сетки и заголовком. Это окно будет находиться на экране в течении 5 секунд, после чего очистится. Будет выведен график функции $$sin(0.75x)$$ голубого цвета с линиями сетки и заголовком, которое будет на экране в течении 5 секунд. Далее аналогично будут с задержками 5 секунд выведены графики функций $$cos(x)$$ и $$cos(x/3)$$. После этого окно автоматически закроется. Для понимания механизма работы с графическими окнами в Octave, авторы рекомендуют читателю при выводе графика $$sin(x)$$ попытаться закрыть окно и посмотреть, что из этого получится.
Пример 4.4. Построить графики функций $$y=e^{\sin x}, u=e^{\cos\frac{x}{3}}, v=e^{\sin\frac{x}{2}$$ на интервале $$[-3\pi; 3\pi]$$.
Рассмотрим два варианта построения графиков (см. листинг 4.4).
% __________________Способ первый _____________________________
x=-3*pi( ):pi( )/20:3*pi( );% Формируем массив x.
y= exp(sin(x)); % Формируем массив y.
u= exp(cos(x/3));% Формируем массив u.
v= exp(sin(x/2) );% Формируем массив v.
% Строим график функции y(x), сплошная чёрная линия, без маркера,
% в качестве легенды выводим $$e^{sin(x)}$$.
plot(x, y, "k;e^{sin(x)};")
hold on;% Блокируем режим очистки окна.
% Строим график функции u(x), сплошная чёрная линия, c маркером
% треугольником, размер маркера — 4, в качестве легенды выводим $$e^{cos(x/3)}$$.
plot(x, u, "->k; e^{cos(x/3)};", "markersize", 4)
% Строим график функции v(x), сплошная чёрная линия, c маркером
% окружностью, размер маркера — 4, в качестве легенды выводим $$e^{sin(x/2)}$$.
plot(x, v, "-ok;e^{sin(x/2)};", "markersize", 4 );
% __________________Способ второй _____________________________
x=-3*pi( ):pi( )/20:3*pi( );
y= exp(sin(x));
u= exp(cos(x/3));
v= exp(sin(x/2));
% Отличие вывода трёх графиков состоит в том, вместо 3-х функций plot и
% двух hold on используется одна функция plot в которой указаны те же
% параметры вывода графиков, что и в листинге 4.4
plot(x, y, "k;e^{sin(x)};", x, u, "->k;e^{cos(x/3)};", "markersize"
, 4, x, v, "-ok;e^{sin(x/2)};", "markersize", 4)
На рис. 4.5. изображены графики функций: $$y = e^{sinx}, u = e^{cos\frac{x}{3}}, v = e^{sin\frac{x}{2}}$$
(рис 4.5) Графики функций
Оба способа формируют один и тот же график (см. рис. 4.5).
Пример 4.5. Построить график функции $$y(x)=1 -\frac{0.4}{x} + \frac{0.05}{x^{2}$$ на интервале [-2; 2].
В связи с тем, что функция не определена в точке $$x = 0$$, будем строить её как графики двух функций $$y(x)$$ на полуинтервале [-2; 0) и $$y(x)$$ на полуинтервале (0; 2]. Текст программы на Octave с комментариями приведён в листинге 4.5, график функции — на рис. 4.6.
a =1;b= -0.4; c =0.05; x1 = _2:0.01: _0.1; % Определяем аргумент (массив x) на [-2;-_0.1]. x2 = 0.1:0.01:2; % Определяем аргумент (массив x) на [0.1; 2]. y1=a+b./x1+c./x1./x1; % Вычисляем значение функции y(x) на [_2; _0.1]. y2=a+b./x2+c./x2./x2; % Вычисляем значение функции y(x) на [0.1; 2]. % Строим график как график двух функций, на интервалах [-2; -0.1], [0.1; 2], % цвет графика чёрный, легенда — . plot(x1, y1, ’k;f(x)=a+b/x+c/x^2;’, x2, y2, ’k’); title(’y=f(x)’);% Подпись над графиком. xlabel(’X’); % Подпись оси X. ylabel(’Y’);% Подпись оси Y. grid on; % Рисуем линии сетки.
На рис. 4.6. изображен графики функции: $$y(x) = 1-\frac{0.4}{x}+\frac{0.05}{x^2}$$
(рис 4.6) График функции
Пример 4.6. Построить график функции $$y(x)=\frac{1}{x^{2}-2x-3$$ на интервале [-5; 7].
Уравнение $$x^{2}-2x-3=0$$ имеет корни -1, 3. Поэтому наша функция $$y(x)$$ будет иметь разрывы в этих точках $$x = -1, x = 3$$. Будем строить её, как графики трёх функций, на трёх интервалах [-5; _1.1], [0.9; 2.9], [3.1; 7]. Листинг 4.6 демонстрирует решение примера 4.6, а на рис. 4.7 изображён график функции $$y(x)=\frac{1}{x^{2}-2x-3$$ как результат работы этой программы.
% Определяем аргументы на интервалах [-5; -1.1], [0.9; 2.9], [3.1; 7]. x1 = -5:0.01: -1.1; x2 = -0.9:0.01:2.9; x3 = 3.1:0.01:7; % Вычисляем значение y(x) на соответствующих интервалах. y1 =1./( x1.* x1-2*x1-3); y2 =1./( x2.* x2-2*x2-3); y3 =1./( x3.* x3-2*x3-3); % Строим график чёрного цвета, как график 3-х функций. plot(x1, y1, ’k’, x2, y2, ’k’, x3, y3, ’k’); title(’y=f(x)’); % Подпись над графиком. xlabel(’X’); % Подпись оси X. ylabel(’Y’);. % Подпись оси Y. legend(’f(x)=1/(x^2-2x-3)’, 4); % Вывод легенды. grid on; % Рисуем линии сетки.
На рис. 4.7. изображен график функции: $$y(x) =\frac{1}{x^2-2x-3}$$
(рис 4.7) График функции
Ещё одну интересную возможность построения двух графиков предоставляет функция $$plotyy$$, которая позволяет изображать на графике две оси ординат, что очень удобно при построении графиков разных порядков. К сожалению эта функция не позволяет явно задавать типы изображаемых линий. На каждой из осей ординат подписи значений выводятся тем же цветом, что и график функции. Использование функции plotyy рассмотрено ниже.
Пример 4.7. Построить графики функции $$y=x^{3}, y=\cos2x$$ на интервале [-5; 5].
Решение этой задачи представлено в листинге 4.7, полученный график — на рис. 4.8.
x = -5:0.1:5; y=x.^3; z=cos(2*x); plotyy(x, y, x, z); grid on; title(’Plot x^3, cos(x/2)’); xlabel(’X’); ylabel(’Y’);
На рис. 4.8. изображены графики функций: $$y = x^3, y = cos 2x$$
(рис 4.8) Графики функции
Octave предоставляет возможность построить несколько осей в графическом окне и вывести на каждую из них свои графики. Для этого следует использовать функцию subplot: subplot(row, col, cur);
Параметры $$row$$ и $$col$$ определяют количество графиков по вертикали и горизонтали соответственно, $$cur$$ определяет номер текущего графика. Повторное обращение к функции $$subplot$$ с теми же значениями $$row$$ и $$col$$ позволяет просто изменяет номер текущего графика и может использоваться для переключения между графиками. Рассмотрим использование функции $$subplot$$ при решении следующей задачи.
Пример 4.8. Построить графики функции $$y=2e^{-0.15x^{2}}, z=e^{0.7x-0.25x^{2}}, u=0.5e^{-0.33x}\sin(2x+\frac{\pi}{3}), k=3\sin(x-0.22x^{2}), v=\cos x, w=e^{\cos x}$$ на интервале [-6; 6].
Решение задачи представлено в истинге 4.8л, полученное графическое окно — на рис. 4.9.
% Формируем массивы x, y, z, u, k, v, w.
x = -6:0.2:6; y=2*exp(*0.15* x.^2); z= exp(0.7*x-0.25* x.^2);
u=0.5*exp(-0.33*x).*sin(2*x+pi( )/3); k=3*sin(x*0.22.*x.^2);
v=cos(x);w= exp(cos(x));
% Делим графическое окно на 6 частей и объявляем первый график текущим.
subplot(3, 2, 1);
plot(x, y); % Строим график y(x) с линиями сетки и подписями.
grid on; title(’Plot y=2e^{-0.15x^2}’); xlabel(’x’); ylabel(’y’);
subplot(3, 2, 2); % Второй график объявляем текущим.
plot(x, z); % Строим график z(x) с линиями сетки и подписями.
grid on; title(’Plot z=cos^2(x)’); xlabel(’x’); ylabel(’z’);
subplot(3, 2, 3); % Третий график объявляем текущим.
plot(x, u); % Строим график u(x) с линиями сетки и подписями.
grid on; title( ’Plot u=0.5e^{-0.33x}sin (2x+pi/3)’);
xlabel(’x’); ylabel(’u’);
subplot(3, 2, 4); % Четвёртый график объявляем текущим.
plot(x, k); % Строим график k(x) с линиями сетки и подписями.
grid on; title(’Plot k=3sin(x-0.22x^2)’);
xlabel(’x’); ylabel(’k’);
subplot(3, 2, 5); % Пятый график объявляем текущим.
plot(x, v); % Строим график v(x) с линиями сетки и подписями.
grid on; title(’Plot v=cos(x)’); xlabel(’x’); ylabel(’v’);
subplot(3, 2, 6); % Шестой график объявляем текущим.
plot(x,w); % Строим график w(x) с линиями сетки и подписями.
grid on; title(’Plot w=e^{cos (x)}’ ); xlabel(’x’); ylabel(’w’);
Для построения графика функции можно использовать функцию $$fplot$$ следующей структуры: $$fplot(@f, [xmin, xmax], s)$$.
Здесь $$f$$ — имя функции (стандартной функции Octave или функции, определённой пользователем), $$[xmin, xmax]$$ — интервал, на котором будет строиться график, $$s$$ — строка формата, определяющая только параметры линии (но не легенду). Легенда графика формируется автоматически функцией $$fplot$$ без использования функции $$legend$$. Не позволяет формировать легенду и третий параметр функции $$fplot$$, в отличии от функции $$plot$$.
Пример 4.9. Используя функцию $$fplot$$, построить графики функций $$e^{\sin x},e^{\cos x},\sin x,\cos x$$ на интервале $$[-3\pi; 2\pi]$$.
Текст программы на языке Octave с комментариями приведён в листинге 4.9. Полученные графики можно увидеть на рис. 4.10.
% Определяем функцию f = exp(cos(x))
function y=f(x) y=exp(cos(x)); end
% Определяем функцию g = exp(sin(x))
function z=g(x) z=exp(sin(x)); end
h=figure( );
% Делим графическое окно на 4 части и объявляем первый график текущим.
subplot(2, 2, 1);
% Строим график g = exp(cos(x)) на интервале $$[-3\pi; 2\pi]$$
% голубого цвета с маркером.
fplot(@g, [-3*pi( ), 2*pi( )], ’-pb’);
title(’Plot y=e^{cos(x)}’); % Подписываем график.
grid on; % Проводим линии сетки
subplot(2, 2, 2); % Второй график объявляем текущим.
% Строим график f=exp(sin(x)) на интервале $$[-3\pi; 2\pi]$$
% красного цвета с маркером.
fplot(@f, [-3*pi( ), 2-pi( )], ’-or’);
title(’Plot z=e^{sin(x)}’);% Подписываем график.
grid on; % Проводим линии сетки
subplot ( 2, 2, 3 ); % Третий график объявляем текущим.
% Строим график sin(x) на интервале $$[-3\pi; 2\pi]$$ чёрного цвета
fplot(@sin, [-3*pi( ), 2*pi( )], ’k’);
title(’Plot sin(x)’); % Подписываем график.
grid on; % Проводим линии сетки
subplot(2, 2, 4); % Четвёртый график объявляем текущим.
% Строим график cos(x) на интервале $$[-3\pi; 2\pi]$$ зелёного цвета
fplot(@cos, [-3*pi( ), 2*pi( )], ’g’);
title(’Plot cos(x)’); % Подписываем график.
grid on; % Проводим линии сетки
(рис 4.9) Графики функций y(x), z(x), u(x), k(x), v(x), w(x)
Полярная система координат состоит из заданной фиксированной точки $$O$$, называемой полюсом, концентрических окружностей с центром в полюсе и лучей, выходящих из точки $$O$$, один из которых, $$OX$$, называют полярной осью. Положение любой точки $$M$$ в полярных координатах можно задать положительным числом ρ = |OM | (полярный радиус) и числом φ, равным величине угла ∠XOM (полярный угол). Числа ρ и φ называют полярными координатами точки $$M$$ и обозначают $$M$$ (ρ, φ).
Для формирования графика в полярной системе координат необходимо сформировать массивы значений полярного угла и полярного радиуса и обратиться к функции $$polar: polar(phi, ro, s)$$, где $$phi$$ — массив полярных углов; ro — массив полярных радиусов; $$s$$ — строка, состоящая из трёх символов, которые определяют цвет линии, тип маркера и тип линии (см. табл. 4.1, 4.2).
В качестве примера использования функции polar рассмотрим решение следующей задачи.
Пример 4.10. Построить график лемнискаты.
Уравнение лемнискаты в полярных координатах имеет вид: $$\rho=a\sqrt{2\cos2\varphi}$$, функция ρ определена при $$-\frac{\pi}{2}\leq\varphi\leq\frac{\pi}{2}(\cos2\varphi\geq 0)$$. Поэтому листинг для изображения графика лемнискаты будет таким.
fi = -pi/4:pi/200:pi/4; % Определяем массив полярного угла fi. % Определяем массив положительных значений полярного радиуса ro. ro=3*sqrt(2*cos(2*fi)); polar(fi, ro, ’r’); % Рисуем правую часть лемнискаты. hold on; % Блокируем режим очистки окна. polar(fi, -ro, ’r’); % Рисуем левую часть лемнискаты. grid on;
На рис. 4.10. изображены графики функций: $$e^{sinx}, e^{cos x}, sin x, cos x$$
(рис 4.10) Графики функций
(рис 4.11) График лемнискаты в полярных координатах
Полученный график изображён на рис. 4.11.
Пример 4.11. Построить графики архимедовой спирали, гиперболической спирали и логарифмической спирали в полярных координатах.
Уравнение архимедовой спирали в полярных координатах имеет вид: $$\rho=\alpha\varphi$$, гиперболической — $$\rho=\frac{\alpha}{\varphi}$$. Соотношение $$\rho=\alpha e^{k\varphi}, k=\ctg\alpha$$ является уравнением логарифмической спирали в полярных координатах. Частным случаем логарифмической спирали ($$\alpha=\frac{\pi}{2}, k=0$$) является уравнение окружности ($$\rho=\alpha$$).
В листинге 4.11 приведён текст программы, позволяющей построить в одном графическом окне четыре оси координат, в каждом из которых построить свой график — архимедову, гиперболическую и логарифмическую спирали, а также окружность.
График представлен на рис. 4.12.
h=figure( ) clear all; % Формируем массивы fi1, fi2, fi3, fi4, ro1, ro2, ro3, ro4. fi1 =0:pi/20:6*pi; fi 2=pi/3:pi /200:6*pi; fi3 =0:pi/20:4*pi; fi4 = -pi:pi/20:pi; ro1=4* f i 1; ro2 =0.5./fi2; ro3=4*exp(0.2*fi3); for i = 1:41 ro4(i) =4; endfor % Делим графическое окно на 4 части и объявляем первый график текущим. subplot(2, 2, 1); polar(fi1, ro1); % Строим график архимедовой спирали. title(’Graph of Archimedean spiral’); % Подписываем график. subplot(2, 2, 2); % Второй график объявляем текущим. polar(fi2, ro2); % Строим график гиперболической спирали. title(’Graph of the hyperbolic spiral’); % Подписываем график. subplot(2, 2, 3); % Третий график объявляем текущим. polar(fi3, ro3); % Строим график логарифмической спирали. title(’Graph of the logarithmic spiral’); % Подписываем график. subplot(2, 2, 4); % Четвёртый график объявляем текущим. polar(fi4, ro4); % Строим график окружности. title(’Graph the circle’); % Подписываем график.
Задание функции $$y(x)$$ с помощью равенств $$x = f (t)$$ и $$y = g(t)$$ называют параметрическим, а вспомогательную величину $$t$$ — параметром. Построение графика функции, заданной параметрически, можно осуществлять следующим образом:
В качестве примера рассмотрим построение график эпициклоиды и астроиды.
Пример 4.12. Построить график эпициклоиды. Уравнение эпициклоиды в параметрической форме имеет вид $$x = 4 cos t - cos 4t, y = 4 sin t -sin 4t$$, $$t\in[0; 2\pi]$$. В листинге 4.12 представлен текст программы для изображения графика эпициклоиды, а на рис. 4.13 — сам график.
(рис 4.12) Графики архимедовой, гиперболической и логарифмической спиралей, окружности в полярных координатах
t =0: pi/50:2 *pi; x=4*cos(t)-cos(4*t ); y=4*sin(t)-sin(4*t); plot(x, y); grid on;
Пример 4.13. Построить график астроиды.
Уравнение астроиды в параметрической форме имеет вид $$x=3 \cos^{3}t, y=3\sin^{3}t, t\in[0;2\pi]$$. В листинге 4.13 представлен текст программы для изображения графика астроиды, а на рис. 4.14 — сам график.
t =0:pi/50:2*pi; x=3*cos(t).^3; y=3* sin(t).^3; plot(x, y); grid on;
(рис 4.13) График эпициклоиды
(рис 4.14) График астроиды
(рис 4.15) Пример использования функции bar(y)
Функция $$bar$$ предназначена для построения гистограммы. Функция $$bar(y)$$ выводит элементы массива $$y$$ в виде гистограммы, в качестве массива $$x$$ выступает массив номеров элементов массива y. Функция $$bar(x, y)$$ выводит гистограмму элементов массива y в виде столбцов в позициях, определяемых массивом $$x$$, элементы которого должны быть упорядочены в порядке возрастания.
Рассмотрим несколько примеров. Фрагмент y=[5; 6; 7; 8; 9; 8; 7; 6;4; 3]; bar(y); строит гистограмму, представленную на рис. 4.15.
Фрагмент $$x1=[-2,-1,0,1,2,3,4]; y1=$$exp(sin$$(x1));$$ bar$$(x1,y1)$$; строит гистограмму, представленную на рис. 4.16.
График поверхности (трёхмерный или 3D-график) — это график, положение точки в котором определяется значениями трёх координат.
Дадим определение прямоугольной (или декартовой) системы координат в пространстве.
(рис 4.16) Пример использования функции bar(x, y)
Прямоугольная система координат в пространстве состоит из заданной фиксированной точки $$О$$ пространства, называемой началом координат, и трёх перпендикулярных прямых пространства $$OX, OY$$ и $$OZ$$, не лежащих в одной плоскости и пересекающихся в начале координат, — их называют координатными осями ($$OX$$ — ось абсцисс, $$OY$$ — ось ординат, $$OZ$$ — ось аппликат). Положение точки $$M$$ в пространственной системе координат определяется значением трёх координат и обозначается $$M (x, y, z)$$. Три плоскости, содержащие пары координатных осей, называются координатными плоскостями $$XY, XZ$$ и $$YZ$$.
Величина $$z$$ называется функцией двух величин $$x$$ и $$y$$, если каждой паре чисел, которые могут быть значениями переменных $$x$$ и $$y$$, соответствует одно или несколько определённых значений величины $$z$$. При этом переменные $$x$$ и $$y$$ называют аргументами функции $$z(x, y)$$. Пары тех чисел, которые могут быть значениями аргументов $$x$$, $$y$$ функции $$z(x, y)$$, в совокупности составляют область определения этой функции.
Для построения графика двух переменных $$z = f (x, y)$$ необходимо выполнить следующие действия.
Для формирования прямоугольной сетки в Octave есть функция $$meshgrid$$. Рассмотрим построение трёхмерного графика на следующем примере.
Пример 4.14. Построить график функции $$z(x,y)=3x^{2}-2sin^{2}y, x \in [-2,2], y \in [-3,3]$$.
Для формирования сетки воспользуемся функцией $$meshgrid$$.
>>>[x y]=meshgrid(-2:2,-3:3) x = -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 y = -3 -3 -3 -3 -3 -2 -2 -2 -2 -2 -1 -1 -1 -1 -1 0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
После формирования сетки вычислим значение функции во всех узловых точках
>>> z=3*x.*x-2*sin(y).^2 z = 11.96017 2.96017 -0.03983 2.96017 11.96017 10.34636 1.34636 -1.65364 1.34636 10.34636 10.58385 1.58385 -1.41615 1.58385 10.58385 12.00000 3.00000 0.00000 3.00000 12.00000 10.58385 1.58385 -1.41615 1.58385 10.58385 10.34636 1.34636 -1.65364 1.34636 10.34636 11.96017 2.96017 -0.03983 2.96017 11.96017
На рис. 4.17. изображен график функции: $$z(x, y) = 3x^2-2sin^{2y}$$
(рис 4.17) График функции
Для построения каркасного графика следует обратиться к функции $$mesh: mesh(x, y, z)$$;
После это будет создано графическое окно с трёхмерным графиком (см. рис. 4.17). Как видно, полученный график получился грубым, для получения менее грубого графика следует сетку сделать более плотной (см. листинг 4.14 и рис. 4.18).
[x y]= meshgrid(- 2:0.1:2, -3:0.1:3); z=3*x.*x-2*sin(y).^2 mesh(x, y, z);
Любой трёхмерный график можно вращать, используя мышку.
Для построения поверхностей, кроме функции $$mesh$$ построения каркасного графика, есть функция $$surf$$, которая строит каркасную поверхность, заливая её каждую клетку цветом, который зависит от значения функции в узлах сетки.
Пример 4.15. С использованием функции $$surf$$ построить график функции $$z(x,y)=\sqrt{sin^{2}x+\cos^{2}y}$$.
В листинге 4.15 представлено решение задачи, а на рис. 4.19 изображён получившийся график.
На рис. 4.18. изображен график функции: $$z(x, y) = 3x^2-2sin^{2}y$$
(рис 4.18) График функции с плотной сеткой
[x y]= meshgrid(-2:0.2:2, 0:0.2:4); z=sqrt(sin(x).^2+cos(y).^2); surf(x, y, z);
В Octave можно построить графики двух поверхностей в одной системе координат, для этого, как и для плоских графиков, следует использовать команду $$hold on$$, которая блокирует создание второго нового окна при выполнении команд $$surf$$ или $$mesh$$.
Пример 4.16. Построить в одной системе координат графики функций $$z(x,y)=\pm(2x^{2}+3y^{4})-1$$.
Решение задачи с использованием функции $$surf$$ представлено в листинге 4.16, полученный график изображён на рис. 4.20.
h=figure( ); [x y]= meshgrid(-2:0.1:2, -3:0.1:3); z=2*x.^2+3*y.^4-1; z1=-2*x.^2-3*y.^4-1; surf(x, y, z); hold on surf(x, y, z1);
На рис. 4.19. изображен график функции: $$z(x, y) =\sqrt{sin^2x + cos^2y}$$
(рис 4.19) График функции
(рис 4.20) Изображение двух поверхностей в одной системе координат с использованием функции surf
(рис 4.21) Изображение двух поверхностей в одной системе координат с использованием функции mesh
Построение поверхности с помощью функции $$mesh$$ можно осуществить аналогично (см. листинг 4.17), графики функций — можно увидеть на рис. 4.21.
h=figure( ); [x y]= meshgrid(-2:0.1:2, -3:0.1:3); z=2*x.^2+3*y.^4-1; z1=-2*x.^2-3*y.^4-1; mesh(x, y, z); hold on mesh(x, y, z1);
При построении графиков поверхностей, заданных параметрически $$x(u, v), y(u, v)$$ и $$z(u, v)$$ необходимо построить матрицы $$X, Y$$ и $$Z$$ одинакового размера. Для этого массивы $$u$$ и $$v$$ должны быть одинакового размера. Можно выделить два основных вида представления $$x, y$$ и $$z$$ в случае параметрического задания поверхностей:
Рассмотрим несколько задач построения графиков поверхностей заданных параметрически.
Пример 4.17. Построить поверхность однополостного гиперболоида, уравнение которого задано в параметрическом виде $$x(u, v) = ch(u)cos(v), y (u, v) = ch(u)sin(v), z (u, v) = sh(u), u \in [0, \pi ], v \in [0, 2\pi]$$.
В листинге 4.18 представлено решение этой задачи, согласно описанному выше алгоритму. График однополостного гиперболоида представлен на рис. 4.22.
clear all; h =3.14/50; u = [0:h:3.14]’; % Формируем вектор-столбец u. % Формируем вектор-строку v. Обратите внимание, u — столбец, % v — строка с одинаковым количеством элементов. v =[0:2*h:6.28]; % Формируем матрицу X как матричное произведение ch(u) cos(v). X=cosh(u)*cos(v); % Формируем матрицу Y как матричное произведение ch(u)*sin(v). Y=cosh(u)*sin(v); % Формируем матрицу Z как матричное произведение столбца sh(u) % на строку ones(size(v)). Z=sinh(u)*ones(size(v)); % Формируем график поверхности. surf(X, Y, Z); grid on; % Подписываем график и оси. title(’Plank hyperboloid’); xlabel(’X’); ylabel(’Y’); zlabel(’Z’)
(рис 4.22) График однополостного гиперболоида
Рассмотрим несколько способов построения сферы в Octave.
Пример 4.18. Построить поверхность сферы с центром $$(x_{0}, y_{0}, z_{0})$$ и радиусом $$R$$.
В декартовой системе координат уравнение сферы имеет вид: $$(x-x_{0})^{2}+(y-y_{0})^{2}+(z-z_{0})^{2}=R^{2}$$. Его можно записать в параметрическом виде
$$\begin{cases}x(u,v)=x_{0} + R \sin(u)\cos(v), \\y(u,v)=y_{0}+R\sin(u)\sin(v), \\z(u,v)=z_{0} + R\cos(u), \\\end{cases}$$где $$u\in[0,2\pi), v\in[0,\pi]$$.
Методика построения сферы подобна методике построения однополостного гиперболоида, описанной в примере 4.17. В листинге 4.19 представлен текст программы построения сферы с центром в точке (1, 1, 1) и радиусом $$R = 4$$, а на рис. 4.23 изображена сфера.
clear all; h=pi/30; u=[-0:h:pi]’; % Формируем вектор-столбец u. v =[0:2*h:2*pi ]; % Формируем вектор-строку v. % Формируем матрицу X, используя матричное произведение sin(u)*cos(v). x=1+4*sin(u)*cos(v); % Формируем матрицу Y, используя произведение sin(u)*sin(v). y=1+4*sin(u)*sin(v); % Формируем матрицу Z, используя произведение столбца % cos(u) на строку ones(size(v)). z=1+4*cos(u)*ones(size(v)); % Формируем график поверхности. surf(x, y, z); grid on; % Подписываем график и оси. title(’SPHERE’); xlabel(’X’); ylabel(’Y’); zlabel(’Z’);
(рис 4.23) График сферы, построенный с использованием функции surf
Octave содержит встроенную функцию $$[X, Y, Z] = sphere(n)$$, позволяющую формировать матрицы $$(X, Y, Z)$$ размерности $$n + 1$$ для построения сферы единичного радиуса (см. пример 4.18) с центром в начале координат.
Для построения сферы единичного радиуса с центром в начале координат достаточно двух команд $$[X,Y,Z]=sphere(n); surf(X,Y,Z)$$. Чем n больше, тем более "округлой" будет сфера. На рис. 4.24 изображена сфера единичного радиуса в центре в начале координат при n = 25.
(рис 4.24) График сферы единичного радиуса, построенный с использованием функции sphere(25)
Встроенную функцию $$sphere(n)$$ можно использовать и для построения сферы с центром $$(x_0, y_0, z_0)$$ и радиусом $$R$$. В листинге 4.20 приведено решение примера 4.18 с помощью функции sphere(n).
clear all; x0 =2; y0=_2;z0 =5;R=10 % Определяем центр и радиус сферы. % Формируем матрицы X, Y, Z для построения сферы единичного радиуса % с центром в начале координат, используя функцию sphere(n). [X, Y, Z]= sphere(25); % Пересчитываем матрицы X,Y,Z для сферы с центром x0, y0, z0 и радиусом R. X=x0+R*X;Y=y0+R*Y; Z=z0+R*Z; surf(X, Y, Z) % Изображаем сферу
В результате работы программы будет построена сфера, представленная на рис. 4.25.
Сфера является частным случаем более общей фигуры — эллипсоида. Рассмотрим два способа построения эллипсоида.
(рис 4.25) Сфера, построенная с помощью программы, представленной в листинге 4.20
Пример 4.19. Построить поверхность эллипсоида, уравнение которой задано в параметрическом виде:
$$\left\{\begin{aligned}x(u,v)=x_0+a\sin(u)\cos(v),\\y(u,v)=y_0+b\sin(u)\sin(v),\\z(u,v)=z_0+c\cos(u).\end{aligned}\right.$$Здесь $$a, b, c$$ — полуоси эллипсоида, $$(x_0, y_0, z_0)$$ — центр эллипсоида.
Методика построения эллипсоида подобна тому, как ранее были построены однополостный гиперболоид (пример 4.17) и сфера (пример 4.18). Для этого необходимо сформировать матрицы $$X, Y$$ и $$Z$$, после чего вызвать функцию $$surf$$. Как это сделать показано в листинге 4.21.
clear all; h=pi/30; u=[-0:h:pi]’; % Формируем вектор-столбец u. v =[0:2*h:2*pi]; % Формируем вектор-строку v. % Формируем матрицу X, используя матричное произведение sin(u)*cos(v). a =3;b=7; c =1; x0=y0=z0 =10;x=x0+a*sin(u)*cos(v); % Формируем матрицу Y, используя произведение sin(u)*sin(v). y=y0+b*sin(u)*sin(v); % Формируем матрицу Z, используя произведение столбца % cos(u) на строку ones(size(v)). z=z0+c*cos(u)*ones(size(v)); surf(x, y, z); grid on; % Формируем эллипсоид. % Подписываем график и оси. title(’ELLIPSOID’); xlabel(’X’); ylabel(’Y’); zlabel(’Z’);
Эллипсоид с центром в точке (10, 10, 10) и полуосями $$a = 3, b = 7, c = 1$$ представлен на рис. 4.26.
Однако, для построения эллипсоида в Octave существует функция $$[X, Y, Z] = ellipsoid(xc, yc, zc, xr, yr, zr, n)$$, которая позволяет автоматически сформировать матрицы $$X, Y, Z$$.
В функции $$ellipsoid$$:
Для построения эллипсоида, представленного на рис. 4.23 достаточно ввести команды
a =3;b=7; c =1; x0=y0=z0 =10; [X, Y, Z]= ellipsoid(x0, y0, z0, a, b, c, 30); surf(x, y, z); grid on; title(’ELLIPSOID’); xlabel(’X’); ylabel(’Y’); zlabel(’Z’);
Для построения цилиндров и круговых конусов можно использовать функцию $$cylinder$$ для формирования матриц $$X, Y, Z$$. Затем строим саму поверхность (цилиндр, конус) с помощью функции $$surf$$.
Познакомимся с функцией cylinder подробнее. Обращение к функции имеет вид. $$[X, Y, Z] = cylinder(r, n)$$;
Здесь $$r$$ — массив радиусов; если мы строим цилиндр, $$r$$ — массив, состоящий из двух одинаковых значений, функция требует как минимум два значения, и для построения цилиндра это будут радиус верхнего и нижнего основания; при построении конуса r является массивом радиусов горизонтальных сечений кругового конуса;
$$X, Y, Z$$ — формируемые для построения поверхности (конуса, цилиндра) матрицы размерности $$n + 1$$.
Рассмотрим несколько примеров.
Пример 4.20. Построить цилиндр радиуса $$R = 4$$ и высотой $$h = 1$$.
Текст программы приведён в листинге 4.22, график — на рисунке 4.27.
(рис 4.26) Эллипсоид с центром в точке (10, 10, 10) и полуосями a = 3,b = 7, c = 1
clear all;
[x, y, z] = cylinder([4, 4], 25); % Формирование матриц x, y, z.
grid on; surf(x, y, z); % Построение цилиндра.
title("Cylinder")
Пример 4.21. Построить цилиндр радиуса 4 и высотой 20.
Текст программы приведён в листинге 4.23, график — на рисунке 4.28.
clear all;
[x, y, z] = cylinder([4, 4], 25); % Формирование матриц x, y, z.
grid on;
surf(x, y, 20*z ); % Построение цилиндра с учётом высоты h = 20.
title("Cylinder")
Пример 4.22. Примеры круговых конусов.
Рассмотрим несколько примеров.
(рис 4.27) Цилиндр радиуса R = 4 и высотой h = 1
(рис 4.28) Цилиндр радиуса R = 4 и высотой h = 20
(рис 4.29) Усечённый круговой конус к листингу 4.24
Усечённый круговой конус, представленный на рис. 4.29, генерируется программой из листинга 4.24.
clear all; [x, y, z] = cylinder(2:1:10, 25);
grid on; surf(x, y, z);
title("Cone"); xlabel(’X’); ylabel(’Y’); zlabel(’Z’);
Круговой конус, представленный на рис. 4.30, генерируется программой в листинге 4.25.
clear all[x, y, z] = cylinder([5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5], 25);
grid on; mesh(x, y, z);
title("Cone") xlabel(’X’); ylabel(’Y’); zlabel(’Z’);
В завершении приведён листинг 4.26, который генерирует поверхность, представленную на рис. 4.31.
(рис 4.30) Круговой конус к листингу 4.25
clear all[x, y, z] = cylinder([1, 3, 5, 7, 6, 4], 25);
surf(x, y, z);
title("Surface"); xlabel(’X’); ylabel(’Y’); zlabel(’Z’);
При изучении движения точки на плоскости Octave позволит построить график движения и проследить за движением. Построить анимационный ролик можно с помощью функции $$comet(x, y)$$, которая позволит увидеть движение точки вдоль кривой $$y(x)$$ на плоскости.
Для движения точки на плоскости вдоль синусоиды достаточно ввести команды:
x=0: pi/30:6*pi; y=sin(x); comet(x, y);
Процесс движения точки вдоль синусоиды представлен на рис. 4.32, окончательный вид траектории движения точки вдоль синусоиды показан на рис. 4.33.
(рис 4.31) Поверхность к листингу 4.26
(рис 4.32) Движение точки вдоль синусоиды
(рис 4.33) Окончательный вид траектории движения точки
Встроенный язык Octave — объектно-ориентированный язык программирования. Все объекты находятся в определённой иерархии по отношению друг к другу. Рассмотрим основные графические объекты для работы с графикой и общие принципы работы с объектами на примере построения графика функции $$x(t) = sin(t)$$ на интервале $$[-3\pi; 3\pi]$$. Построим график функции $$x(t)$$:
t=-3*pi:pi/100:3*pi; x=sin(t); plot(t, x);
Окно с графиком синуса на интервале $$[-3\pi; 3\pi]$$ представлено на рис. 4.34. В результате работы функции $$plot$$ были созданы три графических объекта:
Figure 1;При работе с переменными, в которых хранятся объекты, пользователь оперирует ими как обычными переменными. Однако реально это указатели — адреса в памяти, в которых хранятся объекты; в Octave в качестве указателя используется номер объекта.
Для получения указателей на объекты в языке Octave есть три функции:
(рис 4.34) График функции y = sin(x) на интервале [-3; 3]
Для установки свойств объектов служит функция set
$$set(h,\ ’Свойство1’,\ Значение1,\ ’Свойство2’,\ Значение2,\ ’Свойство3’,\ Значение3, . . . )$$
Здесь $$h$$ — указатель на объект, свойства которого будут устанавливаться (изменяться); $$’Свойство1’,\ ’Свойство2’,\ ’Свойство3’, . . .$$ — имена свойств, которые будут изменяться; $$Значение1,\ Значение2,\ Значение3, . . .$$ — новые значения свойств.
В простейшем виде функция $$set$$ имеет вид: $$set(h,\ ’Свойство’,\ Значение )$$ Для получения свойства объекта служит функция $$get: get(h,\ ’Свойство’ )$$; Функция возвращает значения $$Свойства$$ объекта с указателем $$h$$. Если к функции $$get$$ обратиться с одним параметром $$h$$, то функция вернёт значения всех свойств объекта в виде $$Свойство\ =\ Значение$$.
Как уже рассматривалось ранее, для создания графического окна служит функция $$figure()$$, которая создаёт пустое графическое окно (см. рис. 4.35) и возвращает указатель на него.
(рис 4.35) Окно, созданное с помощью функции figure()
Например:
>>> g=figure() g = 12
Если есть несколько окон, то окно с указателем $$g$$ выдвигается на передний план и становится текущим.
Как при создании графиков с определёнными свойствами с помощью функции $$plot$$, при создании графических окон, осей и других объектов можно сразу определять некоторые свойства создаваемых объектов. Обращение к функции создания окна с определёнными свойствами имеет вид $$figure(’Свойство1’,\ Значение1,\ ’Свойство2’,\ Значение2,\ ’Свойство3’,\ Значение3, . . . )$$; Для удаления (закрытия) окна с указателем $$h$$ служит функция $$delete(h)$$. Доступ к имени окна осуществляется с помощью свойства $$name$$, хранящее строку, которая будет дописана к имени окна после стандартного имени окна Figure 1, Figure 2, ...; Например,
h=figure(); set(h,’name’,’New Window’)
В результате появится окно, представленное на рис. 4.36. Если свойству $$numbertitle$$ присвоить значение $$’off’$$, то это позволит отказаться от текущей нумерации окон Figure 1, Figure 2, ... (см. листинг ниже и рис. 4.37).
h=figure( ); set(h, ’numbertitle’, ’off’) set(h, ’name’, ’New Window’)
(рис 4.36) Окно с изменённым заголовком
(рис 4.37) Окно после выключения стандартной нумерации окон
Как и у многих рассматриваемых графических объектов, у окна есть свойство $$Position$$, определяющее расположение объекта. $$Position$$ — массив из четырёх элементов $$[xleft ybottom width height]; xleft, ybottom$$ определяют координаты левого нижнего угла экрана, относительно левого нижнего угла монитора; $$width$$ — ширина; $$height$$ — высота графического окна в пикселях.
Создадим окно с именем $$"New Window"$$ шириной и высотой 400 пикселей, с левым нижним углом с координатами (75, 90):
h=figure(’position’, [75 90 400 400]) set(h, ’numbertitle’, ’off’) set(h, ’name’, ’New Window’)
Для создания осей в текущем окне служит функция $$axes$$, которая возвращает указатель на созданные оси.
Для получения всех свойств осей построенного с помощью предыдущего листингаграфика пользователь может ввести команду $$get(gca)$$
В листинге 4.27 приведены свойства осей графика, представленного на рис. 4.34.
>>>ans = scalar structure containing the fields: beingdeleted = off busyaction = queue buttondownfcn = [ ] (0x0) children = -6.1976 clipping = on createfcn = [ ] (0x0) deletefcn = [ ] (0x0) handlevisibility = on hittest = on interruptible = on parent = 1 selected= off selectionhighlight = on tag = type = axes userdata = [ ] (0x0) visible = on __modified__ = on uicontextmenu = [ ] (0x0) position = 0.13000 0.11000 0.77500 0.81500 box = on key = off keybox = off keyreverse = off keypos = 1 colororder = 0.00000 0.00000 1.00000 0.00000 0.50000 0.00000 1.00000 0.00000 0.00000 0.00000 0.75000 0.75000 0.75000 0.00000 0.75000 0.75000 0.75000 0.00000 0.25000 0.25000 0.25000 dataaspectratio = 20 2 1 dataaspectratiomode = auto layer = bottom xlim = -10 10 ylim = -1 1 zlim = 0 1 clim = 0 1 alim = 0 1 xlimmode = auto ylimmode = auto zlimmode = auto climmode = auto alimmode = auto xlabel = -5.3352 ylabel = -4.7682 zlabel = -3.2778 title = -2.5540 xgrid = off ygrid = off zgrid = off xminorgrid = off yminorgrid = off zminorgrid = off xtick =-10 -5 0 5 10 ytick = -1.00000 -0.50000 0.00000 0.50000 1.00000 ztick = [ ] (0x0) xtickmode = auto ytickmode = auto ztickmode = auto xminortick = off yminortick = off zminortick = off xticklabel = yticklabel = zticklabel = xticklabelmode = auto yticklabelmode = auto zticklabelmode = auto interpreter = none color = 1 1 1 xcolor = 0 0 0 ycolor = 0 0 0 zcolor = 0 0 0 xscale = linear yscale = linear zscale = linear xdir = normal ydir = normal zdir = normal yaxislocation = left xaxislocation = bottom view = 0 90 nextplot = replace outerposition = 0 0 1 1 activepositionproperty = outerposition ambientlightcolor = 1 1 1 cameraposition = 0.00000 0.0000 9.16025 cameratarget = 0.00000 0.00000 0.50000 cameraupvector = -0 2 0 cameraviewangle = 6.6086 camerapositionmode = auto cameratargetmode = auto cameraupvectormode = auto cameraviewanglemode = auto currentpoint = 0 0 0 0 0 0 drawmode = normal fontangle = normal fontname = * fontsize = 12 fontunits = points fontweight = normal gridlinestyle = : linestyleorder = _ linewidth = 0.50000 minorgridlinestyle = : plotboxaspectratio =1 1 1 plotboxaspectratiomode = auto projection = orthographic tickdir = in tickdirmode = auto ticklength = 0.010000 0.025000 tightinset = 0 0 0 0 units = normalized
Рассмотрим наиболее часто используемые свойства осей:
В листинге 4.28 представлены команды, изменяющие внешний вид осей графика, изображённого на рис. 4.34. График функции $$x = sin(t)$$ на интервале $$[-3\pi; 3\pi]$$ после их применения представлен на рис. 4.38.
| Цвет | Цвет в формате RGB |
| Чёрный | [0 0 0] |
| Синий | [0 0 1] |
| Тёмно-синий | [0 0 128/255] |
| Зелёный | [0 1 0] |
| Тёмно-зелёный | [0 128/255 0] |
| Голубой | [0 1 1] |
| Тёмно-голубой | [0 128/255 128/255] |
| Красный | [1 0 0] |
| Тёмно-красный | [128/255 0 0] |
| Пурпурный | [1 0 1] |
| Тёмно-пурпурный | [128/255 0 128/255] |
| Жёлтый | [1 1 0] |
| Тёмно-жёлтый | [128/255 128/255 0] |
| Тёмно-серый | [128/255 128/255 128/255] |
| Светло-серый | [192/255 192/255 192/255] |
| Белый | [1 1 1] |
(рис 4.38) График функции x = sin(t) на интервале [-3 3].
h=figure( ); t=-3*pi:pi/100:3*pi; x=sin(t); plot(t, x); set(gca, ’box’, ’off’); % Убираем прямоугольную сетку вокруг оси. set(gca, ’fontname’, ’Arial’); % Определяем шрифт. set(gca, ’fontsize’, 20); % Определяем размер шрифта 20. % Включаем линии сетки, перпендикулярные OX и OY. set(gca, ’xgrid’, ’on’); set(gca, ’ygrid’, ’on’); % Устанавливаем координаты линий сетки, перпендикулярной OX. set(gca, ’xtick’,[-3 -1 0 1 2 ]);
Обращение к функции создания осей с определёнными свойствами имеет вид: $$axes(’Свойство1’,\ Значение1,\ ’Свойство2’,\ Значение2,\ ’Свойство3’,\ Значение3, . . . )$$; С помощью функции $$set$$ можно также изменять свойства линий, которые формируется с помощью подробно рассмотренной ранее функции $$plot$$.
Рассмотрим наиболее часто используемые свойства линий:
Для того, чтобы удалить объект в графическом окне, необходимо вызвать функцию $$delete(h)$$, где $$h$$ — указатель на удаляемый объект (указатель на линию, оси и т.д.). Следует понимать, что удаление осей приведёт к исчезновению всех объектов, которые располагались на них.
Очистка текущих осей осуществляется функцией $$cla$$, очистка текущего окна — функцией $$clf$$.
Рассмотрим описанные возможности работы с окнами на нескольких примерах. Авторы рекомендуют читателю внимательно изучить примеры 4.23, 4.24, в которых собраны стандартные приёмы работы с окнами, линиями графиков, осями и их свойствами.
Пример 4.23. Написать программу создания графиков функций $$x=e^{\cos(t)}$,$y=e^{\sin(t)}$, $z=\cos(t^2)$$ на интервале [-5;5]. Графики функций $$x=e^{\cos(t)}$, $y=e^{\sin(t)}$$ изобразить в графическом окне с именем WINDOW1 красным и синим цветом, а график функции $$z=\cos(t^2)$$ — в окне с именем WINDOW2 зелёным. В обоих окнах вывести линии сетки.
В листинге 4.29 приведено решение этой задачи с подробными комментариями.
t = -5:0.1:5; x= exp(cos(t)); y= exp(sin(t)); z=cos(t.^2); % Создаём первое графическое окно, указатель, на которое будет hfig1=figure; % храниться в переменной hfig1. % Создаём второе графическое окно, указатель, на которое будет hfig2=figure; % храниться в переменной hfig2. figure(hfig1); % Объявляем первое графическое окно текущим. % Выводим в нём оси, указатель на на которые будет храниться hAxes1=axes; % в переменной hAxes1. % Выводим в этом окне график функций x(t) и y(t), указатель на который % записываем в переменную h_gr1. В h_gr(1) будет храниться первая % линия — x(t), в h_gr(2) будет храниться вторая линия — y(t). h_gr1=plot(t, x, t, y); figure(hfig2); % Объявляем второе графическое окно текущим. % Выводим в нём оси, указатель на на которые будет храниться hAxes2=axes; % в переменной hAxes2. % Выводим в этом окне график функции z(t), указатель на который h_gr2=plot(t, z); % записываем в переменную h_gr2 . figure(hfig1); % Объявляем первое графическое окно текущим % Далее устанавливаем свойства осей и графиков в первом окне. % Отказываемся от стандартной нумерации окон для первого окна. set(hfig1, ’numbertitle’, ’off’); % Устанавливаем новое имя первого графического окна. set(hfig1, ’name’, ’WINDOW1’); % Включаем отображение линий сетки, перпендикулярной оси ОХ % для осей hAxes1. set(hAxes1, ’xgrid’, ’on’); % Включаем отображение линий сетки, перпендикулярной оси ОY set(hAxes1, ’ygrid’, ’on’); % для осей hAxes1. % Устанавливаем красный цвет первой линии в первом графическом окне. set(h_gr1(1), ’color’, ’r’); % Устанавливаем синий цвет второй линии в первом графическом окне. set(h_gr1(2), ’color’, ’b’); figure(hfig2);% Объявляем второе графическое окно текущим % Далее устанавливаем свойства осей и графиков во втором окне. % Отказываемся от стандартной нумерации окон для второго окна. set(hfig2, ’numbertitle’, ’off’); % Устанавливаем новое имя второго графического окна. set(hfig2, ’name’, ’WINDOW2’); % Включаем отображение линий сетки, перпендикулярной оси ОХ set(hAxes2, ’xgrid’, ’on’); % для осей hAxes2. % Включаем отображение линий сетки, перпендикулярной оси ОY set(hAxes2, ’ygrid’, ’on’); % для осей hAxes2. % Устанавливаем зелёный цвет первой линии во втором графическом окне. set(h_gr2, ’color’, ’g’); % Эта функция может быть и такой: set(h_gr2(1), ’ Color ’, ’ g ’);
На рис. 4.39 и 4.40 представлены созданные с помощью программы, приведённой в листинге 4.29, окна с графиками функций $$x=e^{\cos(t)}$, $y=e^{\sin(t)}$ и $z=\cos(t^2)$$ соответственно.
При программировании работы с графическими окнами вызов функции $$plot$$ может осуществляться со всеми параметрами, рассмотренными в этой главе. Для того, чтобы добавить новый график в текущие оси, необходимо перед вызовом функции $$plot$$ выполнить команду $$hold on$$. При добавлении графика в текущие оси с помощью функции $$plot$$ необходимо самостоятельно устанавливать цвет и тип графика.
На рис. 4.39. изображены графики функций: $$x = e^{cos(t)}$$ и $$y = e^{sin(t)}$$
(рис 4.39) Окно с графиками функций
На рис. 4.40. изображен график функции: $$z = cos(t^2)$$
(рис 4.40) Окно с графиком функции
Пример 4.24. Изобразить графики функций $$x_i=\alpha_ie^{\sin(t)}$, $y_i=\sin(\alpha_it)$, $z_i=\cos(\alpha_it)$, $v_i=\sin(2\alpha_it)+\cos(3\alpha_it)$$ на интервале [-5; 5], если коэффициенты $$\alpha = 0.5, 0.6, 0.73, 0.79$$ хранятся в текстовом файле gr.txt.
При решении этой задачи необходимо будет построить четыре множества графиков $$x_i, y_i, z_i и v_i$$. Каждое множество будем изображать в своих осях. В листинге 4.30 приведена программа, а на рис. 4.41 представлено полученное в результате графическое окно.
f=fopen(’gr.txt’, ’rt’); % Открываем файл gr.txt в режиме чтения. alf=fscanf(f, ’%f’, 4); % Считываем из него данные в массив alf. % Формируем массивы t, x, y, z, v t = -5:0.1:5; x=alf*exp(sin(t)); y=sin(alf*t); z=cos(alf*t); v=sin(2*alf*t)+cos(3*alf*t); hfig1=figure; % Создаём графическое окно % Устанавливаем новое имя первого графического окна. set(hfig1, ’numbertitle’, ’off’); set(hfig1, ’name’, ’Plots’); % Выводим в нём оси, указатель на которые будет храниться в переменной % haxes1. Оси будут располагаться в левом нижнем углу графического окна. haxes1=axes(’position’, [0.05 0.05 0.4 0.4]); plot(t, x); % Выводим множество графиков xi(t) % Выводим линии сетки на осях. set(haxes1, ’xgrid’, ’on’, ’ygrid’, ’on’); % Выводим в графическом окне оси, указатель на которые будет храниться % в переменной haxes2. Оси будут располагаться в правом нижнем углу % графического окна. haxes2=axes(’position’, [0.5 0.05 0.4 0.4]); plot(t, y); % Выводим множество графиков yi(t). % Выводим линии сетки на осях. set(haxes2, ’xgrid’, ’on’, ’ygrid’, ’on’); % Выводим в графическом окне оси, указатель на которые будет % храниться в переменной haxes3. Оси будут располагаться в % левом верхнем углу графического окна. haxes3=axes(’position’, [0.05 0.5 0.4 0.4]); plot(t, z); % Выводим множество графиков zi(t) % Выводим линии сетки на осях. set(haxes3, ’xgrid’, ’on’, ’ygrid’, ’on’); % Выводим в графическом окне оси, указатель на которые будет % храниться в переменной haxes3. Оси будут располагаться в % правом верхнем углу графического окна. haxes4=axes(’position’, [0.5 0.5 0.4 0.4]); plot(t, v); % Выводим множество графиков vi(t). % Выводим линии сетки на осях. set(haxes4, ’xgrid’, ’on’, ’ygrid’, ’on’);
На графиках не хватает текстовой информации, которая бы поясняла выведенные графики.
Для вывода текста можно использовать следующие функции:
На рис. 4.41. изображены графики функций: $$x_i = \alpha_ie^{sin(t)}, y_i = sin(\alpha_it),z_i = cos(\alpha_it), v_i= sin(2\alpha_it) + cos(3\alpha_it)$$
(рис 4.41) Окно с графиками функций
В листинге 4.31 представлена программа построения графика $$sin(x)$$ на интервале $$[-2\pi, 2\pi]$$ вместе с заголовками, подписями осей и примером использования функции $$text$$. Полученный в результате работы программы график представлен на рис. 4.42.
t=-2*pi:pi/50:2*pi; x=sin(t); plot(t, x); xlabel(’t’); ylabel(’x’); title(’Plot function x=sin(t)’); text(-1, -0.8, ’<- Point(-1,-0.8)’);
Все рассмотренные функции вывода текста формирует указатель на созданный текстовый объект, у которого с помощью функции $$set$$ можно установить соответствующие свойства, наиболее часто встречающиеся из которых приведены ниже:
(рис 4.42) График функции x = sin(t) с подписями
На этом мы заканчиваем краткое знакомство с графическими объектами языка Octave и предлагаем читателю самостоятельно поэкспериментировать с описанными свойствами графических объектов при написании собственных программ.
Двумерным будем считать такой график, в котором положение точки определяется двумя величинами. Двумерные графики наиболее часто строят в декартовой и полярной системах координат.
Декартова, или прямоугольная система координат задаётся двумя перпендикулярными прямыми, называемыми осями координат. Горизонтальная прямая $$X$$ — ось абсцисс, а вертикальная $$Y$$ — ось ординат. Точку пересечения осей называют началом координат. Четыре угла, образованные осями координат, носят название координатных углов. Положение точки в прямоугольной системе координат определяется значением двух величин, называемых координатами точки. Если точка имеет координаты $$x$$ и $$y$$, то $$x$$ — абсцисса точки, $$y$$ — ордината. Уравнение, связывающее координаты $$x$$ и $$y$$ является (называется) уравнением линии, если координаты любой точки этой линии удовлетворяют ему.
Величина y называется функцией переменной величины $$x$$, если каждому из тех значений, которые может принимать $$x$$, соответствует одно или несколько определённых значений $$y$$. При этом переменная величина $$x$$ называется аргументом функции $$y = f (x)$$. Говорят также, что величина $$y$$ зависит от величины $$x$$. Функция считается заданной, если для каждого значения аргумента существует соответствующее значение функции. Чаще всего используют следующие способы задания функций:
Совокупность всех значений, которые может принимать в условиях поставленной задачи аргумент $$x$$ функции $$y = f (x)$$, называется областью определения этой функции. Совокупность значений $$y$$, которые принимает функция $$f (x)$$, называется множеством значений функции.
Далее будем рассматривать построение графиков в прямоугольной системе координат на конкретных примерах.
Пример 4.1. Построить график функции $$y=\sin(x)+\frac{1}{3} \sin(3x)+\frac{1}{5}\sin(5x)$$ на интервале [-10; 10].
Для того, чтобы построить график функции $$f (x)$$ необходимо сформировать два массива $$x$$ и $$y$$ одинаковой размерности, а затем обратиться к функции $$plot$$.
Решение этой задачи представлено в листинге 4.1.
x = -10:0.1:10; % Формирование массива x. y=sin(x)+sin (3*x)/3+ sin (5*x )/5; % Формирование массива y. plot(x, y) % Построение графика функции.
В результате обращения к функции $$plot(x, y)$$ будет создано окно с именем Figure 1, в котором будет построен график функции $$y=\sin(x)+\frac{1}{3} \sin(3x)+\frac{1}{5}\sin(5x)$$.
График формируется путём соединения соседних точек прямыми линиями. Чем больше будет интервал между соседними точками (чем меньше будет точек), тем больше будет заметно, что график представляет из себя ломанную.
Если повторно обратиться к функции $$plot$$, то в этом же окне будет стёрт первый график и нарисован второй. Для построения нескольких графиков в одной системе координат можно поступить одним из следующих способов:
Рассмотрим построение нескольких графиков этими способами на примере решения следующей задачи.
На рис. 4.2. изображены графики функций: $$v = sin x, w = cos x, r = sin\frac{x}{2}, p =\frac{3}{2}cos x$$
(рис 4.2) Графики функций
Пример 4.2. Построить графики функций $$v=\sin x, w=\cos x, r=\sin \frac{x}{2}, p=\frac{3}{2} \cos x$$ на интервале $$[-4\pi; 4\pi]$$.
Построение графиков функций первым и вторым способом представлено в листинге 4.2. Получившиеся графики функций представлены на рис. 4.2.
% Способ первый x=-4*pi:0.1:4*pi; v=sin(x);w=cos(x); r=sin(x)/2; p=1.5*cos(x); plot(x, v, x, w, x, r, x, p); % Способ второй x=-4*pi:0.1:4*pi; v=sin(x); plot(x, v); hold on; v=cos(x); plot(x, v); v=sin(x)/2; plot(x, v); v=1.5*cos(x); plot(x, v);
Обратите внимание, что при построении графиков первым способом Octave> автоматически изменяет цвета изображаемых в одной системе координат графиков. Однако управлять цветом и видом каждого из изображаемых графиков может и пользователь, для чего необходимо воспользоваться полной формой функции $$plot: plot(x1, y 1, s1, x2, y 2, s2, . . ., xn, yn, sn)$$, где $$x1, x2, . . ., xn$$ — массивы абсцисс графиков; $$y1, y 2, . . ., yn$$ — массивы ординат графиков;
| Символ маркера | Изображение маркера |
| . | $$\cdot$$(точка) |
| * | * |
| $$\times$$ | $$\times$$ |
| + | + |
| $$\circ$$ | $$\odot$$ |
| s | $$\blacksquare$$ |
| d | $$\blacklozenge$$ |
| v | $$\blacktriangledown$$ |
| ^ | $$\blacktriangle$$ |
| < | $$\bigtriangledown$$ |
| > | $$\bigtriangleup$$ |
| p | $$\square$$ |
| h | $$\lozenge$$ |
| Символ | Цвет линии |
| y | жёлтый |
| m | розовый |
| c | голубой |
| r | красный |
| g | зелёный |
| d | синий |
| w | белый |
$$s1, s2, . . ., sn$$ — строка форматов, определяющая параметры линии и при необходимости, позволяющая вывести легенду.
В строке могут участвовать символы, отвечающие за тип линии, маркер, его размер, цвет линии и вывод легенды. Попробуем разобраться с этими символами. За сплошную линию отвечает символ "-". За маркеры отвечают следующие символы (см. табл. 4.1).
Цвет линии определяется буквой латинского алфавита (см. табл.4.2), можно использовать и цифры, но на взгляд авторов использование букв более логично (их легче запомнить по английским названиям цветов).
(рис 4.3) Результат работы функции plot(x = -pi:0.1:pi,sin(x)," -k; sin(x); ")
При определении строки, отвечающей за вывод линии, следует учитывать следующее:
Если необходима легенда для графика, то её следует включить в строку форматов, заключённую в символы ";". Например, команда $$plot(x = -pi : 0.1 : pi, sin(x), " -k; sin(x); ")$$ выведет на экран график функции $$y = sin(x)$$ чёрного цвета на интервале $$[-\pi; \pi]$$ c легендой $$"sin(x)"$$ (см. рис. 4.3)
Пользователь может управлять и величиной маркера, для этого после строки форматов следует указать имя параметра $$markersize$$ (размер маркера) и через запятую величину — целое число, определяющее размер маркера на графике. Например, команда $$plot(x = -pi : 0.1 : pi, sin(x), " -ok; sin(x); ", "markersize"$$, 4); выведет на экран график, представленный на рис. 4.4.
(рис 4.4) Результаты работы функции plot(x = -pi:0.1:pi, sin(x), " -ok; sin(x); ", "markersize", 4);
Для того, чтобы чтобы вывести график в новом окне, перед функцией plot, следует вызвать функцию $$figure()$$.
Внимание! При работе с графиками в Octave необходимо понимать следующее: щелчок по кнопке закрытия окна с графиками приводит не к уничтожению (закрытию) окна, а к его скрытию. При повторном вызове команды рисования графиков происходит восстановление окна, в котором и изображаются графики. Корректное закрытие графического окна можно осуществить в Octave только программно.
Графическое окно создаётся функцией $$figure : h =figure ()$$;
Здесь $$h$$ — переменная, в которой будет храниться дескриптор (номер) окна. Для дальнейших операций с окном надо будет использовать именно переменную, в которой хранится дескриптор.
Уничтожение (закрытие) окна осуществляется с помощью функции $$delete(h)$$, где $$h$$ — имя дескриптора закрываемого окна.
В Octave есть функция $$pause(n)$$, которая приостанавливает выполнение программы на $$n$$ секунд. Её логично вставлять перед функцией закрытия окна.
Octave представляет дополнительные возможности для оформления графиков:
При выводе текста с помощью функций $$xlabel, ylabel, title, text$$ можно выводить греческие
e^{cos(x)}, а для вывода $$x_{min}$$ — текст x_{min}. При работе с текстом можно также использовать синтаксис $$T_EX$$.
| Команда | Символ | Команда | Символ |
| \alpha | $$\alpha$$ | \upsilon | $$\upsilon$$ |
| \beta | $$\beta$$ | \phi | $$\phi$$ |
| \gamma | $$\gamma$$ | \chi | $$\chi$$ |
| \delta | $$\delta$$ | \psi | $$\psi$$ |
| \epsilon | $$\epsilon$$ | \omega | $$\omega$$ |
| \zeta | $$\zeta$$ | \Gamma | $$\Gamma$$ |
| \eta | $$\eta$$ | \Delta | $$\Delta$$ |
| \theta | $$\theta$$ | \Theta | $$\Theta$$ |
| \iota | $$\iota$$ | \Lambda | $$\Lambda$$ |
| \kappa | $$\kappa$$ | \Xi | $$\Xi$$ |
| \lambda | $$\lambda$$ | \Pi | $$\Pi$$ |
| \mu | $$\mu$$ | \Sigma | $$\Sigma$$ |
| \nu | $$\nu$$ | \Upsilon | $$\Upsilon$$ |
| \xi | $$\xi$$ | \Phi | $$\Phi$$ |
| \pi | $$\pi$$ | \Psi | $$\Psi$$ |
| \rho | $$\rho$$ | \Omega | $$\Omega$$ |
| \sigma | $$\sigma$$ | \forall | $$\forall$$ |
| \varsigma | $$\varsigma$$ | \exists | $$\exists$$ |
| \tau | $$\tau$$ | \approx | $$\approx$$ |
| \int | $$\int$$ | \in | $$\in$$ |
| \wedge | $$\wedge$$ | \sim | $$\sim$$ |
| \vee | $$\vee$$ | \leq | $$\leq$$ |
| \pm | $$\pm$$ | \leftrightarrow | $$\leftrightarrow$$ |
| \geq | $$\geq$$ | \leftarrow | $$\leftarrow$$ |
| \infty | $$\infty$$ | \uparrow | $$\uparrow$$ |
| \partial | $$\partial$$ | \rightarrow | $$\rightarrow$$ |
| \neq | $$\neq$$ | \downarrow | $$\downarrow$$ |
| \nabla | $$\nabla$$ | \circ | $$\circ$$ |
После описания основных возможностей по оформлению графиков рассмотрим ещё несколько примеров построения графиков.
Пример 4.3. Последовательно вывести в графическое окно графики функций $$y=\sin{x}, y=\sin(\frac{3x}{4}), y=\cos{x}, y=\cos\frac{x}{3}$$ с задержкой 5 секунд.
Текст решения задачи с комментариями приведён в листинге 4.3.
okno1=figure( ); % Создаём графическое окно c дескриптором okno1. x=-6*pi( ):pi( )/50:6*pi( ); % Определяем аргумент на интервале $$[-6\pi; 6\pi]$$ y=sin(x); % Вычисляем значение функции sin(x). plot(x, y, ’k’); % Выводим график функции sin(x) чёрного цвета. grid on; % Выводим линии сетки. title(’Plot y=sin(x)’ ); % Выводим заголовок графика. pause(5); % Приостанавливаем выполнение программы на 5 секунд. y=sin(0.75*x); plot(x, y, ’b’); % Выводим график функции sin(0.75x) голубого цвета. grid on; % Выводим линии сетки. title(’Plot y=sin(0.75x)’);% Выводим заголовок графика. pause(5); % Приостанавливаем выполнение программы на 5 секунд. y=cos(x); plot(x, y, ’r’); % Выводим график функции cos(x) красного цвета. grid on; % Выводим линии сетки. title(’Plot y=cos(x)’); % Выводим заголовок графика. pause(5); % Приостанавливаем выполнение программы на 5 секунд. y=cos(x /3); plot(x, y, ’g’); % Выводим график функции cos(x/3) зелёного цвета. grid on; % Выводим линии сетки. title(’Plot y=cos(x/3)’); % Выводим заголовок графика. pause(5); % Приостанавливаем выполнение программы на 5 секунд. delete(okno1); % Закрываем окно с дескриптором okno1.
При запуске программы будет создано графическое окно, в котором будет выведен график функции $$sin(x)$$ чёрного цвета с линиями сетки и заголовком. Это окно будет находиться на экране в течении 5 секунд, после чего очистится. Будет выведен график функции $$sin(0.75x)$$ голубого цвета с линиями сетки и заголовком, которое будет на экране в течении 5 секунд. Далее аналогично будут с задержками 5 секунд выведены графики функций $$cos(x)$$ и $$cos(x/3)$$. После этого окно автоматически закроется. Для понимания механизма работы с графическими окнами в Octave, авторы рекомендуют читателю при выводе графика $$sin(x)$$ попытаться закрыть окно и посмотреть, что из этого получится.
Пример 4.4. Построить графики функций $$y=e^{\sin x}, u=e^{\cos\frac{x}{3}}, v=e^{\sin\frac{x}{2}$$ на интервале $$[-3\pi; 3\pi]$$.
Рассмотрим два варианта построения графиков (см. листинг 4.4).
% __________________Способ первый _____________________________
x=-3*pi( ):pi( )/20:3*pi( );% Формируем массив x.
y= exp(sin(x)); % Формируем массив y.
u= exp(cos(x/3));% Формируем массив u.
v= exp(sin(x/2) );% Формируем массив v.
% Строим график функции y(x), сплошная чёрная линия, без маркера,
% в качестве легенды выводим $$e^{sin(x)}$$.
plot(x, y, "k;e^{sin(x)};")
hold on;% Блокируем режим очистки окна.
% Строим график функции u(x), сплошная чёрная линия, c маркером
% треугольником, размер маркера — 4, в качестве легенды выводим $$e^{cos(x/3)}$$.
plot(x, u, "->k; e^{cos(x/3)};", "markersize", 4)
% Строим график функции v(x), сплошная чёрная линия, c маркером
% окружностью, размер маркера — 4, в качестве легенды выводим $$e^{sin(x/2)}$$.
plot(x, v, "-ok;e^{sin(x/2)};", "markersize", 4 );
% __________________Способ второй _____________________________
x=-3*pi( ):pi( )/20:3*pi( );
y= exp(sin(x));
u= exp(cos(x/3));
v= exp(sin(x/2));
% Отличие вывода трёх графиков состоит в том, вместо 3-х функций plot и
% двух hold on используется одна функция plot в которой указаны те же
% параметры вывода графиков, что и в листинге 4.4
plot(x, y, "k;e^{sin(x)};", x, u, "->k;e^{cos(x/3)};", "markersize"
, 4, x, v, "-ok;e^{sin(x/2)};", "markersize", 4)
На рис. 4.5. изображены графики функций: $$y = e^{sinx}, u = e^{cos\frac{x}{3}}, v = e^{sin\frac{x}{2}}$$
(рис 4.5) Графики функций
Оба способа формируют один и тот же график (см. рис. 4.5).
Пример 4.5. Построить график функции $$y(x)=1 -\frac{0.4}{x} + \frac{0.05}{x^{2}$$ на интервале [-2; 2].
В связи с тем, что функция не определена в точке $$x = 0$$, будем строить её как графики двух функций $$y(x)$$ на полуинтервале [-2; 0) и $$y(x)$$ на полуинтервале (0; 2]. Текст программы на Octave с комментариями приведён в листинге 4.5, график функции — на рис. 4.6.
a =1;b= -0.4; c =0.05; x1 = _2:0.01: _0.1; % Определяем аргумент (массив x) на [-2;-_0.1]. x2 = 0.1:0.01:2; % Определяем аргумент (массив x) на [0.1; 2]. y1=a+b./x1+c./x1./x1; % Вычисляем значение функции y(x) на [_2; _0.1]. y2=a+b./x2+c./x2./x2; % Вычисляем значение функции y(x) на [0.1; 2]. % Строим график как график двух функций, на интервалах [-2; -0.1], [0.1; 2], % цвет графика чёрный, легенда — . plot(x1, y1, ’k;f(x)=a+b/x+c/x^2;’, x2, y2, ’k’); title(’y=f(x)’);% Подпись над графиком. xlabel(’X’); % Подпись оси X. ylabel(’Y’);% Подпись оси Y. grid on; % Рисуем линии сетки.
На рис. 4.6. изображен графики функции: $$y(x) = 1-\frac{0.4}{x}+\frac{0.05}{x^2}$$
(рис 4.6) График функции
Пример 4.6. Построить график функции $$y(x)=\frac{1}{x^{2}-2x-3$$ на интервале [-5; 7].
Уравнение $$x^{2}-2x-3=0$$ имеет корни -1, 3. Поэтому наша функция $$y(x)$$ будет иметь разрывы в этих точках $$x = -1, x = 3$$. Будем строить её, как графики трёх функций, на трёх интервалах [-5; _1.1], [0.9; 2.9], [3.1; 7]. Листинг 4.6 демонстрирует решение примера 4.6, а на рис. 4.7 изображён график функции $$y(x)=\frac{1}{x^{2}-2x-3$$ как результат работы этой программы.
% Определяем аргументы на интервалах [-5; -1.1], [0.9; 2.9], [3.1; 7]. x1 = -5:0.01: -1.1; x2 = -0.9:0.01:2.9; x3 = 3.1:0.01:7; % Вычисляем значение y(x) на соответствующих интервалах. y1 =1./( x1.* x1-2*x1-3); y2 =1./( x2.* x2-2*x2-3); y3 =1./( x3.* x3-2*x3-3); % Строим график чёрного цвета, как график 3-х функций. plot(x1, y1, ’k’, x2, y2, ’k’, x3, y3, ’k’); title(’y=f(x)’); % Подпись над графиком. xlabel(’X’); % Подпись оси X. ylabel(’Y’);. % Подпись оси Y. legend(’f(x)=1/(x^2-2x-3)’, 4); % Вывод легенды. grid on; % Рисуем линии сетки.
На рис. 4.7. изображен график функции: $$y(x) =\frac{1}{x^2-2x-3}$$
(рис 4.7) График функции
Ещё одну интересную возможность построения двух графиков предоставляет функция $$plotyy$$, которая позволяет изображать на графике две оси ординат, что очень удобно при построении графиков разных порядков. К сожалению эта функция не позволяет явно задавать типы изображаемых линий. На каждой из осей ординат подписи значений выводятся тем же цветом, что и график функции. Использование функции plotyy рассмотрено ниже.
Пример 4.7. Построить графики функции $$y=x^{3}, y=\cos2x$$ на интервале [-5; 5].
Решение этой задачи представлено в листинге 4.7, полученный график — на рис. 4.8.
x = -5:0.1:5; y=x.^3; z=cos(2*x); plotyy(x, y, x, z); grid on; title(’Plot x^3, cos(x/2)’); xlabel(’X’); ylabel(’Y’);
На рис. 4.8. изображены графики функций: $$y = x^3, y = cos 2x$$
(рис 4.8) Графики функции
Octave предоставляет возможность построить несколько осей в графическом окне и вывести на каждую из них свои графики. Для этого следует использовать функцию subplot: subplot(row, col, cur);
Параметры $$row$$ и $$col$$ определяют количество графиков по вертикали и горизонтали соответственно, $$cur$$ определяет номер текущего графика. Повторное обращение к функции $$subplot$$ с теми же значениями $$row$$ и $$col$$ позволяет просто изменяет номер текущего графика и может использоваться для переключения между графиками. Рассмотрим использование функции $$subplot$$ при решении следующей задачи.
Пример 4.8. Построить графики функции $$y=2e^{-0.15x^{2}}, z=e^{0.7x-0.25x^{2}}, u=0.5e^{-0.33x}\sin(2x+\frac{\pi}{3}), k=3\sin(x-0.22x^{2}), v=\cos x, w=e^{\cos x}$$ на интервале [-6; 6].
Решение задачи представлено в истинге 4.8л, полученное графическое окно — на рис. 4.9.
% Формируем массивы x, y, z, u, k, v, w.
x = -6:0.2:6; y=2*exp(*0.15* x.^2); z= exp(0.7*x-0.25* x.^2);
u=0.5*exp(-0.33*x).*sin(2*x+pi( )/3); k=3*sin(x*0.22.*x.^2);
v=cos(x);w= exp(cos(x));
% Делим графическое окно на 6 частей и объявляем первый график текущим.
subplot(3, 2, 1);
plot(x, y); % Строим график y(x) с линиями сетки и подписями.
grid on; title(’Plot y=2e^{-0.15x^2}’); xlabel(’x’); ylabel(’y’);
subplot(3, 2, 2); % Второй график объявляем текущим.
plot(x, z); % Строим график z(x) с линиями сетки и подписями.
grid on; title(’Plot z=cos^2(x)’); xlabel(’x’); ylabel(’z’);
subplot(3, 2, 3); % Третий график объявляем текущим.
plot(x, u); % Строим график u(x) с линиями сетки и подписями.
grid on; title( ’Plot u=0.5e^{-0.33x}sin (2x+pi/3)’);
xlabel(’x’); ylabel(’u’);
subplot(3, 2, 4); % Четвёртый график объявляем текущим.
plot(x, k); % Строим график k(x) с линиями сетки и подписями.
grid on; title(’Plot k=3sin(x-0.22x^2)’);
xlabel(’x’); ylabel(’k’);
subplot(3, 2, 5); % Пятый график объявляем текущим.
plot(x, v); % Строим график v(x) с линиями сетки и подписями.
grid on; title(’Plot v=cos(x)’); xlabel(’x’); ylabel(’v’);
subplot(3, 2, 6); % Шестой график объявляем текущим.
plot(x,w); % Строим график w(x) с линиями сетки и подписями.
grid on; title(’Plot w=e^{cos (x)}’ ); xlabel(’x’); ylabel(’w’);
Для построения графика функции можно использовать функцию $$fplot$$ следующей структуры: $$fplot(@f, [xmin, xmax], s)$$.
Здесь $$f$$ — имя функции (стандартной функции Octave или функции, определённой пользователем), $$[xmin, xmax]$$ — интервал, на котором будет строиться график, $$s$$ — строка формата, определяющая только параметры линии (но не легенду). Легенда графика формируется автоматически функцией $$fplot$$ без использования функции $$legend$$. Не позволяет формировать легенду и третий параметр функции $$fplot$$, в отличии от функции $$plot$$.
Пример 4.9. Используя функцию $$fplot$$, построить графики функций $$e^{\sin x},e^{\cos x},\sin x,\cos x$$ на интервале $$[-3\pi; 2\pi]$$.
Текст программы на языке Octave с комментариями приведён в листинге 4.9. Полученные графики можно увидеть на рис. 4.10.
% Определяем функцию f = exp(cos(x))
function y=f(x) y=exp(cos(x)); end
% Определяем функцию g = exp(sin(x))
function z=g(x) z=exp(sin(x)); end
h=figure( );
% Делим графическое окно на 4 части и объявляем первый график текущим.
subplot(2, 2, 1);
% Строим график g = exp(cos(x)) на интервале $$[-3\pi; 2\pi]$$
% голубого цвета с маркером.
fplot(@g, [-3*pi( ), 2*pi( )], ’-pb’);
title(’Plot y=e^{cos(x)}’); % Подписываем график.
grid on; % Проводим линии сетки
subplot(2, 2, 2); % Второй график объявляем текущим.
% Строим график f=exp(sin(x)) на интервале $$[-3\pi; 2\pi]$$
% красного цвета с маркером.
fplot(@f, [-3*pi( ), 2-pi( )], ’-or’);
title(’Plot z=e^{sin(x)}’);% Подписываем график.
grid on; % Проводим линии сетки
subplot ( 2, 2, 3 ); % Третий график объявляем текущим.
% Строим график sin(x) на интервале $$[-3\pi; 2\pi]$$ чёрного цвета
fplot(@sin, [-3*pi( ), 2*pi( )], ’k’);
title(’Plot sin(x)’); % Подписываем график.
grid on; % Проводим линии сетки
subplot(2, 2, 4); % Четвёртый график объявляем текущим.
% Строим график cos(x) на интервале $$[-3\pi; 2\pi]$$ зелёного цвета
fplot(@cos, [-3*pi( ), 2*pi( )], ’g’);
title(’Plot cos(x)’); % Подписываем график.
grid on; % Проводим линии сетки
(рис 4.9) Графики функций y(x), z(x), u(x), k(x), v(x), w(x)
Полярная система координат состоит из заданной фиксированной точки $$O$$, называемой полюсом, концентрических окружностей с центром в полюсе и лучей, выходящих из точки $$O$$, один из которых, $$OX$$, называют полярной осью. Положение любой точки $$M$$ в полярных координатах можно задать положительным числом ρ = |OM | (полярный радиус) и числом φ, равным величине угла ∠XOM (полярный угол). Числа ρ и φ называют полярными координатами точки $$M$$ и обозначают $$M$$ (ρ, φ).
Для формирования графика в полярной системе координат необходимо сформировать массивы значений полярного угла и полярного радиуса и обратиться к функции $$polar: polar(phi, ro, s)$$, где $$phi$$ — массив полярных углов; ro — массив полярных радиусов; $$s$$ — строка, состоящая из трёх символов, которые определяют цвет линии, тип маркера и тип линии (см. табл. 4.1, 4.2).
В качестве примера использования функции polar рассмотрим решение следующей задачи.
Пример 4.10. Построить график лемнискаты.
Уравнение лемнискаты в полярных координатах имеет вид: $$\rho=a\sqrt{2\cos2\varphi}$$, функция ρ определена при $$-\frac{\pi}{2}\leq\varphi\leq\frac{\pi}{2}(\cos2\varphi\geq 0)$$. Поэтому листинг для изображения графика лемнискаты будет таким.
fi = -pi/4:pi/200:pi/4; % Определяем массив полярного угла fi. % Определяем массив положительных значений полярного радиуса ro. ro=3*sqrt(2*cos(2*fi)); polar(fi, ro, ’r’); % Рисуем правую часть лемнискаты. hold on; % Блокируем режим очистки окна. polar(fi, -ro, ’r’); % Рисуем левую часть лемнискаты. grid on;
На рис. 4.10. изображены графики функций: $$e^{sinx}, e^{cos x}, sin x, cos x$$
(рис 4.10) Графики функций
(рис 4.11) График лемнискаты в полярных координатах
Полученный график изображён на рис. 4.11.
Пример 4.11. Построить графики архимедовой спирали, гиперболической спирали и логарифмической спирали в полярных координатах.
Уравнение архимедовой спирали в полярных координатах имеет вид: $$\rho=\alpha\varphi$$, гиперболической — $$\rho=\frac{\alpha}{\varphi}$$. Соотношение $$\rho=\alpha e^{k\varphi}, k=\ctg\alpha$$ является уравнением логарифмической спирали в полярных координатах. Частным случаем логарифмической спирали ($$\alpha=\frac{\pi}{2}, k=0$$) является уравнение окружности ($$\rho=\alpha$$).
В листинге 4.11 приведён текст программы, позволяющей построить в одном графическом окне четыре оси координат, в каждом из которых построить свой график — архимедову, гиперболическую и логарифмическую спирали, а также окружность.
График представлен на рис. 4.12.
h=figure( ) clear all; % Формируем массивы fi1, fi2, fi3, fi4, ro1, ro2, ro3, ro4. fi1 =0:pi/20:6*pi; fi 2=pi/3:pi /200:6*pi; fi3 =0:pi/20:4*pi; fi4 = -pi:pi/20:pi; ro1=4* f i 1; ro2 =0.5./fi2; ro3=4*exp(0.2*fi3); for i = 1:41 ro4(i) =4; endfor % Делим графическое окно на 4 части и объявляем первый график текущим. subplot(2, 2, 1); polar(fi1, ro1); % Строим график архимедовой спирали. title(’Graph of Archimedean spiral’); % Подписываем график. subplot(2, 2, 2); % Второй график объявляем текущим. polar(fi2, ro2); % Строим график гиперболической спирали. title(’Graph of the hyperbolic spiral’); % Подписываем график. subplot(2, 2, 3); % Третий график объявляем текущим. polar(fi3, ro3); % Строим график логарифмической спирали. title(’Graph of the logarithmic spiral’); % Подписываем график. subplot(2, 2, 4); % Четвёртый график объявляем текущим. polar(fi4, ro4); % Строим график окружности. title(’Graph the circle’); % Подписываем график.
Задание функции $$y(x)$$ с помощью равенств $$x = f (t)$$ и $$y = g(t)$$ называют параметрическим, а вспомогательную величину $$t$$ — параметром. Построение графика функции, заданной параметрически, можно осуществлять следующим образом:
В качестве примера рассмотрим построение график эпициклоиды и астроиды.
Пример 4.12. Построить график эпициклоиды. Уравнение эпициклоиды в параметрической форме имеет вид $$x = 4 cos t - cos 4t, y = 4 sin t -sin 4t$$, $$t\in[0; 2\pi]$$. В листинге 4.12 представлен текст программы для изображения графика эпициклоиды, а на рис. 4.13 — сам график.
(рис 4.12) Графики архимедовой, гиперболической и логарифмической спиралей, окружности в полярных координатах
t =0: pi/50:2 *pi; x=4*cos(t)-cos(4*t ); y=4*sin(t)-sin(4*t); plot(x, y); grid on;
Пример 4.13. Построить график астроиды.
Уравнение астроиды в параметрической форме имеет вид $$x=3 \cos^{3}t, y=3\sin^{3}t, t\in[0;2\pi]$$. В листинге 4.13 представлен текст программы для изображения графика астроиды, а на рис. 4.14 — сам график.
t =0:pi/50:2*pi; x=3*cos(t).^3; y=3* sin(t).^3; plot(x, y); grid on;
(рис 4.13) График эпициклоиды
(рис 4.14) График астроиды
(рис 4.15) Пример использования функции bar(y)
Функция $$bar$$ предназначена для построения гистограммы. Функция $$bar(y)$$ выводит элементы массива $$y$$ в виде гистограммы, в качестве массива $$x$$ выступает массив номеров элементов массива y. Функция $$bar(x, y)$$ выводит гистограмму элементов массива y в виде столбцов в позициях, определяемых массивом $$x$$, элементы которого должны быть упорядочены в порядке возрастания.
Рассмотрим несколько примеров. Фрагмент y=[5; 6; 7; 8; 9; 8; 7; 6;4; 3]; bar(y); строит гистограмму, представленную на рис. 4.15.
Фрагмент $$x1=[-2,-1,0,1,2,3,4]; y1=$$exp(sin$$(x1));$$ bar$$(x1,y1)$$; строит гистограмму, представленную на рис. 4.16.
График поверхности (трёхмерный или 3D-график) — это график, положение точки в котором определяется значениями трёх координат.
Дадим определение прямоугольной (или декартовой) системы координат в пространстве.
(рис 4.16) Пример использования функции bar(x, y)
Прямоугольная система координат в пространстве состоит из заданной фиксированной точки $$О$$ пространства, называемой началом координат, и трёх перпендикулярных прямых пространства $$OX, OY$$ и $$OZ$$, не лежащих в одной плоскости и пересекающихся в начале координат, — их называют координатными осями ($$OX$$ — ось абсцисс, $$OY$$ — ось ординат, $$OZ$$ — ось аппликат). Положение точки $$M$$ в пространственной системе координат определяется значением трёх координат и обозначается $$M (x, y, z)$$. Три плоскости, содержащие пары координатных осей, называются координатными плоскостями $$XY, XZ$$ и $$YZ$$.
Величина $$z$$ называется функцией двух величин $$x$$ и $$y$$, если каждой паре чисел, которые могут быть значениями переменных $$x$$ и $$y$$, соответствует одно или несколько определённых значений величины $$z$$. При этом переменные $$x$$ и $$y$$ называют аргументами функции $$z(x, y)$$. Пары тех чисел, которые могут быть значениями аргументов $$x$$, $$y$$ функции $$z(x, y)$$, в совокупности составляют область определения этой функции.
Для построения графика двух переменных $$z = f (x, y)$$ необходимо выполнить следующие действия.
Для формирования прямоугольной сетки в Octave есть функция $$meshgrid$$. Рассмотрим построение трёхмерного графика на следующем примере.
Пример 4.14. Построить график функции $$z(x,y)=3x^{2}-2sin^{2}y, x \in [-2,2], y \in [-3,3]$$.
Для формирования сетки воспользуемся функцией $$meshgrid$$.
>>>[x y]=meshgrid(-2:2,-3:3) x = -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 y = -3 -3 -3 -3 -3 -2 -2 -2 -2 -2 -1 -1 -1 -1 -1 0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
После формирования сетки вычислим значение функции во всех узловых точках
>>> z=3*x.*x-2*sin(y).^2 z = 11.96017 2.96017 -0.03983 2.96017 11.96017 10.34636 1.34636 -1.65364 1.34636 10.34636 10.58385 1.58385 -1.41615 1.58385 10.58385 12.00000 3.00000 0.00000 3.00000 12.00000 10.58385 1.58385 -1.41615 1.58385 10.58385 10.34636 1.34636 -1.65364 1.34636 10.34636 11.96017 2.96017 -0.03983 2.96017 11.96017
На рис. 4.17. изображен график функции: $$z(x, y) = 3x^2-2sin^{2y}$$
(рис 4.17) График функции
Для построения каркасного графика следует обратиться к функции $$mesh: mesh(x, y, z)$$;
После это будет создано графическое окно с трёхмерным графиком (см. рис. 4.17). Как видно, полученный график получился грубым, для получения менее грубого графика следует сетку сделать более плотной (см. листинг 4.14 и рис. 4.18).
[x y]= meshgrid(- 2:0.1:2, -3:0.1:3); z=3*x.*x-2*sin(y).^2 mesh(x, y, z);
Любой трёхмерный график можно вращать, используя мышку.
Для построения поверхностей, кроме функции $$mesh$$ построения каркасного графика, есть функция $$surf$$, которая строит каркасную поверхность, заливая её каждую клетку цветом, который зависит от значения функции в узлах сетки.
Пример 4.15. С использованием функции $$surf$$ построить график функции $$z(x,y)=\sqrt{sin^{2}x+\cos^{2}y}$$.
В листинге 4.15 представлено решение задачи, а на рис. 4.19 изображён получившийся график.
На рис. 4.18. изображен график функции: $$z(x, y) = 3x^2-2sin^{2}y$$
(рис 4.18) График функции с плотной сеткой
[x y]= meshgrid(-2:0.2:2, 0:0.2:4); z=sqrt(sin(x).^2+cos(y).^2); surf(x, y, z);
В Octave можно построить графики двух поверхностей в одной системе координат, для этого, как и для плоских графиков, следует использовать команду $$hold on$$, которая блокирует создание второго нового окна при выполнении команд $$surf$$ или $$mesh$$.
Пример 4.16. Построить в одной системе координат графики функций $$z(x,y)=\pm(2x^{2}+3y^{4})-1$$.
Решение задачи с использованием функции $$surf$$ представлено в листинге 4.16, полученный график изображён на рис. 4.20.
h=figure( ); [x y]= meshgrid(-2:0.1:2, -3:0.1:3); z=2*x.^2+3*y.^4-1; z1=-2*x.^2-3*y.^4-1; surf(x, y, z); hold on surf(x, y, z1);
На рис. 4.19. изображен график функции: $$z(x, y) =\sqrt{sin^2x + cos^2y}$$
(рис 4.19) График функции
(рис 4.20) Изображение двух поверхностей в одной системе координат с использованием функции surf
(рис 4.21) Изображение двух поверхностей в одной системе координат с использованием функции mesh
Построение поверхности с помощью функции $$mesh$$ можно осуществить аналогично (см. листинг 4.17), графики функций — можно увидеть на рис. 4.21.
h=figure( ); [x y]= meshgrid(-2:0.1:2, -3:0.1:3); z=2*x.^2+3*y.^4-1; z1=-2*x.^2-3*y.^4-1; mesh(x, y, z); hold on mesh(x, y, z1);
При построении графиков поверхностей, заданных параметрически $$x(u, v), y(u, v)$$ и $$z(u, v)$$ необходимо построить матрицы $$X, Y$$ и $$Z$$ одинакового размера. Для этого массивы $$u$$ и $$v$$ должны быть одинакового размера. Можно выделить два основных вида представления $$x, y$$ и $$z$$ в случае параметрического задания поверхностей:
Рассмотрим несколько задач построения графиков поверхностей заданных параметрически.
Пример 4.17. Построить поверхность однополостного гиперболоида, уравнение которого задано в параметрическом виде $$x(u, v) = ch(u)cos(v), y (u, v) = ch(u)sin(v), z (u, v) = sh(u), u \in [0, \pi ], v \in [0, 2\pi]$$.
В листинге 4.18 представлено решение этой задачи, согласно описанному выше алгоритму. График однополостного гиперболоида представлен на рис. 4.22.
clear all; h =3.14/50; u = [0:h:3.14]’; % Формируем вектор-столбец u. % Формируем вектор-строку v. Обратите внимание, u — столбец, % v — строка с одинаковым количеством элементов. v =[0:2*h:6.28]; % Формируем матрицу X как матричное произведение ch(u) cos(v). X=cosh(u)*cos(v); % Формируем матрицу Y как матричное произведение ch(u)*sin(v). Y=cosh(u)*sin(v); % Формируем матрицу Z как матричное произведение столбца sh(u) % на строку ones(size(v)). Z=sinh(u)*ones(size(v)); % Формируем график поверхности. surf(X, Y, Z); grid on; % Подписываем график и оси. title(’Plank hyperboloid’); xlabel(’X’); ylabel(’Y’); zlabel(’Z’)
(рис 4.22) График однополостного гиперболоида
Рассмотрим несколько способов построения сферы в Octave.
Пример 4.18. Построить поверхность сферы с центром $$(x_{0}, y_{0}, z_{0})$$ и радиусом $$R$$.
В декартовой системе координат уравнение сферы имеет вид: $$(x-x_{0})^{2}+(y-y_{0})^{2}+(z-z_{0})^{2}=R^{2}$$. Его можно записать в параметрическом виде
$$\begin{cases}x(u,v)=x_{0} + R \sin(u)\cos(v), \\y(u,v)=y_{0}+R\sin(u)\sin(v), \\z(u,v)=z_{0} + R\cos(u), \\\end{cases}$$где $$u\in[0,2\pi), v\in[0,\pi]$$.
Методика построения сферы подобна методике построения однополостного гиперболоида, описанной в примере 4.17. В листинге 4.19 представлен текст программы построения сферы с центром в точке (1, 1, 1) и радиусом $$R = 4$$, а на рис. 4.23 изображена сфера.
clear all; h=pi/30; u=[-0:h:pi]’; % Формируем вектор-столбец u. v =[0:2*h:2*pi ]; % Формируем вектор-строку v. % Формируем матрицу X, используя матричное произведение sin(u)*cos(v). x=1+4*sin(u)*cos(v); % Формируем матрицу Y, используя произведение sin(u)*sin(v). y=1+4*sin(u)*sin(v); % Формируем матрицу Z, используя произведение столбца % cos(u) на строку ones(size(v)). z=1+4*cos(u)*ones(size(v)); % Формируем график поверхности. surf(x, y, z); grid on; % Подписываем график и оси. title(’SPHERE’); xlabel(’X’); ylabel(’Y’); zlabel(’Z’);
(рис 4.23) График сферы, построенный с использованием функции surf
Octave содержит встроенную функцию $$[X, Y, Z] = sphere(n)$$, позволяющую формировать матрицы $$(X, Y, Z)$$ размерности $$n + 1$$ для построения сферы единичного радиуса (см. пример 4.18) с центром в начале координат.
Для построения сферы единичного радиуса с центром в начале координат достаточно двух команд $$[X,Y,Z]=sphere(n); surf(X,Y,Z)$$. Чем n больше, тем более "округлой" будет сфера. На рис. 4.24 изображена сфера единичного радиуса в центре в начале координат при n = 25.
(рис 4.24) График сферы единичного радиуса, построенный с использованием функции sphere(25)
Встроенную функцию $$sphere(n)$$ можно использовать и для построения сферы с центром $$(x_0, y_0, z_0)$$ и радиусом $$R$$. В листинге 4.20 приведено решение примера 4.18 с помощью функции sphere(n).
clear all; x0 =2; y0=_2;z0 =5;R=10 % Определяем центр и радиус сферы. % Формируем матрицы X, Y, Z для построения сферы единичного радиуса % с центром в начале координат, используя функцию sphere(n). [X, Y, Z]= sphere(25); % Пересчитываем матрицы X,Y,Z для сферы с центром x0, y0, z0 и радиусом R. X=x0+R*X;Y=y0+R*Y; Z=z0+R*Z; surf(X, Y, Z) % Изображаем сферу
В результате работы программы будет построена сфера, представленная на рис. 4.25.
Сфера является частным случаем более общей фигуры — эллипсоида. Рассмотрим два способа построения эллипсоида.
(рис 4.25) Сфера, построенная с помощью программы, представленной в листинге 4.20
Пример 4.19. Построить поверхность эллипсоида, уравнение которой задано в параметрическом виде:
$$\left\{\begin{aligned}x(u,v)=x_0+a\sin(u)\cos(v),\\y(u,v)=y_0+b\sin(u)\sin(v),\\z(u,v)=z_0+c\cos(u).\end{aligned}\right.$$Здесь $$a, b, c$$ — полуоси эллипсоида, $$(x_0, y_0, z_0)$$ — центр эллипсоида.
Методика построения эллипсоида подобна тому, как ранее были построены однополостный гиперболоид (пример 4.17) и сфера (пример 4.18). Для этого необходимо сформировать матрицы $$X, Y$$ и $$Z$$, после чего вызвать функцию $$surf$$. Как это сделать показано в листинге 4.21.
clear all; h=pi/30; u=[-0:h:pi]’; % Формируем вектор-столбец u. v =[0:2*h:2*pi]; % Формируем вектор-строку v. % Формируем матрицу X, используя матричное произведение sin(u)*cos(v). a =3;b=7; c =1; x0=y0=z0 =10;x=x0+a*sin(u)*cos(v); % Формируем матрицу Y, используя произведение sin(u)*sin(v). y=y0+b*sin(u)*sin(v); % Формируем матрицу Z, используя произведение столбца % cos(u) на строку ones(size(v)). z=z0+c*cos(u)*ones(size(v)); surf(x, y, z); grid on; % Формируем эллипсоид. % Подписываем график и оси. title(’ELLIPSOID’); xlabel(’X’); ylabel(’Y’); zlabel(’Z’);
Эллипсоид с центром в точке (10, 10, 10) и полуосями $$a = 3, b = 7, c = 1$$ представлен на рис. 4.26.
Однако, для построения эллипсоида в Octave существует функция $$[X, Y, Z] = ellipsoid(xc, yc, zc, xr, yr, zr, n)$$, которая позволяет автоматически сформировать матрицы $$X, Y, Z$$.
В функции $$ellipsoid$$:
Для построения эллипсоида, представленного на рис. 4.23 достаточно ввести команды
a =3;b=7; c =1; x0=y0=z0 =10; [X, Y, Z]= ellipsoid(x0, y0, z0, a, b, c, 30); surf(x, y, z); grid on; title(’ELLIPSOID’); xlabel(’X’); ylabel(’Y’); zlabel(’Z’);
Для построения цилиндров и круговых конусов можно использовать функцию $$cylinder$$ для формирования матриц $$X, Y, Z$$. Затем строим саму поверхность (цилиндр, конус) с помощью функции $$surf$$.
Познакомимся с функцией cylinder подробнее. Обращение к функции имеет вид. $$[X, Y, Z] = cylinder(r, n)$$;
Здесь $$r$$ — массив радиусов; если мы строим цилиндр, $$r$$ — массив, состоящий из двух одинаковых значений, функция требует как минимум два значения, и для построения цилиндра это будут радиус верхнего и нижнего основания; при построении конуса r является массивом радиусов горизонтальных сечений кругового конуса;
$$X, Y, Z$$ — формируемые для построения поверхности (конуса, цилиндра) матрицы размерности $$n + 1$$.
Рассмотрим несколько примеров.
Пример 4.20. Построить цилиндр радиуса $$R = 4$$ и высотой $$h = 1$$.
Текст программы приведён в листинге 4.22, график — на рисунке 4.27.
(рис 4.26) Эллипсоид с центром в точке (10, 10, 10) и полуосями a = 3,b = 7, c = 1
clear all;
[x, y, z] = cylinder([4, 4], 25); % Формирование матриц x, y, z.
grid on; surf(x, y, z); % Построение цилиндра.
title("Cylinder")
Пример 4.21. Построить цилиндр радиуса 4 и высотой 20.
Текст программы приведён в листинге 4.23, график — на рисунке 4.28.
clear all;
[x, y, z] = cylinder([4, 4], 25); % Формирование матриц x, y, z.
grid on;
surf(x, y, 20*z ); % Построение цилиндра с учётом высоты h = 20.
title("Cylinder")
Пример 4.22. Примеры круговых конусов.
Рассмотрим несколько примеров.
(рис 4.27) Цилиндр радиуса R = 4 и высотой h = 1
(рис 4.28) Цилиндр радиуса R = 4 и высотой h = 20
(рис 4.29) Усечённый круговой конус к листингу 4.24
Усечённый круговой конус, представленный на рис. 4.29, генерируется программой из листинга 4.24.
clear all; [x, y, z] = cylinder(2:1:10, 25);
grid on; surf(x, y, z);
title("Cone"); xlabel(’X’); ylabel(’Y’); zlabel(’Z’);
Круговой конус, представленный на рис. 4.30, генерируется программой в листинге 4.25.
clear all[x, y, z] = cylinder([5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5], 25);
grid on; mesh(x, y, z);
title("Cone") xlabel(’X’); ylabel(’Y’); zlabel(’Z’);
В завершении приведён листинг 4.26, который генерирует поверхность, представленную на рис. 4.31.
(рис 4.30) Круговой конус к листингу 4.25
clear all[x, y, z] = cylinder([1, 3, 5, 7, 6, 4], 25);
surf(x, y, z);
title("Surface"); xlabel(’X’); ylabel(’Y’); zlabel(’Z’);
При изучении движения точки на плоскости Octave позволит построить график движения и проследить за движением. Построить анимационный ролик можно с помощью функции $$comet(x, y)$$, которая позволит увидеть движение точки вдоль кривой $$y(x)$$ на плоскости.
Для движения точки на плоскости вдоль синусоиды достаточно ввести команды:
x=0: pi/30:6*pi; y=sin(x); comet(x, y);
Процесс движения точки вдоль синусоиды представлен на рис. 4.32, окончательный вид траектории движения точки вдоль синусоиды показан на рис. 4.33.
(рис 4.31) Поверхность к листингу 4.26
(рис 4.32) Движение точки вдоль синусоиды
(рис 4.33) Окончательный вид траектории движения точки
Встроенный язык Octave — объектно-ориентированный язык программирования. Все объекты находятся в определённой иерархии по отношению друг к другу. Рассмотрим основные графические объекты для работы с графикой и общие принципы работы с объектами на примере построения графика функции $$x(t) = sin(t)$$ на интервале $$[-3\pi; 3\pi]$$. Построим график функции $$x(t)$$:
t=-3*pi:pi/100:3*pi; x=sin(t); plot(t, x);
Окно с графиком синуса на интервале $$[-3\pi; 3\pi]$$ представлено на рис. 4.34. В результате работы функции $$plot$$ были созданы три графических объекта:
Figure 1;При работе с переменными, в которых хранятся объекты, пользователь оперирует ими как обычными переменными. Однако реально это указатели — адреса в памяти, в которых хранятся объекты; в Octave в качестве указателя используется номер объекта.
Для получения указателей на объекты в языке Octave есть три функции:
(рис 4.34) График функции y = sin(x) на интервале [-3; 3]
Для установки свойств объектов служит функция set
$$set(h,\ ’Свойство1’,\ Значение1,\ ’Свойство2’,\ Значение2,\ ’Свойство3’,\ Значение3, . . . )$$
Здесь $$h$$ — указатель на объект, свойства которого будут устанавливаться (изменяться); $$’Свойство1’,\ ’Свойство2’,\ ’Свойство3’, . . .$$ — имена свойств, которые будут изменяться; $$Значение1,\ Значение2,\ Значение3, . . .$$ — новые значения свойств.
В простейшем виде функция $$set$$ имеет вид: $$set(h,\ ’Свойство’,\ Значение )$$ Для получения свойства объекта служит функция $$get: get(h,\ ’Свойство’ )$$; Функция возвращает значения $$Свойства$$ объекта с указателем $$h$$. Если к функции $$get$$ обратиться с одним параметром $$h$$, то функция вернёт значения всех свойств объекта в виде $$Свойство\ =\ Значение$$.
Как уже рассматривалось ранее, для создания графического окна служит функция $$figure()$$, которая создаёт пустое графическое окно (см. рис. 4.35) и возвращает указатель на него.
(рис 4.35) Окно, созданное с помощью функции figure()
Например:
>>> g=figure() g = 12
Если есть несколько окон, то окно с указателем $$g$$ выдвигается на передний план и становится текущим.
Как при создании графиков с определёнными свойствами с помощью функции $$plot$$, при создании графических окон, осей и других объектов можно сразу определять некоторые свойства создаваемых объектов. Обращение к функции создания окна с определёнными свойствами имеет вид $$figure(’Свойство1’,\ Значение1,\ ’Свойство2’,\ Значение2,\ ’Свойство3’,\ Значение3, . . . )$$; Для удаления (закрытия) окна с указателем $$h$$ служит функция $$delete(h)$$. Доступ к имени окна осуществляется с помощью свойства $$name$$, хранящее строку, которая будет дописана к имени окна после стандартного имени окна Figure 1, Figure 2, ...; Например,
h=figure(); set(h,’name’,’New Window’)
В результате появится окно, представленное на рис. 4.36. Если свойству $$numbertitle$$ присвоить значение $$’off’$$, то это позволит отказаться от текущей нумерации окон Figure 1, Figure 2, ... (см. листинг ниже и рис. 4.37).
h=figure( ); set(h, ’numbertitle’, ’off’) set(h, ’name’, ’New Window’)
(рис 4.36) Окно с изменённым заголовком
(рис 4.37) Окно после выключения стандартной нумерации окон
Как и у многих рассматриваемых графических объектов, у окна есть свойство $$Position$$, определяющее расположение объекта. $$Position$$ — массив из четырёх элементов $$[xleft ybottom width height]; xleft, ybottom$$ определяют координаты левого нижнего угла экрана, относительно левого нижнего угла монитора; $$width$$ — ширина; $$height$$ — высота графического окна в пикселях.
Создадим окно с именем $$"New Window"$$ шириной и высотой 400 пикселей, с левым нижним углом с координатами (75, 90):
h=figure(’position’, [75 90 400 400]) set(h, ’numbertitle’, ’off’) set(h, ’name’, ’New Window’)
Для создания осей в текущем окне служит функция $$axes$$, которая возвращает указатель на созданные оси.
Для получения всех свойств осей построенного с помощью предыдущего листингаграфика пользователь может ввести команду $$get(gca)$$
В листинге 4.27 приведены свойства осей графика, представленного на рис. 4.34.
>>>ans = scalar structure containing the fields: beingdeleted = off busyaction = queue buttondownfcn = [ ] (0x0) children = -6.1976 clipping = on createfcn = [ ] (0x0) deletefcn = [ ] (0x0) handlevisibility = on hittest = on interruptible = on parent = 1 selected= off selectionhighlight = on tag = type = axes userdata = [ ] (0x0) visible = on __modified__ = on uicontextmenu = [ ] (0x0) position = 0.13000 0.11000 0.77500 0.81500 box = on key = off keybox = off keyreverse = off keypos = 1 colororder = 0.00000 0.00000 1.00000 0.00000 0.50000 0.00000 1.00000 0.00000 0.00000 0.00000 0.75000 0.75000 0.75000 0.00000 0.75000 0.75000 0.75000 0.00000 0.25000 0.25000 0.25000 dataaspectratio = 20 2 1 dataaspectratiomode = auto layer = bottom xlim = -10 10 ylim = -1 1 zlim = 0 1 clim = 0 1 alim = 0 1 xlimmode = auto ylimmode = auto zlimmode = auto climmode = auto alimmode = auto xlabel = -5.3352 ylabel = -4.7682 zlabel = -3.2778 title = -2.5540 xgrid = off ygrid = off zgrid = off xminorgrid = off yminorgrid = off zminorgrid = off xtick =-10 -5 0 5 10 ytick = -1.00000 -0.50000 0.00000 0.50000 1.00000 ztick = [ ] (0x0) xtickmode = auto ytickmode = auto ztickmode = auto xminortick = off yminortick = off zminortick = off xticklabel = yticklabel = zticklabel = xticklabelmode = auto yticklabelmode = auto zticklabelmode = auto interpreter = none color = 1 1 1 xcolor = 0 0 0 ycolor = 0 0 0 zcolor = 0 0 0 xscale = linear yscale = linear zscale = linear xdir = normal ydir = normal zdir = normal yaxislocation = left xaxislocation = bottom view = 0 90 nextplot = replace outerposition = 0 0 1 1 activepositionproperty = outerposition ambientlightcolor = 1 1 1 cameraposition = 0.00000 0.0000 9.16025 cameratarget = 0.00000 0.00000 0.50000 cameraupvector = -0 2 0 cameraviewangle = 6.6086 camerapositionmode = auto cameratargetmode = auto cameraupvectormode = auto cameraviewanglemode = auto currentpoint = 0 0 0 0 0 0 drawmode = normal fontangle = normal fontname = * fontsize = 12 fontunits = points fontweight = normal gridlinestyle = : linestyleorder = _ linewidth = 0.50000 minorgridlinestyle = : plotboxaspectratio =1 1 1 plotboxaspectratiomode = auto projection = orthographic tickdir = in tickdirmode = auto ticklength = 0.010000 0.025000 tightinset = 0 0 0 0 units = normalized
Рассмотрим наиболее часто используемые свойства осей:
В листинге 4.28 представлены команды, изменяющие внешний вид осей графика, изображённого на рис. 4.34. График функции $$x = sin(t)$$ на интервале $$[-3\pi; 3\pi]$$ после их применения представлен на рис. 4.38.
| Цвет | Цвет в формате RGB |
| Чёрный | [0 0 0] |
| Синий | [0 0 1] |
| Тёмно-синий | [0 0 128/255] |
| Зелёный | [0 1 0] |
| Тёмно-зелёный | [0 128/255 0] |
| Голубой | [0 1 1] |
| Тёмно-голубой | [0 128/255 128/255] |
| Красный | [1 0 0] |
| Тёмно-красный | [128/255 0 0] |
| Пурпурный | [1 0 1] |
| Тёмно-пурпурный | [128/255 0 128/255] |
| Жёлтый | [1 1 0] |
| Тёмно-жёлтый | [128/255 128/255 0] |
| Тёмно-серый | [128/255 128/255 128/255] |
| Светло-серый | [192/255 192/255 192/255] |
| Белый | [1 1 1] |
(рис 4.38) График функции x = sin(t) на интервале [-3 3].
h=figure( ); t=-3*pi:pi/100:3*pi; x=sin(t); plot(t, x); set(gca, ’box’, ’off’); % Убираем прямоугольную сетку вокруг оси. set(gca, ’fontname’, ’Arial’); % Определяем шрифт. set(gca, ’fontsize’, 20); % Определяем размер шрифта 20. % Включаем линии сетки, перпендикулярные OX и OY. set(gca, ’xgrid’, ’on’); set(gca, ’ygrid’, ’on’); % Устанавливаем координаты линий сетки, перпендикулярной OX. set(gca, ’xtick’,[-3 -1 0 1 2 ]);
Обращение к функции создания осей с определёнными свойствами имеет вид: $$axes(’Свойство1’,\ Значение1,\ ’Свойство2’,\ Значение2,\ ’Свойство3’,\ Значение3, . . . )$$; С помощью функции $$set$$ можно также изменять свойства линий, которые формируется с помощью подробно рассмотренной ранее функции $$plot$$.
Рассмотрим наиболее часто используемые свойства линий:
Для того, чтобы удалить объект в графическом окне, необходимо вызвать функцию $$delete(h)$$, где $$h$$ — указатель на удаляемый объект (указатель на линию, оси и т.д.). Следует понимать, что удаление осей приведёт к исчезновению всех объектов, которые располагались на них.
Очистка текущих осей осуществляется функцией $$cla$$, очистка текущего окна — функцией $$clf$$.
Рассмотрим описанные возможности работы с окнами на нескольких примерах. Авторы рекомендуют читателю внимательно изучить примеры 4.23, 4.24, в которых собраны стандартные приёмы работы с окнами, линиями графиков, осями и их свойствами.
Пример 4.23. Написать программу создания графиков функций $$x=e^{\cos(t)}$,$y=e^{\sin(t)}$, $z=\cos(t^2)$$ на интервале [-5;5]. Графики функций $$x=e^{\cos(t)}$, $y=e^{\sin(t)}$$ изобразить в графическом окне с именем WINDOW1 красным и синим цветом, а график функции $$z=\cos(t^2)$$ — в окне с именем WINDOW2 зелёным. В обоих окнах вывести линии сетки.
В листинге 4.29 приведено решение этой задачи с подробными комментариями.
t = -5:0.1:5; x= exp(cos(t)); y= exp(sin(t)); z=cos(t.^2); % Создаём первое графическое окно, указатель, на которое будет hfig1=figure; % храниться в переменной hfig1. % Создаём второе графическое окно, указатель, на которое будет hfig2=figure; % храниться в переменной hfig2. figure(hfig1); % Объявляем первое графическое окно текущим. % Выводим в нём оси, указатель на на которые будет храниться hAxes1=axes; % в переменной hAxes1. % Выводим в этом окне график функций x(t) и y(t), указатель на который % записываем в переменную h_gr1. В h_gr(1) будет храниться первая % линия — x(t), в h_gr(2) будет храниться вторая линия — y(t). h_gr1=plot(t, x, t, y); figure(hfig2); % Объявляем второе графическое окно текущим. % Выводим в нём оси, указатель на на которые будет храниться hAxes2=axes; % в переменной hAxes2. % Выводим в этом окне график функции z(t), указатель на который h_gr2=plot(t, z); % записываем в переменную h_gr2 . figure(hfig1); % Объявляем первое графическое окно текущим % Далее устанавливаем свойства осей и графиков в первом окне. % Отказываемся от стандартной нумерации окон для первого окна. set(hfig1, ’numbertitle’, ’off’); % Устанавливаем новое имя первого графического окна. set(hfig1, ’name’, ’WINDOW1’); % Включаем отображение линий сетки, перпендикулярной оси ОХ % для осей hAxes1. set(hAxes1, ’xgrid’, ’on’); % Включаем отображение линий сетки, перпендикулярной оси ОY set(hAxes1, ’ygrid’, ’on’); % для осей hAxes1. % Устанавливаем красный цвет первой линии в первом графическом окне. set(h_gr1(1), ’color’, ’r’); % Устанавливаем синий цвет второй линии в первом графическом окне. set(h_gr1(2), ’color’, ’b’); figure(hfig2);% Объявляем второе графическое окно текущим % Далее устанавливаем свойства осей и графиков во втором окне. % Отказываемся от стандартной нумерации окон для второго окна. set(hfig2, ’numbertitle’, ’off’); % Устанавливаем новое имя второго графического окна. set(hfig2, ’name’, ’WINDOW2’); % Включаем отображение линий сетки, перпендикулярной оси ОХ set(hAxes2, ’xgrid’, ’on’); % для осей hAxes2. % Включаем отображение линий сетки, перпендикулярной оси ОY set(hAxes2, ’ygrid’, ’on’); % для осей hAxes2. % Устанавливаем зелёный цвет первой линии во втором графическом окне. set(h_gr2, ’color’, ’g’); % Эта функция может быть и такой: set(h_gr2(1), ’ Color ’, ’ g ’);
На рис. 4.39 и 4.40 представлены созданные с помощью программы, приведённой в листинге 4.29, окна с графиками функций $$x=e^{\cos(t)}$, $y=e^{\sin(t)}$ и $z=\cos(t^2)$$ соответственно.
При программировании работы с графическими окнами вызов функции $$plot$$ может осуществляться со всеми параметрами, рассмотренными в этой главе. Для того, чтобы добавить новый график в текущие оси, необходимо перед вызовом функции $$plot$$ выполнить команду $$hold on$$. При добавлении графика в текущие оси с помощью функции $$plot$$ необходимо самостоятельно устанавливать цвет и тип графика.
На рис. 4.39. изображены графики функций: $$x = e^{cos(t)}$$ и $$y = e^{sin(t)}$$
(рис 4.39) Окно с графиками функций
На рис. 4.40. изображен график функции: $$z = cos(t^2)$$
(рис 4.40) Окно с графиком функции
Пример 4.24. Изобразить графики функций $$x_i=\alpha_ie^{\sin(t)}$, $y_i=\sin(\alpha_it)$, $z_i=\cos(\alpha_it)$, $v_i=\sin(2\alpha_it)+\cos(3\alpha_it)$$ на интервале [-5; 5], если коэффициенты $$\alpha = 0.5, 0.6, 0.73, 0.79$$ хранятся в текстовом файле gr.txt.
При решении этой задачи необходимо будет построить четыре множества графиков $$x_i, y_i, z_i и v_i$$. Каждое множество будем изображать в своих осях. В листинге 4.30 приведена программа, а на рис. 4.41 представлено полученное в результате графическое окно.
f=fopen(’gr.txt’, ’rt’); % Открываем файл gr.txt в режиме чтения. alf=fscanf(f, ’%f’, 4); % Считываем из него данные в массив alf. % Формируем массивы t, x, y, z, v t = -5:0.1:5; x=alf*exp(sin(t)); y=sin(alf*t); z=cos(alf*t); v=sin(2*alf*t)+cos(3*alf*t); hfig1=figure; % Создаём графическое окно % Устанавливаем новое имя первого графического окна. set(hfig1, ’numbertitle’, ’off’); set(hfig1, ’name’, ’Plots’); % Выводим в нём оси, указатель на которые будет храниться в переменной % haxes1. Оси будут располагаться в левом нижнем углу графического окна. haxes1=axes(’position’, [0.05 0.05 0.4 0.4]); plot(t, x); % Выводим множество графиков xi(t) % Выводим линии сетки на осях. set(haxes1, ’xgrid’, ’on’, ’ygrid’, ’on’); % Выводим в графическом окне оси, указатель на которые будет храниться % в переменной haxes2. Оси будут располагаться в правом нижнем углу % графического окна. haxes2=axes(’position’, [0.5 0.05 0.4 0.4]); plot(t, y); % Выводим множество графиков yi(t). % Выводим линии сетки на осях. set(haxes2, ’xgrid’, ’on’, ’ygrid’, ’on’); % Выводим в графическом окне оси, указатель на которые будет % храниться в переменной haxes3. Оси будут располагаться в % левом верхнем углу графического окна. haxes3=axes(’position’, [0.05 0.5 0.4 0.4]); plot(t, z); % Выводим множество графиков zi(t) % Выводим линии сетки на осях. set(haxes3, ’xgrid’, ’on’, ’ygrid’, ’on’); % Выводим в графическом окне оси, указатель на которые будет % храниться в переменной haxes3. Оси будут располагаться в % правом верхнем углу графического окна. haxes4=axes(’position’, [0.5 0.5 0.4 0.4]); plot(t, v); % Выводим множество графиков vi(t). % Выводим линии сетки на осях. set(haxes4, ’xgrid’, ’on’, ’ygrid’, ’on’);
На графиках не хватает текстовой информации, которая бы поясняла выведенные графики.
Для вывода текста можно использовать следующие функции:
На рис. 4.41. изображены графики функций: $$x_i = \alpha_ie^{sin(t)}, y_i = sin(\alpha_it),z_i = cos(\alpha_it), v_i= sin(2\alpha_it) + cos(3\alpha_it)$$
(рис 4.41) Окно с графиками функций
В листинге 4.31 представлена программа построения графика $$sin(x)$$ на интервале $$[-2\pi, 2\pi]$$ вместе с заголовками, подписями осей и примером использования функции $$text$$. Полученный в результате работы программы график представлен на рис. 4.42.
t=-2*pi:pi/50:2*pi; x=sin(t); plot(t, x); xlabel(’t’); ylabel(’x’); title(’Plot function x=sin(t)’); text(-1, -0.8, ’<- Point(-1,-0.8)’);
Все рассмотренные функции вывода текста формирует указатель на созданный текстовый объект, у которого с помощью функции $$set$$ можно установить соответствующие свойства, наиболее часто встречающиеся из которых приведены ниже:
(рис 4.42) График функции x = sin(t) с подписями
На этом мы заканчиваем краткое знакомство с графическими объектами языка Octave и предлагаем читателю самостоятельно поэкспериментировать с описанными свойствами графических объектов при написании собственных программ.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.