clc;
clear;

f = zeros(151,151);
u = -0.5;
t = 0.1;
x = 0.1;
f(1,100:120) = 3; 
f(:,1)=0;
f(:,end)=0;

video = VideoWriter('wave_propagation.avi');
open(video);

for n=1:150
    for i=2:149
        f(n+1,i) = f(n,i)-u*t/x*(f(n,i+1)-f(n,i));
    end
    
    theory_wave = zeros(1,151);
    theory_wave(1,100:120) = 3;
    theory_wave = circshift(theory_wave, [0, n]);
    
    plot(f(n+1,:),'LineWidth',3);
    hold on;
    plot(theory_wave,'LineWidth',3);
    hold off;
    legend('传播的波','理论波形');
    axis([0 151 -1 4]);
    xlabel('x','FontSize',16);
    ylabel('f(t,x)','FontSize',16);
    pause(0.01);

    frame = getframe(gcf);
    writeVideo(video, frame);
end

close(video);

这段Matlab代码模拟了一维波动传播过程,并将结果可视化。

代码解释:

  1. 初始化:

    • 创建一个 151x151 的矩阵 f 来存储每个时间步长的波的形状,初始化为0。
    • 设置波的传播速度 u,时间步长 t 和空间步长 x
    • 设置初始波形为一个方波。
    • 设置边界条件,使波在边界处不反射。
    • 创建一个 VideoWriter 对象来保存模拟动画。
  2. 迭代计算:

    • 使用嵌套循环遍历时间和空间维度。
    • 使用有限差分法计算每个时间步长内每个点的波幅值。
    • 使用 circshift 函数模拟理论波形的传播。
  3. 可视化:

    • 使用 plot 函数绘制模拟波和理论波的图像。
    • 使用 legend, axis, xlabel, ylabel 函数添加图例、坐标轴标签等。
    • 使用 pause 函数控制动画速度。
    • 使用 getframewriteVideo 函数将每一帧图像保存到视频文件中。
  4. 结束:

    • 关闭视频文件。

这段代码提供了一个简单易懂的波动传播模拟示例,可以通过修改参数和初始条件来研究不同的波动现象。

Matlab波动传播模拟与可视化

原文地址: https://www.cveoy.top/t/topic/XsK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录