fsurf

Постройте 3-D поверхность

Синтаксис

fsurf(f)
fsurf(f,[min max])
fsurf(f,[xmin xmax ymin ymax])
fsurf(funx,funy,funz)
fsurf(funx,funy,funz,[uvmin uvmax])
fsurf(funx,funy,funz,[umin umax vmin vmax])
fsurf(___,LineSpec)
fsurf(___,Name,Value)
fsurf(ax,___)
fs = fsurf(___)

Описание

пример

fsurf(f) создает объемную поверхностную диаграмму символьного выражения f(x,y) на интервале по умолчанию [-5 5] для x и y.

пример

fsurf(f,[min max]) графики f(x,y) на интервале [min max] для x и y.

пример

fsurf(f,[xmin xmax ymin ymax]) графики f(x,y) на интервале [xmin xmax] для x и [ymin ymax] для y. Функция fsurf использует symvar, чтобы заказать интервалы присвоения и переменные.

пример

fsurf(funx,funy,funz) строит параметрический поверхностный x = x(u,v), y = y(u,v), z = z(u,v) на интервале [-5 5] для u и v.

fsurf(funx,funy,funz,[uvmin uvmax]) строит параметрический поверхностный x = x(u,v), y = y(u,v), z = z(u,v) на интервале [uvmin uvmax] для u и v.

пример

fsurf(funx,funy,funz,[umin umax vmin vmax]) строит параметрический поверхностный x = x(u,v), y = y(u,v), z = z(u,v) на интервале [umin umax] для u и [vmin vmax] для v. Функция fsurf использует symvar, чтобы заказать параметрические переменные и интервалы присвоения.

пример

fsurf(___,LineSpec) использование LineSpec, чтобы установить стиль линии, символ маркера и цвет поверхности. Используйте эту опцию после любой из предыдущих комбинаций входных аргументов.

пример

fsurf(___,Name,Value) задает свойства строки с помощью одного или нескольких аргументов пары Name,Value. Используйте эту опцию после любой из комбинаций входных аргументов в предыдущих синтаксисах.

fsurf(ax,___) графики в оси с объектом ax вместо объекта gca текущей системы координат.

пример

fs = fsurf(___) возвращает функциональный объект подложки или параметризовал функциональный объект подложки, в зависимости от типа поверхности. Используйте объект запросить и изменить свойства определенной поверхности. Для получения дополнительной информации смотрите FunctionSurface Properties и ParameterizedFunctionSurface Properties.

Примеры

3-D объемная поверхностная диаграмма символьного выражения

Постройте вход sin(x)+потому что(y) в области значений по умолчанию -5<x<5 и -5<y<5.

syms x y
fsurf(sin(x)+cos(y))

3-D объемная поверхностная диаграмма символьной функции

Постройте действительную часть tan-1(x+iy) в области значений по умолчанию -5<x<5 и -5<y<5.

syms f(x,y)
f(x,y) = real(atan(x + i*y));
fsurf(f)

Задайте интервал графического вывода объемной поверхностной диаграммы

График sin(x)+потому что(y) -π<x<π и -5<y<5 путем определения интервала графического вывода в качестве второго аргумента fsurf.

syms x y
f = sin(x) + cos(y);
fsurf(f, [-pi pi -5 5])

Параметризованная объемная поверхностная диаграмма

Постройте параметризованную поверхность

x=rпотому что(s)sin(t)y=rsin(s)sin(t)z=rпотому что(t)wherer=2+sin(7s+5t)

для 0<s<2π и 0<t<π.

Улучшите внешний вид графика при помощи camlight.

syms s t
r = 2 + sin(7*s + 5*t);
x = r*cos(s)*sin(t);
y = r*sin(s)*sin(t);
z = r*cos(t);
fsurf(x, y, z, [0 2*pi 0 pi])
camlight
view(46,52)

Объемная поверхностная диаграмма кусочного выражения

Постройте кусочное выражение бутылки Клейна

