clc;
clear;

% 创建一个由 0 值组成的 151×151 矩阵
f = zeros(151);

% 定义初始条件
u = -0.5;
dt = 0.1;
dx = 0.1;

for i = 1:151
    if i >= 100 && i <= 120
        f(1, i) = 3;
    else
        f(1, i) = 0;
    end
end

% 设定左右边界条件
f(:, 1) = 0;
f(:, 151) = 0;

% 使用显式格式差分方法进行求解
for n = 1:150
    for i = 1:150
        f(n+1, i) = f(n, i) - u * dt / dx * (f(n, i+1) - f(n, i));
    end
end

% 可视化结果
% 设定参数
C = 0:0.05:15;
Z = zeros(150, 302);
Z(1, 200:240) = 3;

for n = 1:150
    for i = 1:300
        Z(n+1, i) = Z(n, i+1);
    end
end

% 画出传播的波并将绘图存进视频
fig = figure;
writerobj = VideoWriter('MTX+HW_modified.avi', 'MPEG-4'); % 定义一个视频文件用来存动画
open(writerobj); % 打开该视频文件
x = 0:0.1:15;

for n = 1:151
    plot(x, f(n, :), 'LineWidth', 2);
    set(gca, 'fontsize', 15);
    xlabel('\it x', 'FontSize', 15, 'Fontname', 'Times New Roman');
    ylabel('\it u(x,t)', 'FontSize', 15, 'Fontname', 'Times New Roman');
    title('波传播模拟');
    axis([1, 15, -0.5, 5]);
    hold on;
    
    % 画出理论波形并将绘图存进视频
    D = Z(n, :);
    D(:, 301) = [];
    plot(C, D, 'LineWidth', 2);
    hold off;
    
    legend('传播的波', '理论波形');
    frame = getframe(fig);
    writeVideo(writerobj, frame);
end

close(writerobj);
MATLAB波传播模拟与可视化

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

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