Функция двух переменных в матлаб

Функция двух переменных в матлаб

3. Трёхмерная графика .

Графики функций двух переменных представляют из себя куски поверхностей, нависающие над областями определения функций. Отсюда ясно, что изображение графиков функций двух переменных требует реализации "трёхмерной графики" на пл оском экране дисплея компьютера.

Высокоуровневая графическая подсистема MATLABа автоматически реализует трёхмерную графику без специальных усилий со стороны пользователя. Пусть в точке с координатами x1,y1 вычислено значение функции z=f(x,y) и оно равно z1. В некоторой другой точке (то есть при другом значении аргументов) x2,y2 вычисляют значение функции z2. Продолжая этот процесс, получают массив (набор) точек (x1,y1,z1), (x2,y2,z2), (xN,yN,zN) в количестве N штук, расположенных в трёхмерном пространстве. Специальные функции системы MATLAB проводят через эти точки гладкие поверхности и отображают их проекции на плоский дисплей компбютера.

Чаще всего точки аргументов расположены в области определения функции регулярно в виде прямоугольной сетки (то есть матрицы). Такая сетка точек порождает две матрицы одной и той же структуры: первая матрица содержит значения первых координат этих точек (x — координат), а вторая матрица содержит значения вторых координат (y — координат). Обозначим первую матрицу как X, а вторую — как Y. Есть ещё и третья матрица — матрица значений функции z=f(x,y)при этих аргументах. Эту матрицу обозначим буквой Z.

Простейшей функцией построения графика функции двух переменных в системе MATLAB является функция

plot3( X , Y , Z )

где X, Y и Z — матрицы одинаковых размеров, смысл которых мы только что объяснили.

В системе MATLAB имеется специальная функция для получения двумерных массивов X и Y по одномерным массивам x, y.

Пусть по оси x задан диапазон значений в виде вектора

u = -2 : 0.1 : 2

а по оси y этот диапазон есть

Для получения матриц X и Y, представляющих первые и вторые координаты получающейся прямоугольной сетки точек используют специальную функцию системы MATLAB:

[ X , Y ] = meshgrid( u, v )

Как мы видим, эта функция получает на входе два одномерных массива (вектора), представляющие массивы точек на осях координат, и возвращает сразу два искомых двумерных массива. На прямоугольной сетке точек вычисляем значения функции, например функции exp:

Z = exp( — X.^2 — Y.^2 )

Наконец, применяя описанную выше функцию plot3,получаем следующее изображение трёхмерного графика этой функции:

Из этого рисунка видно, что функция plot3 строит график в виде набора линий в пространстве, каждая из которых является сечением трёхмерной поверхности плоскостями, параллельными плоскости yOz. По-другому можно сказать, что каждая линия получается из отрезков прямых, соединяющих набор точек, координаты которых берутся из одинаковых столбцов матриц X, Y и Z. То есть, первая линия соответствует первым столбцам матриц X, Y Z; вторая линия — вторым столбцам этих матриц и так далее.

Для построения трёхмерных линий, задаваемых параметрически применяется другая форма вызова функции plot3:

plot3( x, y, z )

где x, y и z являются одномерными массивами координат точек, которые и нужно последовательно соединить отрезками прямых. Например, следующий фрагмент кода

t = 0 : pi/50 : 10*pi ;

x = sin( t );

y = cos( t );

plot3( x , y , t );

Читайте также:  Перенос фамилии на другую строку

grid on

где применена известная по плоским графикам команда

grid on

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

Помимо этой простейшей функции система MATLAB располагает ещё рядом функций, позволяющих добиваться большей реалистичности в изображении трёхмерных графиков. Это функции mesh, surf и surfl.

Функция mesh соединяет вычисленные соседние точки поверхности графика отрезками прямых и показывает в графическом окне системы MATLAB плоскую проекцию такого объёмного "каркасно-ребристого" ( по-английски зовётся wireframe mesh) тела. Вместо ранее показанного при помощи функции plot3 графика функции

exp( — X.^2 — Y.^2 )

можно получить вот такое изображение

Для лучшего восприятия "объёмности" изображения разные рёбра автоматически окрашиваются в разные цвета. Кроме того (в отличие от функции plot3) осуществляется удаление невидимых линий. Если вы считаете, что изображённое ребристое тело является прозрачным и не должно скрывать задних линий, то можно ввести команду hidden off , после чего такие линии появятся на изображении. Более плотного изображения поверхности можно добиться, если вместо

функции mesh применить функцию surf( X, Y, Z ).

В результате получается следующее изображение представляющее плотную (непрозрачную) сетчатую поверхность, причём отдельные ячейки (грани) этой сетчатой поверхности (плоские четырёхугольники) автоматически окрашиваются в разные цвета.

