%% 数据读取
data_array = tec2mat(‘y=0_mhd_1_t00000005_n00061435.dat’);
ZONEVARlist = data_array.ZONEVARlist;
Var_name = arrayfun(@(x) x.name, data_array.data, ‘UniformOutput’, false);
%% 提取变量名和数据
function varargout = getData(data_array, Var_name, varList) % 新增Var_name参数
nVar = numel(varList);
if nargout ~= nVar
error(‘getData:输出参数个数必须与 varList 长度一致!’);
end
% 预分配 cell out = cell(1, nVar); % 逐维提取(使用Var_name查找变量) for k = 1:nVar % 从Var_name中查找匹配的变量名(忽略大小写) idx = find(strcmpi(Var_name, varList{k})); if isempty(idx) error('getData:找不到变量名 <%s>', varList{k}); end out{k} = data_array.data(idx).data; % 提取对应的数据 end varargout = out;
end
%% 定义 cleanData 函数
function cleaned = cleanData(data)
cleaned = filloutliers(data, ‘linear’, ‘ThresholdFactor’, 3);
end
%% 调用函数
[X, Y, Z, Rho, Ux, Uy, Uz, Bx, By, Bz, p, Jx, Jy, Jz] = …
getData(data_array, Var_name, {‘X [R]’,‘Y [R]’,‘Z [R]’,‘r [amu/cm^3]', ... 'U_x [km/s]','U_y [km/s]','U_z [km/s]', ... 'B_x [nT]','B_y [nT]','B_z [nT]', ... 'p [nPa]','J_x [mA/m^2]’,‘J_y [mA/m^2]','J_z [mA/m^2]’});
%% 数据质量检查
Bx_clean = cleanData(Bx); % 现在可正常调用
By_clean = cleanData(By);
Bz_clean = cleanData(Bz);
%% 网格重构与插值
x_lin = linspace(-120, 80, 300); % 强制指定X范围
z_lin = linspace(-80, 80, 300); % 强制指定Z范围
[Xq, Zq] = meshgrid(x_lin, z_lin);
% 网格插值
Bx_grid = griddata(X, Z, Bx_clean, Xq, Zq, ‘natural’);
% 标记并处理无数据区域
nan_mask = isnan(Bx_grid);
Bx_grid(nan_mask) = 0;
% 高斯平滑
gaussFilter = fspecial(‘gaussian’, [5 5], 1);
Bx_grid = imfilter(Bx_grid, gaussFilter, ‘replicate’);
% 定义天体半径
R_planet = 3;
% 计算每个网格点的半径(Xq 和 Zq 是 meshgrid 生成的网格坐标)
radius = sqrt(Xq.^2 + Zq.^2);
% 创建掩膜:半径小于等于 R_planet 的区域(即天体内部)
mask = radius <= R_planet;
% 将天体内部的数据设置为 0
Bx_grid(mask) = 0;
%% 数据可视化
% 调整颜色轴范围(从最小值到最大值)
cmin = min(Bx_grid(😃);
cmax = max(Bx_grid(😃);
caxis([cmin, cmax]);
h = pcolor(x_lin, z_lin, Bx_grid);
h.EdgeColor = ‘none’;
shading interp;
colorbar(caxis);
colormap(jet(256));
xlabel(‘X [R]’, ‘FontWeight’, ‘bold’);
ylabel(‘Z [R]’, ‘FontWeight’, ‘bold’);
title(sprintf(‘B_x @ y=0 (nT)\fontsize{8}\color{gray}t=%s’, data_array.time), …
‘Interpreter’, ‘tex’);
修改上面代码正确运行,总代码
最新发布