Семейство fplot
принимает символьные выражения и уравнения как входные параметры, разрешающие легкий аналитический графический вывод, явным образом не генерируя числовые данные.
Этот пример показывает следующие функции
fplot
fplot3
fsurf
fcontour
fmesh
fimplicit
fimplicit3
syms x
fplot(sin(exp(x)))
fplot([sin(x),cos(x),tan(x)])
syms x y r = 1:10; fimplicit(x^2+y^2 == r)
subs
syms x a expression = sin(exp(x/a))
expression =
fplot(subs(expression,a,[1,2,4])) hold off legend show
Исследуйте приближение сплайна к
syms f(x) f(x) = x*exp(-x)*sin(5*x) -2; xs = 0:1/3:3; ys = double(subs(f,xs)); fplot(f,[0,3]) hold on plot(xs,ys,'*k','DisplayName','Data Points') fplot(@(x) spline(xs,ys,x),[0 3],'DisplayName','Spline interpolant') hold off grid on legend show
syms x n = 5; approx = cumsum(sin((1:2:2*n-1)*x)./(1:2:2*n-1)); fplot(approx,'LineWidth',1)
С символьным входом мы можем выполнить вычисления и построить результаты.
syms f(a,x)
assume(a>0);
f(a,x) = a*x^2+a^2*x+2*sqrt(a)
f(a, x) =
x_min = solve(diff(f,x), x)
x_min =
fplot(f(a,x_min),[0 5]) xlabel 'a' title 'Minimum value of f depending on a'
assume(a,'clear')
syms x t6 = taylor(cos(x),x,'Order',6)
t6 =
t8 = taylor(cos(x),x,'Order',8)
t8 =
fplot([cos(x) t6 t8]) xlim([-4 4]) ylim([-1.5, 1.5]) title '6th and 8th Order Taylor Series approximations to cos(x)' legend show
Некоторые символьные выражения не могут быть преобразованы в функции MATLAB.
syms x
f = x^x
f =
int(f,x)
ans =
diff(f,x)
ans =
fplot([f, int(f,x), diff(f,x)],[0 2])
legend show
Кривые или может чертиться fplot
или fplot3
(точно так же, как с plot
или plot3
для числовых данных):
syms t fplot3(sin(t)-t/2,cos(t),t^3,'--','LineWidth',2.5) view([-45 45])
syms x y fsurf(sin(x)+sin(y)-(x^2+y^2)/20,'ShowContours','on') set(camlight,'Color',[0.5 0.5 1]); set(camlight('left'),'Color', [1 0.6 0.6]); set(camlight('left'),'Color', [1 0.6 0.6]); set(camlight('right'),'Color', [0.8 0.8 0.6]); material shiny view(-19,56)
meshgrid
syms x y u = diff(diff(sin(x^2+y^2)))
u =
v = diff(diff(cos(x^2+y^2)))
v =
[X, Y] = meshgrid(-3:.1:3,-2:.1:2); U = subs(u, [x y], {X,Y}); V = subs(v, [x y], {X,Y}); startx = -3:0.1:3; starty = zeros(size(startx)); h = streamline(X,Y,U,V,X,Y); for i=1:length(h)-1 h(i).Color = [rand() rand() rand()]; end
Как fplot
, fsurf
выполняет ваше символьное выражение более плотно при необходимости, чтобы более точно показать изогнутые области и асимптотические области.
fsurf(log(x) + exp(y), [-2 2])
Постройте неявную поверхность . Задайте вывод, чтобы заставить fimplicit3 возвратить объект графика.
syms x y z f = 1/x^2 - 1/y^2 + 1/z^2; fimplicit3(f)
В отличие от чистых символьных функций (как int
, diff
, solve
), fsurf
не позволяет задавать порядок переменных. Чтобы установить порядок, используйте символьные функции:
syms f(t) x(u,v) y(u,v) z(u,v) f(t) = sin(t)*exp(-t^2/3)+1.5; x(u,v) = u
x(u, v) =
y(u,v) = f(u)*sin(v)
y(u, v) =
z(u,v) = f(u)*cos(v)
z(u, v) =
fsurf(x,y,z,[-5 5.1 0 2*pi])
fmesh
для 3D сетчатых графиковПостройте параметризованную mesh
где
syms s t r = 8 + sin(7*s + 5*t); x = r*cos(s)*sin(t); y = r*sin(s)*sin(t); z = r*cos(t); fmesh(x, y, z, [0 2*pi 0 pi], 'Linewidth', 2) axis equal
syms x y g(x,y) g(x,y) = x^3-4*x-y^2
g(x, y) =
fcontour(g,[-3 3 -4 4],'LevelList',-6:6) title 'Some Elliptic Curves'