【发布时间】:2013-05-27 21:53:05
【问题描述】:
我想使用 Octave 绘制具有两个变量的相当简单的函数,例如: f(x,y) = x^2 + 3y 。绘制单变量函数非常容易,但我在找出如何执行两个变量函数时遇到了很多麻烦。有谁知道这样做的最佳方法?
【问题讨论】:
我想使用 Octave 绘制具有两个变量的相当简单的函数,例如: f(x,y) = x^2 + 3y 。绘制单变量函数非常容易,但我在找出如何执行两个变量函数时遇到了很多麻烦。有谁知道这样做的最佳方法?
【问题讨论】:
绘制一个包含两个变量的函数通常意味着一个 3 维绘图 - 在 MATLAB 中,您可以使用函数 plot3。要在 X 和 Y 的区间 [-10,10] 内绘制函数 f(x,y),可以使用以下命令:
x = [-10:.1:10];
y = [-10:.1:10];
plot3(x, y, x.^2 + 3*y)
grid on
【讨论】:
如果它可以帮助那里的人......我在 Octave 中运行了接受答案中的代码,我得到了这个情节:
但我真的想要 x 和 y 的笛卡尔积中每个点的函数,而不仅仅是沿对角线,所以我使用函数 mesh 来获得这个 3D 图,其中投影轮廓线在 x,y飞机:
x = [-10:.1:10];
y = [-10:.1:10];
[xx, yy] = meshgrid (x, y);
z = xx.^2 + 3*yy;
mesh(x, y, z)
meshc(xx,yy,z)
xlabel ("x");
ylabel ("y");
zlabel ("f(x,y)");
title ("f(x,y) = x^2 + 3y");
grid on
为了摆脱情节的网状线纹理,函数surf 做到了:
x = [-10:.1:10];
y = [-10:.1:10];
[xx, yy] = meshgrid (x, y);
z = xx.^2 + 3*yy;
h = surf(xx,yy,z);
colormap hsv;
set(h,'linestyle','none');
xlabel ("x");
ylabel ("y");
zlabel ("f(x,y)");
title ("f(x,y) = x^2 + 3y");
另一种绘图方式是带有等高线的heatmap:
x = [-10:.1:10];
y = [-10:.1:10];
[xx, yy] = meshgrid (x, y);
z = xx.^2 + yy.*3;
contourf(xx,yy,z);
colormap hsv;
xlabel ("x");
ylabel ("y");
zlabel ("f(x,y)");
title ("f(x,y) = x^2 + 3y");
grid on
为了完整起见,可以标记级别:
x = [-10:.1:10];
y = [-10:.1:10];
[xx, yy] = meshgrid (x, y);
z = xx.^2 + 3*yy;
[C,h] = contour(xx,yy,z);
clabel(C,h)
xlabel ("x");
ylabel ("y");
zlabel ("f(x,y)");
title ("f(x,y) = x^2 + 3y");
grid on
【讨论】:
surfc (see documentation) 使这个答案成为规范。希望你补充。
除了来自@Toni 和@esskov 的出色答案之外,对于具有两个变量的函数的未来绘图仪,contour 和contourf 函数对于某些应用程序很有用。
MATLAB 代码(2018b):
x = [-10:.1:10];
y = [-20:.1:20];
[xx, yy] = meshgrid (x, y);
z = xx.^2 + 3*yy; % Borrowed 4 lines from @Toni
figure
s(1) = subplot(1,2,1), hold on % Left Plot
[M,c] = contour(xx,yy,z); % Contour Plot
c.ShowText = 'on'; % Label Contours
c.LineWidth = 1.2; % Contour Line Width
xlabel('X')
ylabel('Y')
box on
s(2) = subplot(1,2,2), hold on % Right Plot
[M2,c2] = contourf(xx,yy,z);
colorbar % Add Colorbar
xlabel('X')
ylabel('Y')
box on
title(s(1),'Contour Plot')
title(s(2),'Filled Contour Plot')
更新:添加了surfc的示例
h = surfc(xx,yy,z)
【讨论】:
contourf。你的答案现在只是规范......