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

Maple中驻波的三维实现咨询:如何在已有维度基础上新增一维?

Extending to 3D Standing Waves in Maple

Hey there! Since you've already built a standing wave in 1D or 2D, scaling up to 3D in Maple is totally manageable—let's walk through the exact steps, starting from the math and moving to code and visualization.

1. Quick Mathematical Recap

A 3D standing wave is just the product of 1D standing waves along each spatial axis (x, y, z), thanks to the separation of variables method. The general time-dependent form looks like this:
$$\psi(x,y,z,t) = A \cdot \sin(k_x x) \cdot \sin(k_y y) \cdot \sin(k_z z) \cdot \cos(\omega t)$$
Where:

  • A = wave amplitude
  • kₓ, kᵧ, k_z = wave numbers along each axis (controls node spacing)
  • ω = angular frequency, linked to wave speed v via $\omega = v\sqrt{k_x^2 + k_y^2 + k_z^2}$

If you had a 2D wave before, you just need to add the z-axis term (sin(k_z z)) to extend it to 3D.

2. Step-by-Step Implementation

Step 1: Define Parameters and the 3D Wave Function

First, set your wave parameters and define the time-dependent 3D standing wave function. You can tweak these values to match your existing setup:

# Core wave parameters
A := 1;          # Amplitude of the wave
v := 1;          # Wave speed in the medium
kx := Pi/2;      # Wave number along x-axis (adjust for node count)
ky := Pi/3;      # Wave number along y-axis
kz := Pi/4;      # Wave number along z-axis

# Calculate angular frequency using the dispersion relation
omega := v*sqrt(kx^2 + ky^2 + kz^2);

# Define the time-dependent 3D standing wave function
psi := (x, y, z, t) -> A*sin(kx*x)*sin(ky*y)*sin(kz*z)*cos(omega*t);

# Optional: Time-independent snapshot (e.g., t=0 for maximum amplitude)
psi_static := (x, y, z) -> psi(x, y, z, 0);

Step 2: Visualize the Static 3D Wave

Maple has great tools for visualizing 3D scalar fields. Two common approaches are:

  • Isosurface plots: Show surfaces where the wave amplitude is constant (good for seeing node patterns)
  • Volume plots: Show the full amplitude distribution across the 3D space

Here's code for both:

# Load the plots package (if not already loaded)
with(plots):

# Isosurface plot (show where psi = 0.5 at t=0)
isosurface(psi_static(x,y,z), x=0..4, y=0..6, z=0..8, 0.5, 
           axes=boxed, title="3D Standing Wave Isosurface (t=0)",
           color=red, transparency=0.3);

# Volume plot showing amplitude variation
volumeplot(psi_static(x,y,z), x=0..4, y=0..6, z=0..8, 
           axes=boxed, colorstyle=HUE, title="3D Standing Wave Amplitude Distribution",
           opacity=0.6);

Step 3: Animate the Time-Dependent Wave

To see how the 3D standing wave oscillates over time, use Maple's animate function with either isosurfaces or volume plots:

# Animate the isosurface (tracks where psi = 0.5 as time changes)
animate(isosurface, [psi(x,y,z,t), x=0..4, y=0..6, z=0..8, 0.5, axes=boxed],
        t=0..2*Pi/omega, frames=30, title="Animated 3D Standing Wave",
        color=blue, transparency=0.3);

# Alternative: Animate the full volume plot
animate(volumeplot, [psi(x,y,z,t), x=0..4, y=0..6, z=0..8, axes=boxed, colorstyle=HUE],
        t=0..2*Pi/omega, frames=30, opacity=0.6);

3. Pro Tips for Customization

  • Adjust kx, ky, kz to change the number of nodes along each axis (larger values = more nodes in the same space)
  • To add damping or more complex modes, modify the wave function (e.g., multiply by exp(-gamma*t) for damping, or sum multiple wave modes)
  • If you started with a 1D wave, just add the sin(ky*y) and sin(kz*z) terms to your existing function to expand to 3D

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:33:17