如何用八度或matlab中的两个变量绘制函数?

时间:2013-06-01 01:08:53

标签: matlab plot octave

我想使用八度音程来绘制具有两个变量的相当简单的函数,例如:f(x,y)= x ^ 2 + 3y。绘制单变量函数非常容易,但我在查找如何执行两个变量函数时遇到了很多麻烦。有谁知道这样做的最佳方式?

3 个答案:

答案 0 :(得分:9)

绘制两个变量的函数通常意味着三维图 - 在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

答案 1 :(得分:1)

万一它可以帮助某人……我在Octave中运行了已接受答案中的代码,我得到了这个图:

enter image description here

但是我真的想要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

enter image description here

要摆脱绘图的网格线纹理,函数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");

enter image description here

另一种绘制方法是使用带有轮廓线的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

enter image description here

为了完整起见,可以将级别标记为:

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

enter image description here

答案 2 :(得分:1)

除了@Toni@esskov的出色答案之外,对于将来带有两个变量的函数绘图仪,contourcontourf函数对于某些应用程序很有用。

Contour & Filled Contour Plots

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

的示例

3D Surface with contours below

h = surfc(xx,yy,z)