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

Matlab二维海啸模拟参数修改后波传播可视化失效求助

2D海啸模拟波传播不显示的排查与修复

以下是针对你修改参数后仅显示初始高斯分布、无波传播问题的具体排查点:

  • 检查数值稳定性条件(CFL准则)
    2D波动方程显式格式必须满足CFL条件:dt <= dx / (sqrt(2) * sqrt(g*H0)),其中g=9.8m/s²是重力加速度,sqrt(g*H0)是浅水波速。你修改了H0=5000m,波速会大幅提升(约221m/s),若时间步长dt未同步缩小,会导致数值解失效,场量无法有效更新。计算当前dx与dt的匹配性,比如dx=10000m时,dt最大不能超过32s左右。

  • 验证时间差分格式与场量更新逻辑
    确认波动方程的迭代公式是否正确,标准显式格式应为:

    eta_next = 2*eta_current - eta_prev + (dt^2 * g * H0) * laplacian(eta_current);
    

    同时检查拉普拉斯算子的实现是否正确,尤其是Neumann边界下的差分处理(边界点法向导数为0,即eta(1,:)=eta(2,:)、eta(end,:)=eta(end-1,:),y方向同理)。若差分系数或边界条件写错,场量不会产生传播效果。

  • 排查可视化逻辑

    • 确保绘图代码(如surf(X,Y,eta))放在时间循环内部,且每次迭代后调用drawnow或pause(0.01)刷新画面;
    • 避免固定颜色范围,添加caxis auto让颜色适配当前场量的幅值变化;
    • 若模拟区域过大(sigmax=8e4m、sigmay=2e5m),波传播的位移变化可能在全局视图下不明显,可尝试局部放大初始扰动区域,或调整Z轴缩放比例。
  • 检查变量赋值与调试输出
    确认时间循环中更新后的场量(如eta_next)已正确赋值给绘图用的变量(eta_current = eta_next);在循环内添加调试代码,输出场量的最大值、最小值或方差,判断是数值更新失效还是可视化问题:

    disp(['Iteration ', num2str(t), ' | Max eta: ', num2str(max(eta(:)))]);
    

内容的提问来源于stack exchange,提问作者Davide Conte

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:35:05