С помощью функции surf получаются хотя и искусственно раскрашенные, но весьма наглядные изображения. Если же мы хотим добиться более естественных и объективных способов окрашивания поверхностей, то следует использовать функцию surfl.

Функция surfl трактует поверхность графика как материальную поверхность с определёнными физическими свойствами по отражению света. По умолчанию задаётся некоторый источник света, освещающий такую материальную поверхность, после чего рассчитываеются траектории отражённых лучей, попадающих в объектив условной камеры. Изображение в такой камере и показывается в графическом окне системы MATLAB.

Так как разные материалы по-разному отражают падающие лучи, то можно подобрать некоторый материал, чтобы получить наилучшее (с точки зрения пользователя) изображение. В частности, можно использовать функцию

colormap( copper )

с помощью которой для изображения графика выбирается набор цветов (по-английски — colormap), который характерен для света, отражающегося от медной поверхности (медь по-английски — copper). После этого применение функции

surfl( X, Y, Z )

вместо surf(X,Y,Z) приводит к получению очень реалистически выглядящего и очень наглядного графика:

Можно с такого графика убрать чёрные линии, изображающие рёбра, а также добиться ещё более плавного перехода освещения поверхности, если выполнить команду

shading interp

означающую, что теперь цвет (освещённость) будет меняться даже внутри отдельных граней (ячеек). В итоге будет получаться совсем уж реальное изображение некоторой объёмной фигуры. Лучше это или хуже для задачи изображения графиков функций двух переменных — судить конкретному пользователю.

Построение графика функции двух переменных в MatLab на прямоугольной области определения переменных включает два предварительных этапа:

1. Разбиение области определения прямоугольной сеткой.
2. Вычисление значений функции в точках пересечения линий сетки и запись их в матрицу.

Построим график функции z(x, у)= х2 + у2 на области определения в виде квадрата х є [0, 1], y є [0, 1]. Необходимо разбить квадрат равномерной сеткой (например, с шагом 0.2) и вычислить значения функций в узлах, обозначенных точками.

Читайте также:  Дота 2 вулкан саппорт что это

Удобно использовать два двумерных массива х и у, размерностью шесть на шесть для хранения информации о координатах узлов. Массив х состоит из одинаковых строк, в которых записаны координаты x1, х2, . х6, а массив у содержит одинаковые столбцы с y1, у2, . у6. Значения функции в узлах сетки запишем в массив z такой же размерности (6 х 6), причем для вычисления матрицы Z используем выражение для функции, но с поэлементными матричными операциями. Тогда, например z(3,4) как раз будет равно значению функции z(x,y)в точке (х3, у4). Для генерации массивов сетки х и у по координатам узлов в MatLab предусмотрена функция meshgrid, для построения графика в виде каркасной поверхности — функция mesh. Следующие операторы приводят к появлению на экране окна с графиком функции (точка с запятой в конце операторов не ставится для того, чтобы проконтролировать генерацию массивов):

» [X, У] = meshgrid(0:0.2:1,0:0.2:1)
X =
0 0.2000 0.4000 0.6000 0.8000 1.0000
0 0.2000 0.4000 0.6000 0.8000 1.0000
0 0.2000 0.4000 0.6000 0.8000 1.0000
0 0.2000 0.4000 0.6000 0.8000 1.0000
0 0.2000 0.4000 0.6000 0.8000 1.0000
0 0.2000 0.4000 0.6000 0.8000 1.0000
y =
0 0 0 0 0 0
0.2000 0.2000 0.2000 0.2000 0.2000 0.2000
0.4000 0.4000 0.4000 0.4000 0.4000 0.4000
0.6000 0.6000 0.6000 0.6000 0.6000 0.6000
0.8000 0.8000 0.8000 0.8000 0.8000 0.8000
1.0000 1.0000 1.0000 1.0000 1.0000 1.0000

Z =
0 0.0400 0.1600 0.3600 0.6400 1.0000
0.0400 0.0800 0.2000 0.4000 0.6800 1.0400
0.1600 0.2000 0.3200 0.5200 0.8000 1.1600
0.3600 0.4000 0.5200 0.7200 1.0000 1.3600
0.6400 0.6800 0.8000 1.0000 1.2800 1.6400
1.0000 1.0400 1.1600 1.3600 1.6400 2.0000

Какие недостатки имеет построенный график? И как их устранить? Построенный график и новый привести в электронном отчете по лабораторной работе.

