MATLAB波传播模拟与可视化
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);
原文地址: https://www.cveoy.top/t/topic/UwP 著作权归作者所有。请勿转载和采集!