4D "plot" 的 2D Contours/Slices?

2D Contours/Slices of a 4D "plot"?

如何在 matlab 中绘制 4D 函数的 2D 切片(轮廓)?我无法使用 slice,因为我的函数 f 是符号函数。该函数是 3D 正弦傅立叶变换,其中傅立叶系数是从概率分布中随机选择的。

r=zeros(10,10,10);
for k1=1:10
    for k2=1:10
        for k3=1:10
             r(k1,k2,k3)=rand./(sqrt(2)*(k1.^2+k2.^2+k3.^2).^1/4);
        end
    end
end
syms x1 x2 x3;
f=0;

for n1=1:10
    for n2=1:10
        for n3=1:10
      f=f+r(n1,n2,n3).*sin((pi/5)*(n1.*x1))*sin((pi/5)*(n2.*x2))*sin((pi/5)*(n3.*x3));
        end
    end
end

contourf(f)

您正在处理非常非常长的符号方程,因此这将花费大量的计算时间。

执行此操作的一种方法是对轮廓进行数值评估。为此,您需要对 1 个切片进行数值计算,然后就可以轻松绘制轮廓。但是你的函数计算量很大。

以你的例子为例,你可以(为了方便)做:

f2=@(a,b,c)(double(subs(f,[x1 x2 x3],[a b c])));

现在 f2(a,b,c) 将为我们提供函数 f[x1 x2 x3]=[a b c].

点的数值

现在我们可以简单地:

% create a domain of interest with desired steps
[x1,x2]=meshgrid(-1:0.1:1,-1:0.2:1);
%choose a z value
z=1;
% evaluate the function on the chosen domain
slc=zeros(size(x1));
for jj=1:size(x1,1)
     for kk=1:size(x1,2)
         slc(jj,kk)=f2(x1(jj,kk),x2(jj,kk),z);
     end
 end

% plot
contour(x1,x2,slc,10)

如果您在开头添加代码 rng(1),您应该会看到以下输出:

您应该能够轻松修改此代码,为您的切片添加不同的 values/ranges/dimensions。


请注意,您所拥有的是体积数据,可以争论它是否是 4D 数据。但是,如果你确实有数字(而不是符号),你应该看看 other volumetric data visualization techniques here.