北太天元有限差分方法的网格剖分和展示
北太天元卢朓
编辑于 2024年03月10日 19:48
收录于文集
共84篇

有限差分方法求解空间一维时间依赖的偏微分方程在有限差分方法中,网格剖分是将连续的空间和时间域离散化为有限个网格点的过程,从而在这些点上近似求解偏微分方程。

代码块
JavaScript
自动换行
复制代码
% 北太天元 
% 参数设置  
L = 1;          % 空间域长度:定义了空间范围的最大值,这里是1单位长度。  
T = 0.5;        % 时间总长:定义了模拟时间的最大值,这里是0.5单位时间。  
Nx = 11;        % 空间网格点数:在空间域上划分的网格点数量,包括两个边界点。  
Nt = 11;        % 时间网格点数:在时间域上划分的网格点数量。  
  
% 初始化网格  
x = linspace(0, L, Nx);  % 生成空间网格上的点:在0到L之间均匀分布Nx个点。  
t = linspace(0, T, Nt);  % 生成时间网格上的点:在0到T之间均匀分布Nt个点。  
  
% 创建网格矩阵  
[XX, TT] = meshgrid(x, t);  % 生成二维网格矩阵:创建一个以x为行、t为列的二维矩阵,用于绘制网格。  XX 和  TT 都是 Nx x Nt 的矩阵 
  
% 绘制网格线  
figure;  % 创建一个新的图形窗口:打开一个新的绘图窗口。  
  
% 绘制空间网格线(竖直线)  
for i = 1:Nx    
    line([XX(i, :) XX(i, :)], [TT(i, :) TT(i, :)], 'Color', 'k', 'LineStyle', ':');    
end    
% 对于每个空间网格点,绘制一条从时间0到时间T的竖直线,表示空间位置不变。  
  
% 绘制时间网格线(水平线)  
for j = 1:Nt    
    line([XX(:, j) XX(:, j)], [TT(:, j) TT(:, j)], 'Color', 'k', 'LineStyle', '--');    
end    
% 对于每个时间网格点,绘制一条贯穿所有空间点的水平线,表示时间不变。  
  
% 设置图形属性  
xlabel('Space');  % x轴标签设置为“Space”。  
ylabel('Time');   % y轴标签设置为“Time”。  
title('北太天元:1D Space-Time Grid for Finite Difference Method');  % 图形标题设置为指定的文本。  
xlim([0 L]);  % x轴范围设置为从0到L。  
ylim([0 T]);  % y轴范围设置为从0到T。  
grid off; % 关闭北太天元自带的网格线。  
  
% 添加一些文本说明(可选)  
hold on  % 保持当前图形,以便在同一张图上继续添加内容。  
for i = 1:5:Nx  % 每隔5个空间网格点进行一次操作。  
    for j = 1:5:Nt  % 每隔5个时间网格点进行一次操作。  
        % 在指定的网格点上添加文本标签,显示该点的坐标。  
        text(XX(i,j), TT(i,j), sprintf('(%.2f, %.2f)', XX(i,j), TT(i,j)), ...    
            'HorizontalAlignment', 'center', ...  % 文本水平居中对齐。  
            'VerticalAlignment', 'middle', ...  % 文本垂直居中对齐。  
            'FontSize', 8);  % 文本字体大小设置为8。  
        % 在指定的网格点上添加一个红色的散点标记。  
        scatter(XX(i,j),TT(i,j),10,'r','filled');    
    end    
end  
hold off  % 释放当前图形,完成绘图。
复制成功

用例子演示了meshgrid, linspace, line, text, scatter 等几个函数的用法