2.3. Построение трехмерных графиков
В предыдущих разделах строились графики функции одной переменной (y = f(x)), этот раздел построению трехмерных графиков функции двух переменных (z = f(x, y)). Одним из способов представления таких функций является построение трехмерной поверхности в декартовой системе координат XYZ. При этом параметры функции (x, y) откладываются вдоль соответствующих осей, а значение функции в соответствующих точках откладывается по оси Z.
Для того, чтобы построить график функции двух переменных, предварительно нужно создать сетку, которая задает, в каких точках на плоскости XOY будут рассчитываться значения функции, для этого можно воспользоваться функцией meshgrid со следующим синтаксисом:
[X,Y] = meshgrid(xgv, ygv)
Здесь в качестве входных параметров xgv и ygv задаются одномерные матрицы, определяющие интервалы и шаги сетки вдоль осей X и Y соответственно. Допустим, нужно создать двумерную сетку со следующими параметрами:
интервал изменения параметра по оси X: [-5; 5] с шагом 1;
интервал изменения параметра по оси Y: [-12; 12] с шагом 3.
В этом случае создание сетки будет выглядеть следующим образом:
>> meshx = -5: 1: 5;
>> meshy = -12: 3: 12;
>> [X, Y] = meshgrid (meshx, meshy)
X =
-5 -4 -3 -2 -1 0 1 2 3 4 5
-5 -4 -3 -2 -1 0 1 2 3 4 5
-5 -4 -3 -2 -1 0 1 2 3 4 5
-5 -4 -3 -2 -1 0 1 2 3 4 5
-5 -4 -3 -2 -1 0 1 2 3 4 5
-5 -4 -3 -2 -1 0 1 2 3 4 5
-5 -4 -3 -2 -1 0 1 2 3 4 5
-5 -4 -3 -2 -1 0 1 2 3 4 5
-5 -4 -3 -2 -1 0 1 2 3 4 5
Y =
-12 -12 -12 -12 -12 -12 -12 -12 -12 -12 -12
-9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9
-6 -6 -6 -6 -6 -6 -6 -6 -6 -6 -6
-3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3
0 0 0 0 0 0 0 0 0 0 0
3 3 3 3 3 3 3 3 3 3 3
6 6 6 6 6 6 6 6 6 6 6
9 9 9 9 9 9 9 9 9 9 9
12 12 12 12 12 12 12 12 12 12 12
Теперь матрицы X и Y описывают точки, в которых нужно рассчитать значение функции от двух переменных (с использованием поэлементных операций над матрицами). Например, если нужно построить график функции z = x2 + y2, то нужно выполнить команду:
>> Z = X .^ 2 + Y .^ 2
Z =
169 160 153 148 145 144 145 148 153 160 169
106 97 90 85 82 81 82 85 90 97 106
61 52 45 40 37 36 37 40 45 52 61
34 25 18 13 10 9 10 13 18 25 34
25 16 9 4 1 0 1 4 9 16 25
34 25 18 13 10 9 10 13 18 25 34
61 52 45 40 37 36 37 40 45 52 61
106 97 90 85 82 81 82 85 90 97 106
169 160 153 148 145 144 145 148 153 160 169
Теперь можно построить трехмерный график в виде поверхности. Для этого используется функция surf.
>> surf (X, Y, Z)
В результате будет открыто окно с трехмерной поверхностью (Рис. 2.16).
Рис. 2.16.
Следующий пример демонстрирует построение более сложной функции на интервале [-500; 500] по осям X и Y.
>> meshx = -500: 10: 500;
>> meshy = -500: 10: 500;
>> [X, Y] = meshgrid (meshx, meshy);
>> Z = X .* sin ( sqrt ( abs (X) ) ) + Y .* sin ( sqrt ( abs (Y) ) );
>> surf (X, Y, Z)
В результате будет построен трехмерный график, показанный на рисунке 2.17.
Рис. 2.17.
Подобным образом работает и функция mesh. С той лишь разницей, что при отображении поверхности с помощью функции surf, цветом раскрашивается поверхность (промежутки между линиями сетки), а сетка отображается черными линиями (по умолчанию), а функция mesh строит подобный график, но цветом раскрашивается сетка без закраски самой поверхности. Если изменить предыдущий пример с использованием функции mesh, то будет выведен результат, показанный на рисунке 2.18:
>> meshx = -500: 10: 500;
>> meshy = -500: 10: 500;
>> [X, Y] = meshgrid (meshx, meshy);
>> Z = X .* sin ( sqrt ( abs (X) ) ) + Y .* sin ( sqrt ( abs (Y) ) );
>> mesh (X, Y, Z)
Рис. 2.18.
Для оформления трехмерных графиков также можно использовать функции:
xlim, ylim, zlim для изменения интервалов, отображаемых по осям;
xlabel, ylabel, zlabel для добавления подписей к осям;
title для добавления заголовка к графику;
text для добавления текстовых надписей
и другие.
Следующий пример демонстрирует использования некоторых из упомянутых выше функций для оформления внешнего вида трехмерных графиков. Результат показан на рисунке 2.19.
>> meshx = -500: 10: 500;
>> meshy = -500: 10: 500;
>> [X, Y] = meshgrid (meshx, meshy);
>> Z = X .* sin ( sqrt ( abs (X) ) ) + Y .* sin ( sqrt ( abs (Y) ) );
>> surf (X, Y, Z)
>> xlabel ('X');
>> ylabel ('Y');
>> zlabel ('Z = f (X, Y)');
>> title ('График функции Швефеля')
>> text (420, 420, 900, 'Max')
Рис. 2.19.
С помощью команды axis off можно отключить отображение осей. Рисунок 2.20 показывает результат вызова этой команды применительно к предыдущему примеру. Для того чтобы показать оси, используется команда axis on.
Рис. 2.20.
Для того чтобы отобразить шкалу цветов, которая показывает, какому значению функции соответствует каждый цвет, предназначена команда colorbar. В результате вызова этой команды после выполнения предыдущего примера окно с графиком примет вид, показанный на рисунке 2.21.
Рис. 2.21.
После нажатия кнопки "Rotate 3D" на панели инструментов ( ) или после выбора пункта меню "Tools - Rotate 3D" с помощью мышки можно вращать нарисованный график. Также график можно вращать программно с помощью функции view. Один из вариантов использования функции view заключается в том, что ей передают параметры, описывающие координаты положения "наблюдателя". Координаты могут быть заданы в виде пары азимут – угол места (Рис. 2.22) или в декартовой системе координат.
Рис. 2.22.
Если задавать положение наблюдателя с помощью азимута и угла места, то в функцию view эти углы передаются в виде двух параметров (первый параметр – азимут, второй – угол места). По умолчанию при создании трехмерного графика азимут "наблюдателя" равен -37.5°, а угол места – 30°. Следующий пример строит трехмерную поверхность и изменяет положение точки наблюдения с помощью функции view. Результат показан на рисунке 2.23.
>> meshx = -500: 10: 500;
>> meshy = -500: 10: 500;
>> [X, Y] = meshgrid (meshx, meshy);
>> Z = X .* sin ( sqrt ( abs (X) ) ) + Y .* sin ( sqrt ( abs (Y) ) );
>> surf (X, Y, Z)
>> view (45, 60)
Рис. 2.23.
В качестве альтернативы, вызов функции view может выглядеть следующим образом:
view ([45, 60])
Вызов функции view без входных параметров, но с двумя выходными параметрами возвращает текущее положение "наблюдателя" в системе координатам азимут – угол места:
>> [azimuth, elevation] = view
azimuth =
45
elevation =
60
Координаты наблюдателя можно задавать в декартовой системе координат, в этом случае координаты по осям X, Y, Z нужно объединять в матрицу из трех:
>> meshx = -500: 10: 500;
>> meshy = -500: 10: 500;
>> [X, Y] = meshgrid (meshx, meshy);
>> Z = X .* sin ( sqrt ( abs (X) ) ) + Y .* sin ( sqrt ( abs (Y) ) );
>> surf (X, Y, Z)
>> xlabel ('X')
>> ylabel ('Y')
>> view ([-200 500 600])
Результат показан на рисунке 2.24.
Рис. 2.24.
Чтобы вернуть положение "наблюдателя" к значению по умолчанию (азимут равен -37.5°, а угол места – 30°), нужно вызвать функцию view в виде:
>> view (3)
Если функцию view вызвать в виде view(2), то график будет повернут таким образом, чтобы смотреть на него строго вертикально (азимут будет равен 0°, а угол места будет равен 90°). Это продемонстрировано в следующем примере и на рисунке 2.25.
>> meshx = -500: 10: 500;
>> meshy = -500: 10: 500;
>> [X, Y] = meshgrid (meshx, meshy);
>> Z = X .* sin ( sqrt ( abs (X) ) ) + Y .* sin ( sqrt ( abs (Y) ) );
>> surf (X, Y, Z)
>> xlabel ('X')
>> ylabel ('Y')
>> view(2)
Рис. 2.25.
- Оглавление
- Предисловие
- Раздел 1. Основные сведения о среде программирования «matlab»
- Глава 1. Вычисления в командном режиме
- 1.1. Простейшие математические операции в matlab
- 1.2. Переменные
- 1.3. Создание матриц
- 1.4. Доступ к элементам матриц
- 1.5. Операции с матрицами
- 1.6. Ввод, вывод и работа со строками
- Глава 2. Построение графиков в matlab
- 2.1. Построение графика в виде двумерной линии
- 2.2. Оформление графиков
- 2.3. Построение трехмерных графиков
- 2.4. Построение линий уровня
- 2.5. Построение векторного поля
- 2.6. Отображение нескольких графиков в одном окне
- Глава 3. Скрипты в matlab и управляющие конструкции
- 3.1. Создание и выполнение скриптов в matlab
- 3.2. Оператор for
- 3.3. Логические операции
- 3.4. Оператор if / elseif / else
- 3.5. Оператор while
- 3.6. Операторы break / continue
- 3.7. Оператор switch
- 3.8. Создание функций
- Раздел 2. Краткие теоретические сведения и задания Тема 1. Векторный анализ
- 1.1. Элементы векторного анализа
- Задания
- Тема 2. Уравнения Максвелла (произвольная и гармоническая временная зависимость, статические, стационарные и квазистационарные поля)
- 2.1. Система уравнений электродинамики – уравнения Максвелла
- 2.2. Граничные условия. Принцип эквивалентности
- Задания
- Тема 3. Плоские волны
- 3.1. Явление дисперсии и групповая скорость
- Задания
- Тема 4. Граничные задачи, уравнения и методы
- 4.1. К классификации электромагнитных явлений
- Задания
- 4.2. Метод конечных разностей
- 4.2.1. Конечно-разностная аппроксимация
- 4.2.2. Конечно-разностная аппроксимация уравнений Лапласа и Пуассона
- 4.2.3. Конечно-разностная аппроксимация для граничных узлов
- Задания
- Литература