You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab中2D高斯绘制疑问:双1D高斯乘积为何得到平面

问题原因与解决方法

你的问题出在维度不匹配以及对“两个1D高斯乘积”的实现方式错误上,以下是具体分析和修正方案:

你可能犯的错误写法

大概率是直接用一维的x/y数组计算1D高斯后相乘,比如:

x=0:.02:1; y=x; 
r = 0.2;
[X,Y]=meshgrid(x,y);
% 错误:用一维数组计算,得到的结果无法生成曲面
gauss_x = exp(-(x-0.5).^2/(2*r^2));
gauss_y = exp(-(y-0.5).^2/(2*r^2));
Z = gauss_x * gauss_y; % 向量点乘得到标量,mesh后呈现平面

这种写法中,gauss_x和gauss_y是一维数组,用*相乘会得到标量结果,整个Z矩阵被填充为同一个值,自然显示为平面。

正确的实现方式

2D高斯分解为两个1D高斯的乘积,指的是每个网格点上的x方向高斯值乘以对应y方向的高斯值,需要基于meshgrid生成的二维矩阵X和Y来计算:

x=0:.02:1; y=x; 
r = 0.2;
[X,Y]=meshgrid(x,y);
% 基于二维矩阵计算x、y方向的1D高斯
gauss_x = exp(-(X-0.5).^2/(2*r^2));
gauss_y = exp(-(Y-0.5).^2/(2*r^2));
Z = gauss_x .* gauss_y; % 逐元素相乘,得到每个网格点的2D高斯值
mesh(X,Y,Z)
colormap([0 0 0]);

核心原理

meshgrid生成的X是每行都等于x的二维矩阵,Y是每列都等于y的二维矩阵。针对X计算的gauss_x,每个元素对应该网格点x坐标的1D高斯值;同理gauss_y对应y坐标的1D高斯值。用逐元素乘法.*相乘后,每个网格点的值就是两个1D高斯的乘积,最终得到和原代码完全一致的高斯曲面。

内容的提问来源于stack exchange,提问作者sharon shen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:57:18