x(u,v)={-4 потому что(u)[1+sin(u)]-r(u)потому что(u)потому что(v)0<uπ-4 потому что(u)[1+sin(u)]+r(u)потому что(v)π<u<2πy(u,v)=r(u)sin(v)z(u,v)={-14 sin(u)-r(u)sin(u)потому что(v)0<uπ-14 sin(u)π<u<2πгдеr(u)=4-2 потому что(u)

для 0<u<2π и 0<v<2π.

Покажите, что бутылка Клейна имеет только одностороннюю поверхность.

syms u v;
r = @(u) 4 - 2*cos(u);
x = piecewise(u <= pi, -4*cos(u)*(1+sin(u)) - r(u)*cos(u)*cos(v),...
    u > pi, -4*cos(u)*(1+sin(u)) + r(u)*cos(v));
y = r(u)*sin(v);
z = piecewise(u <= pi, -14*sin(u) - r(u)*sin(u)*cos(v),...
    u > pi, -14*sin(u));
h = fsurf(x,y,z, [0 2*pi 0 2*pi]);

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

Для x и y от -2π к 2π, постройте 3-D поверхность ysin(x)-xпотому что(y). Добавьте заголовок и подписи по осям.

Создайте метки деления оси X путем охвата пределов оси X с промежутками в pi/2. Преобразуйте пределы по осям точным множителям pi/2 при помощи round и получите символьные значения деления в S. Отобразите эти метки деления при помощи свойства XTick. Создайте метки оси X при помощи arrayfun, чтобы применить texlabel к S. Отобразите эти метки при помощи свойства XTickLabel. Повторите эти шаги для оси Y.

Чтобы использовать LATEX в графиках, смотрите latex.

syms x y
fsurf(y.*sin(x)-x.*cos(y), [-2*pi 2*pi])
title('ysin(x) - xcos(y) for x and y in [-2\pi,2\pi]')
xlabel('x')
ylabel('y')
zlabel('z')

ax = gca;
S = sym(ax.XLim(1):pi/2:ax.XLim(2));
S = sym(round(vpa(S/pi*2))*pi/2);
ax.XTick = double(S);
ax.XTickLabel = arrayfun(@texlabel,S,'UniformOutput',false);

S = sym(ax.YLim(1):pi/2:ax.YLim(2));
S = sym(round(vpa(S/pi*2))*pi/2);
ax.YTick = double(S);
ax.YTickLabel = arrayfun(@texlabel,S,'UniformOutput',false);

Стиль линии и ширина для объемной поверхностной диаграммы

Постройте параметрическую поверхность x=ssin(t), y=-sпотому что(t), z=t с различными стилями линии для различных значений tдля -5<t<-2, используйте пунктирную линию с зелеными точечными маркерами. Для -2<t<2, используйте LineWidth 1 и зеленого цвета поверхности. Для 2<t<5, выключите строки установкой EdgeColor к none.

syms s t
fsurf(s*sin(t),-s*cos(t),t,[-5 5 -5 -2],'--.','MarkerEdgeColor','g')
hold on
fsurf(s*sin(t),-s*cos(t),t,[-5 5 -2 2],'LineWidth',1,'FaceColor','g')
fsurf(s*sin(t),-s*cos(t),t,[-5 5 2 5],'EdgeColor','none')

Изменение поверхности после создания

Постройте параметрическую поверхность

x=e-|u|/10sin(5|v|)y=e-|u|/10потому что(5|v|)z=u.

Задайте вывод, чтобы заставить fcontour возвратить объект графика.

syms u v
x = exp(-abs(u)/10).*sin(5*abs(v));
y = exp(-abs(u)/10).*cos(5*abs(v));
z = u;
fs = fsurf(x,y,z)

fs = 
  ParameterizedFunctionSurface with properties:

    XFunction: [1x1 sym]
    YFunction: [1x1 sym]
    ZFunction: [1x1 sym]
    EdgeColor: [0 0 0]
    LineStyle: '-'
    FaceColor: 'interp'

  Show all properties

Измените область значений u к [-30 30] при помощи свойства URange fs. Установите цвет линии на синий при помощи свойства EdgeColor и задайте белые, точечные маркеры при помощи свойств Marker и MarkerEdgeColor.

fs.URange = [-30 30];
fs.EdgeColor = 'b';
fs.Marker = '.';
fs.MarkerEdgeColor = 'w';

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

Постройте несколько поверхностей с помощью векторного входа для fsurf. Также используйте hold on, чтобы построить последовательно на той же фигуре. При отображении нескольких поверхностей на той же фигуре прозрачность полезна. Настройте прозрачность объемных поверхностных диаграмм при помощи свойства FaceAlpha. FaceAlpha отличается от 0 до 1, где 0 является полной прозрачностью, и 1 не является никакой прозрачностью.

Постройте плоскости x+y и x-y использование векторного входа к fsurf. Покажите обе плоскости путем создания их половиной прозрачного использования FaceAlpha.

syms x y
h = fsurf([x+y x-y]);
h(1).FaceAlpha = 0.5;
h(2).FaceAlpha = 0.5;
title('Planes (x+y) and (x-y) at half transparency')

Управление разрешением объемной поверхностной диаграммы

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

Разделите фигуру на два использования subplot. В первом подграфике постройте параметрическую поверхность x=sin(s), y=потому что(s), и z=(t/10)sin(1/s). Поверхность имеет большой разрыв. Устраните эту проблему путем увеличения 'MeshDensity' до 40 во втором подграфике. fsurf заполняет разрыв, показывающий, что путем увеличения 'MeshDensity' вы увеличили разрешение графика.

syms s t

subplot(2,1,1)
fsurf(sin(s), cos(s), t/10.*sin(1./s))
view(-172,25)
title('Default MeshDensity = 35')

subplot(2,1,2)
fsurf(sin(s), cos(s), t/10.*sin(1./s),'MeshDensity',40)
view(-172,25)
title('Increased MeshDensity = 40')

Показ контуров ниже объемной поверхностной диаграммы

Покажите контуры для объемной поверхностной диаграммы выражения f путем установки опции 'ShowContours' на 'on'.

syms x y
f = 3*(1-x)^2*exp(-(x^2)-(y+1)^2)...
- 10*(x/5 - x^3 - y^5)*exp(-x^2-y^2)...
- 1/3*exp(-(x+1)^2 - y^2);
fsurf(f,[-3 3],'ShowContours','on')

Создайте анимации объемных поверхностных диаграмм

Создайте анимации путем изменения отображенного выражения с помощью Function, XFunction, YFunction и свойств ZFunction и затем при помощи drawnow, чтобы обновить график. Чтобы экспортировать в GIF, смотрите imwrite.

Путем варьирования переменной i от 1 до 3, анимируйте параметрическую поверхность

x=tsin(s)y=потому что(s)z=sin(is).

для-0.1 < u < 0.1 и 0 < v < 1. Увеличьте скорость графического вывода путем сокращения MeshDensity до 9.

syms s t
h = fsurf(t.*sin(s), cos(s), sin(1./s), [-0.1 0.1 0 1]);
h.MeshDensity = 9;
for i=1:0.05:3
    h.ZFunction = sin(i./s);
    drawnow
end

Улучшите внешний вид объемной поверхностной диаграммы

Создайте символьное выражение f для функции

f=3(1-x)2exp(-(x2)-(y+1)2)-10(x/5-x3-y5)exp(-x2-y2)-1/3exp(-(x+1)2-y2).

Постройте выражение f как поверхность. Улучшите внешний вид объемной поверхностной диаграммы при помощи свойств указателя, возвращенного fsurf, свойствами подсветки и colormap.

Создайте свет при помощи camlight. Увеличьте яркость при помощи brighten. Удалите строки установкой EdgeColor к 'none'. Увеличьте рассеянный свет с помощью AmbientStrength. Для получения дополнительной информации см. Освещение, прозрачность и затенение (MATLAB). Включите поле осей. Для заголовка преобразуйте f, чтобы ПРОПИТАТЬ ЛАТЕКСОМ использование latex. Наконец, чтобы улучшить внешний вид меток деления осей, метки осей и заголовок, устанавливают 'Interpreter' на 'latex'.

syms x y
f = 3*(1-x)^2*exp(-(x^2)-(y+1)^2)... 
   - 10*(x/5 - x^3 - y^5)*exp(-x^2-y^2)... 
   - 1/3*exp(-(x+1)^2 - y^2);
h = fsurf(f,[-3 3]);

camlight(110,70)
brighten(0.6)
h.EdgeColor = 'none';
h.AmbientStrength = 0.4;

a = gca;
a.TickLabelInterpreter = 'latex';
a.Box = 'on';
a.BoxStyle = 'full';

xlabel('$x$','Interpreter','latex')
ylabel('$y$','Interpreter','latex')
zlabel('$z$','Interpreter','latex')
title_latex = ['$' latex(f) '$'];
title(title_latex,'Interpreter','latex')

Входные параметры

свернуть все

Выражение или функция, которая будет построена, заданная как символьное выражение или функция.

Графический вывод интервала для x-и осей Y, заданных как вектор двух чисел. Значением по умолчанию является [-5 5].

Графический вывод интервала для x-и осей Y, заданных как вектор четырех чисел. Значением по умолчанию является [-5 5 -5 5].

Параметрические функции u и v, заданного как символьное выражение или функция.

Графический вывод интервала для u и осей v, заданных как вектор двух чисел. Значением по умолчанию является [-5 5].

Графический вывод интервала для u и v, заданного как вектор четырех чисел. Значением по умолчанию является [-5 5 -5 5].

Объект осей. Если вы не задаете объект осей, то fsurf использует текущую систему координат.

Стиль линии, символ маркера и цвет, заданный как вектор символов. Элементы вектора символов могут появиться в любом порядке, и можно не использовать одну или несколько опций от спецификатора вектора символов.

Пример: '--or' является красной поверхностью с круговыми маркерами и пунктирными линиями

СпецификаторСтиль линии
-Сплошная линия (значение по умолчанию)
--Пунктирная линия
:Пунктирная линия
-.Штрихпунктирная линия
СпецификаторМаркер
oКруг
+Знак «плюс»
*Звездочка
.Точка
xКрест
sКвадрат
dРомб
^Треугольник, направленный вверх
vНисходящий треугольник
>Треугольник, указывающий вправо
<Треугольник, указывающий влево
pПентаграмма
hГексаграмма
СпецификаторЦвет

y

желтый

m

пурпурный

c

голубой

r

красный

g

зеленый

b

синий

w

белый

k

черный

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'Marker','o','MarkerFaceColor','red'

Перечисленные здесь свойства являются только подмножеством. Для полного списка смотрите FunctionSurface Properties.

Количество оценки указывает на направление, заданное как номер. Значением по умолчанию является 35. Поскольку объекты fsurf используют адаптивную оценку, фактическое количество точек оценки больше.

Пример: 100

Отобразите контурный график в соответствии с графиком, заданным как 'off' (значение по умолчанию) или 'on'.

Цвет линии, заданный как 'interp', триплет RGB, шестнадцатеричный цветовой код, название цвета или краткое название. Значение триплета RGB по умолчанию [0 0 0] соответствует черный. Значение 'interp' окрашивает ребра на основе значений ZData.

Для пользовательского цвета задайте триплет RGB или шестнадцатеричный цветовой код.

  • Триплет RGB представляет собой трехэлементный вектор-строку, элементы которого определяют интенсивность красных, зеленых и синих компонентов цвета. Интенсивность должны быть в диапазоне [0,1]; например, [0,4 0,6 0,7].

  • Шестнадцатеричный цветовой код является вектором символов или скаляром строки, который запускается с символа хеша (#), сопровождаемый тремя или шестью шестнадцатеричными цифрами, которые могут колебаться от 0 до F. Значения не являются чувствительными к регистру. Таким образом цветовые коды '#FF8800', '#ff8800', '#F80' и '#f80' эквивалентны.

Кроме того, вы можете задать имена некоторых простых цветов. Эта таблица приводит опции именованного цвета, эквивалентные триплеты RGB и шестнадцатеричные цветовые коды.

Название цветаКраткое названиеТриплет RGBШестнадцатеричный цветовой кодВнешний вид
'red''r'[1 0 0]'#FF0000'

'green''g'[0 1 0]'#00FF00'

'blue''b'[0 0 1]'#0000FF'

'cyan' 'c'[0 1 1]'#00FFFF'

'magenta''m'[1 0 1]'#FF00FF'

'yellow''y'[1 1 0]'#FFFF00'

'black''k'[0 0 0]'#000000'

'white''w'[1 1 1]'#FFFFFF'

'none'Не применяетсяНе применяетсяНе применяетсяНет цвета

Вот являются триплеты RGB и шестнадцатеричные цветовые коды для цветов по умолчанию использованием MATLAB® во многих типах графиков.

Триплет RGBШестнадцатеричный цветовой кодВнешний вид
[0 0.4470 0.7410]'#0072BD'

[0.8500 0.3250 0.0980]'#D95319'

[0.9290 0.6940 0.1250]'#EDB120'

[0.4940 0.1840 0.5560]'#7E2F8E'

[0.4660 0.6740 0.1880]'#77AC30'

[0.3010 0.7450 0.9330]'#4DBEEE'

[0.6350 0.0780 0.1840]'#A2142F'

Стиль линии, заданный как одна из опций, перечислен в этой таблице.

Стиль линииОписаниеПолучившаяся строка
'-'Сплошная линия

'--'Пунктирная линия

':'Пунктирная линия

'-.'Штрих-пунктирная линия

'none'Никакая строкаНикакая строка

Ширина линии, заданная как положительное значение в точках, где 1 точка = 1/72 дюйма. Если у линии есть маркеры, ширина линии также влияет на края маркера.

Символ маркера, заданный как одно из значений в этой таблице. По умолчанию строка не имеет маркеров. Добавьте маркеры в выбранных точках вдоль строки путем определения маркера.

ЗначениеОписание
'o'Круг
'+'Знак «плюс»
'*'Звездочка
'.'Точка
'x'Крест
square' или 's'Квадрат
'diamond' или 'd'Ромб
'^'Треугольник, направленный вверх
'v'Нисходящий треугольник
'>'Треугольник, указывающий вправо
'<'Треугольник, указывающий влево
pentagram' или 'p'Пятиконечная звезда (пентаграмма)
'hexagram' or 'h'Шестиконечная звезда (гексаграмма)
'none'Никакие маркеры

Цвет контура маркера, заданный как 'auto', триплет RGB, шестнадцатеричный цветовой код, название цвета или краткое название. Значение по умолчанию 'auto' использует тот же цвет в качестве свойства EdgeColor.

Для пользовательского цвета задайте триплет RGB или шестнадцатеричный цветовой код.

  • Триплет RGB представляет собой трехэлементный вектор-строку, элементы которого определяют интенсивность красных, зеленых и синих компонентов цвета. Интенсивность должны быть в диапазоне [0,1]; например, [0,4 0,6 0,7].

  • Шестнадцатеричный цветовой код является вектором символов или скаляром строки, который запускается с символа хеша (#), сопровождаемый тремя или шестью шестнадцатеричными цифрами, которые могут колебаться от 0 до F. Значения не являются чувствительными к регистру. Таким образом цветовые коды '#FF8800', '#ff8800', '#F80' и '#f80' эквивалентны.

Кроме того, вы можете задать имена некоторых простых цветов. Эта таблица приводит опции именованного цвета, эквивалентные триплеты RGB и шестнадцатеричные цветовые коды.

Название цветаКраткое названиеТриплет RGBШестнадцатеричный цветовой кодВнешний вид
'red''r'[1 0 0]'#FF0000'

'green''g'[0 1 0]'#00FF00'

'blue''b'[0 0 1]'#0000FF'

'cyan' 'c'[0 1 1]'#00FFFF'

'magenta''m'[1 0 1]'#FF00FF'

'yellow''y'[1 1 0]'#FFFF00'

'black''k'[0 0 0]'#000000'

'white''w'[1 1 1]'#FFFFFF'

'none'Не применяетсяНе применяетсяНе применяетсяНет цвета

Вот являются триплеты RGB и шестнадцатеричные цветовые коды для цветов по умолчанию использованием MATLAB во многих типах графиков.

Триплет RGBШестнадцатеричный цветовой кодВнешний вид
[0 0.4470 0.7410]'#0072BD'

[0.8500 0.3250 0.0980]'#D95319'

[0.9290 0.6940 0.1250]'#EDB120'

[0.4940 0.1840 0.5560]'#7E2F8E'

[0.4660 0.6740 0.1880]'#77AC30'

[0.3010 0.7450 0.9330]'#4DBEEE'

[0.6350 0.0780 0.1840]'#A2142F'

Пример: [0.5 0.5 0.5]

Пример: 'blue'

Пример: '#D2F9A7'

Цвет заливки маркера, заданный как 'auto', триплет RGB, шестнадцатеричный цветовой код, название цвета или краткое название. Значение 'auto' использует тот же цвет в качестве свойства MarkerEdgeColor.

Для пользовательского цвета задайте триплет RGB или шестнадцатеричный цветовой код.

  • Триплет RGB представляет собой трехэлементный вектор-строку, элементы которого определяют интенсивность красных, зеленых и синих компонентов цвета. Интенсивность должны быть в диапазоне [0,1]; например, [0,4 0,6 0,7].

  • Шестнадцатеричный цветовой код является вектором символов или скаляром строки, который запускается с символа хеша (#), сопровождаемый тремя или шестью шестнадцатеричными цифрами, которые могут колебаться от 0 до F. Значения не являются чувствительными к регистру. Таким образом цветовые коды '#FF8800', '#ff8800', '#F80' и '#f80' эквивалентны.

Кроме того, вы можете задать имена некоторых простых цветов. Эта таблица приводит опции именованного цвета, эквивалентные триплеты RGB и шестнадцатеричные цветовые коды.

Название цветаКраткое названиеТриплет RGBШестнадцатеричный цветовой кодВнешний вид
'red''r'[1 0 0]'#FF0000'

'green''g'[0 1 0]'#00FF00'

'blue''b'[0 0 1]'#0000FF'

'cyan' 'c'[0 1 1]'#00FFFF'

'magenta''m'[1 0 1]'#FF00FF'

'yellow''y'[1 1 0]'#FFFF00'

'black''k'[0 0 0]'#000000'

'white''w'[1 1 1]'#FFFFFF'

'none'Не применяетсяНе применяетсяНе применяетсяНет цвета

Вот являются триплеты RGB и шестнадцатеричные цветовые коды для цветов по умолчанию использованием MATLAB во многих типах графиков.

Триплет RGBШестнадцатеричный цветовой кодВнешний вид
[0 0.4470 0.7410]'#0072BD'

[0.8500 0.3250 0.0980]'#D95319'

[0.9290 0.6940 0.1250]'#EDB120'

[0.4940 0.1840 0.5560]'#7E2F8E'

[0.4660 0.6740 0.1880]'#77AC30'

[0.3010 0.7450 0.9330]'#4DBEEE'

[0.6350 0.0780 0.1840]'#A2142F'

Example: [0.3 0.2 0.1]

Пример: 'green'

Пример: '#D2F9A7'

Размер маркера, заданный как положительное значение в точках, где 1 точка = 1/72 дюйма.

Выходные аргументы

свернуть все

Один или несколько объектов, возвращенных как скаляр или вектор. Объект является или функциональным объектом подложки или параметризованным объектом подложки, в зависимости от типа графика. Можно использовать эти объекты запросить и изменить свойства определенной строки. Для получения дополнительной информации смотрите FunctionSurface Properties и ParameterizedFunctionSurface Properties.

Алгоритмы

fsurf присваивает символьные переменные в f к оси x, затем ось y, и symvar определяет порядок переменных, которые будут присвоены. Поэтому переменная и имена оси не могут соответствовать. Чтобы обеспечить fsurf, чтобы присвоить x или y к его соответствующей оси, создайте символьную функцию, чтобы построить, затем передать символьную функцию fsurf.

Например, следующий код строит f (x, y) = sin (y) двумя способами. Первый путь обеспечивает волны, чтобы колебаться относительно оси y. Второй путь присваивает y оси x, потому что это является первым (и только) переменная в символьной функции.

syms x y;
f(x,y) = sin(y);

figure;
subplot(2,1,1)
fsurf(f);
subplot(2,1,2)
fsurf(f(x,y)); % Or fsurf(sin(y));

Введенный в R2016a