Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Matlab中绘制多变量函数?_Matlab_Plot - Fatal编程技术网

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

如何在Matlab中绘制多变量函数?,matlab,plot,Matlab,Plot,我试图找出一种方法,在Matlab中绘制一个函数,它接受k参数并返回一个3D点。目前,我已经将其用于两个变量m和n。如何将此过程扩展到任意数量的参数 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

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

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

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

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

一点解释: 调用
[M,N]=ndgrid(0:5:359,1:5:360)
生成所有组合,其中
M
0:5:359
的元素,
N
1:5:360
的元素。这将以两个矩阵的形式出现
M
N
。如果需要,可以使用
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
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