MatLab позволяет наносить на график дополнительную информацию, в частности, соответствие цветов значениям функции. Сетка генерируется при помощи команды meshgrid, вызываемой с двумя аргументами. Аргументами являются векторы, элементы которых соответствуют сетке на прямоугольной области построения функции. Можно использовать один аргумент, если область построения функции — квадрат. Для вычисления функции следует использовать поэлементные операции.
Рассмотрим основные возможности, предоставляемые MatLab для визуализации функций двух переменных, на примере построения графика функции

на прямоугольной области определения х є [-1,1], y є [0, 1].

Подготовим матрицы с координатами узлов сетки и значениями функции:

» [X, Y] = meshgrid(-1:0.05:1, 0:0.05:1);
» Z = 4*sin(2*pi*X).*cos(1.5*pi*Y).*(1-Х.^2).*Y.*(1-Y);

Для построения каркасной поверхности используется функция mesh, вызываемая с тремя аргументами:

Цвет линий поверхности соответствует значениям функции. MatLab рисует только видимую часть поверхности.
При помощи команды hidden off можно сделать каркасную поверхность "прозрачной", добавив скрытую часть. Команда hidden on убирает невидимую часть поверхности, возвращая графику прежний вид.

Читайте также:  Лучший гироскутер 10 дюймов

Функция surf строит каркасную поверхность графика функции и заливает каждую клетку поверхности определенным цветом, зависящим от значений функции в точках, соответствующих углам клетки. В пределах каждой клетки цвет постоянный. Посмотрите результаты выполнения команды

Команда shading flat позволяет убирать каркасные линии. Для получения поверхности, плавно залитой цветом, зависящим от значений функции, предназначена команда shading interp.

При помощи shading faceted можно вернуться к поверхности с каркасными линиями.

Трехмерные графики, получаемые с помощью описанных выше команд, удобны для получения представления о форме поверхности, однако по ним трудно судить о значениях функции. В MatLab определена команда colorbar, которая выводит рядом с графиком столбик, устанавливающий соответствие между цветом и значением функции. Постройте при помощи surf график поверхности и дополните его информацией о цвете.

Команду colorbar можно применять в сочетании со всеми функциями, строящими трехмерные объекты.

Пользуясь цветной поверхностью, трудно сделать вывод о значении функции в той или иной точке плоскости xy. Команды meshc или surfc позволяют получить более точное представление о поведении функции. Эти команды строят каркасную поверхность или залитую цветом каркасную поверхность и размещают на плоскости xyлинии уровня функции (линии постоянства значений функции):

MatLab позволяет построить поверхность, состоящую из линий уровня, при помощи функции contour3. Эту функцию можно использовать так же, как и описанные выше mesh, surf, meshc и surfc с тремя аргументами. При этом число линий уровня выбирается автоматически. Имеется возможность задать четвертым аргументом в contour3 либо число линий уровня, либо вектор, элементы которого равны значениям функции, отображаемым в виде линий уровня. Задание вектора (четвертого аргумента levels) удобно, когда требуется исследовать поведение функции в некоторой области ее значений (срез функции). Постройте, например поверхность, состоящую из линий уровня, соответствующих значениям функции от 0 до 0.5 с шагом 0.01:

» levels = [0:0.01:0.5];
» contour3(X, Y, Z, levels)
» colorbar

I’m trying to have MATLAB integrate a function of two variables, like [email protected](x,y)x+y; against one variable. I can define, say [email protected](y)quad(@(x)fun(x,y),1,2); and it’ll give me fun2(1) , say, no problem. But it gives me errors when I try to evaluate fun2 of a, say, matrix. When I try to integrate fun2 using quad() , which is what I need to do, it gives me the same error.

And I can’t just use quad2d() because (a) I need something like fun2 in several different places and (b) the integrals I need to calculate are 4D.

Are there any other ways of doing this?

Создан 04 авг. 14 2014-08-04 06:16:43 user3905472

could you give some exemplary values of x (and y) where you get the error? – bdecaf 04 авг. 14 2014-08-04 09:45:10

Ссылка на основную публикацию
Форум лексус рх 350 2007
Как выбрать Lexus RX?Надёжная ли машина?Какой расход топлива?Какие бывают комплектации?Насколько нужны те или иные функции?На что смотреть при покупке? Информация...
Уроки нлп для начинающих
Если вы хотя бы немного интересуетесь психологией, то о нейролингвистическом программировании (НЛП), наверное, тоже слышали. В статье мы постараемся объяснить...
Уроки ворд 2010 для начинающих
Microsoft Office 2010 — бесплатные обучающие уроки для чайников с нуля. Получите необходимые навыки профессиональной работы с пакетом Microsoft Office...
Форум грибников витебской области
В Беларуси много грибов: белые грибы, подосиновики, лисички и др. #новостиlespr или #newslespr - добавляйте фото в инстаграм с таким...
Adblock detector