如何在Matlab中绘制多个变量的函数?

时间:2015-01-06 06:39:02

标签: matlab plot

我试图找出一种方法在Matlab中绘制一个接受k参数并返回3D点的函数图。目前,我已经将此工作用于两个变量mn。如何将此过程扩展为任意数量的参数?

K = zeros(360*360, number);
for m = 0:5:359
    for n = 1:5:360
            K(m*360 + n, 1) = cosd(m)+cosd(m+n);
            K(m*360 + n, 2) = sind(m)+sind(m+n);
            K(m*360 + n, 3) = cosd(m)+sind(m+n);
    end
end
K(all(K==0,2),:)=[];

plot3(K(:,1),K(:,2),K(:,3),'.');
end

您在上面看到的代码是针对类似问题但不完全相同的。

1 个答案:

答案 0 :(得分:2)

大多数情况下,您可以使用ndgrid以矢量化方式执行此操作。

[M, N] = ndgrid(0:5:359, 1:5:360);

X = cosd(M)+cosd(M+N);
Y = sind(M)+sind(M+N);
Z = cosd(M)+sind(M+N);

allZero = (X==0)&(Y==0)&(Z==0); % This ...
X(allZero) = [];                % does not ...
Y(allZero) = [];                % do ...
Z(allZero) = [];                % anything.

plot3(X,Y,Z,'b.');

一点解释: 致电[M, N] = ndgrid(0:5:359, 1:5:360);会生成所有组合,其中M0:5:359的元素,而N1:5:360的元素。这将采用两个矩阵MN的形式。如果您愿意,可以使用M = M(:); N = N(:);将这些矩阵重新整形为向量,但这里不需要这样做。 如果你还有另一个变量,你可以使用:[M, N, P] = ndgrid(0:5:359, 1:5:360, 10:5:1000)

顺便说一下:删除条目[0,0,0]的代码部分在此处不执行任何操作,因为此值不会显示。我看到你只需要它,因为你分配的内存比你实际需要的多得多。以下是原始代码的两个版本,它们不如ndgrid版本好,但比原始版本更好:

m = 0:5:359;
n = 1:5:360;
K = zeros(length(m)*length(n), 3);
for i = 1:length(m)
    for j = 1:length(n)
            nextRow = (i-1)*length(n) + j;
            K(nextRow, 1) = cosd(m(i)) + cosd(m(i)+n(j));
            K(nextRow, 2) = sind(m(i)) + sind(m(i)+n(j));
            K(nextRow, 3) = cosd(m(i)) + sind(m(i)+n(j));
    end
end

或更简单,但有点慢:

K = [];
for m = 0:5:359
    for n = 1:5:360
            K(end+1,1:3) = 0;
            K(end, 1) = cosd(m)+cosd(m+n);
            K(end, 2) = sind(m)+sind(m+n);
            K(end, 3) = cosd(m)+sind(m+n);
    end
end