Компания ALT Linux
Опубликован: 12.03.2015 | Доступ: свободный | Студентов: 576 / 64 | Длительность: 20:55:00
Лекция 4:

Построение графиков

4.4.5 Примеры

Пример 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.29. Программа создания графиков (пример 4.23).

На рис. 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.30. Построение графиков функций (пример 4.24).

На графиках не хватает текстовой информации, которая бы поясняла выведенные графики.

Для вывода текста можно использовать следующие функции:

  • title(’Заголовок’ ) предназначена для вывода заголовка графика;
  • xlabel(’Подпись’ ) служит для вывода текста под осью OX;
  • ylabel(’Подпись’ ) предназначена для вывода названия оси OY;
  • text(x, y,’Text’ ) служит для вывода текста в точке с координатами (x, y); координаты (x, y) задаются в системе координат графика, нет необходимости пересчитывать их в "экранную" систему координат.

На рис. 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)’);
Листинг 4.31. Построение графика синуса с подписями

Все рассмотренные функции вывода текста формирует указатель на созданный текстовый объект, у которого с помощью функции set можно установить соответствующие свойства, наиболее часто встречающиеся из которых приведены ниже:

  • color — определяет цвет шрифта;
  • backgroundcolor — позволяет определить цвет фона;
  • fontangle — позволяет установить наклон шрифта;
  • fontname — определяет название шрифта;
  • fontsize — определяет размер шрифта в пунктах;
  • fontweight — определяет толщину шрифта;
  • linestyle — позволяет изменять стиль прямоугольной рамки;
  • linewidth — определяет толщину линий прямоугольной рамки.
График функции x = sin(t) с подписями

увеличить изображение
Рис. 4.42. График функции x = sin(t) с подписями

На этом мы заканчиваем краткое знакомство с графическими объектами языка Octave и предлагаем читателю самостоятельно поэкспериментировать с описанными свойствами графических объектов при написании собственных программ.

Алексей Игнатьев
Алексей Игнатьев

Возможна ли разработка приложения на Octave с GUI?

Евгений Ветчанин
Евгений Ветчанин

Добрый день. Я самостоятельно изучил курс "Введение в Octave" и хочу получить сертификат. Что нужно сднлать для этого? Нужно ли записаться на персональное обучение с тьютором или достаточно перевести деньги?