如何在MATLAB中于同一网格绘制多个高斯正态分布曲面图?
在MATLAB同一网格中绘制多个等距高斯正态分布的实现方法
嘿,我看你已经写好了单个高斯光束辐照度的绘制代码,现在想在同一网格里等距放置多个这类分布对吧?这事儿其实不难,核心思路就是给每个高斯光束的z轴位置加上不同的偏移量,然后批量计算并叠加绘制就行。我给你修改了代码,还加了关键部分的解释:
核心修改点
- 定义要生成的光束数量和相邻光束的间距
- 生成等距的z轴偏移量,让每个光束在水平方向均匀分布
- 批量计算每个偏移位置的辐照度,最后在同一图中叠加绘制
修改后的完整代码
lambda = 1; % 波长 E0 = 1; % 电场振幅最大值 num_beams = 5; % 要绘制的高斯光束数量 beam_spacing = 10*lambda; % 相邻光束的间距(可根据需求调整) % ================================================================== % 准备坐标网格 % ---------------------------- zLin = linspace(-201,201,400) * lambda; % z轴坐标(水平方向) rLin = linspace(-65,65,100) * lambda; % 径向坐标(垂直方向) [z,r] = meshgrid(zLin,rLin); % 创建网格 % =================================================================== wFactor = 4; w0 = wFactor * lambda; % 最小束腰 zR = pi* w0^2 / lambda; % 瑞利长度 % 生成等距的z轴偏移量,让光束均匀分布 offsets = linspace(-(num_beams-1)/2*beam_spacing, (num_beams-1)/2*beam_spacing, num_beams); % 初始化辐照度矩阵,用于存储所有光束的叠加结果 I_total = zeros(size(z)); % 循环计算每个偏移光束的辐照度并叠加 for offset = offsets w = w0 * sqrt( 1 + ((z - offset) / zR) .^2 ); % 每个偏移位置的光束半径 I0 = abs(E0)^2/377; % 自由空间参数eta=377 I_beam = I0 .* (w0 ./ w).^2 .* exp( -2*(r./w).^2 ); % 单个光束的辐照度 I_total = I_total + I_beam; % 叠加到总辐照度 end % 绘制总辐照度 surf(z,r,I_total); shading interp; hold off;
代码说明
- 光束数量与间距:你可以通过调整
num_beams和beam_spacing来控制分布的数量和间距,完全按需调整就行。 - 偏移量计算:
linspace生成的偏移量会让光束以中间位置为中心,左右对称等距分布,保证布局均匀。 - 叠加辐照度:我们用
I_total来累加所有光束的辐照度,这样最终绘制的就是多个高斯光束叠加后的效果;如果你想单独显示每个光束的轮廓,也可以把surf放到循环里,加上hold on即可。
内容的提问来源于stack exchange,提问作者Muhamed Sewidan
相关产品推荐
相关产品推荐

