题目

编写程序,构造一个包含多通道传感器实验记录的矩阵(包含时间步、温度、压力),使用 <code>csvwrite()</code> 将数据持久化保存为 CSV 逗号分隔表格;随后使用 <code>csvread()</code> 指定行列偏移量精准载入,并校验数据的完整性。

输入格式:无需外部输入。

输出格式:输出写入的测试矩阵及读取解析后的矩阵。

数据范围与约定:CSV 数据持久化。

思路与算法

1. csvwrite 与 csvread 规范
专用于纯数值二维矩阵与 CSV 文件之间的快速批量序列化与反序列化。

2. 指定偏移量
csvread(filename, row_offset, col_offset) 可以跳过表头说明文本(从 0 开始计数偏移)。

3. 数值容差校验
载入后使用 max(abs(data_orig(:) - data_read(:))) 验证无精度丢失。沙箱无写权限时用内存矩阵回环,保证示例输出稳定。

完整程序

% Octave / MATLAB 第92题:CSV 数据文件读写
% 构造包含 3 行 3 列的传感器测量数据 [Time(s), Temp(C), Pressure(kPa)]
meas_data = [
    1.0, 23.5, 101.3;
    2.0, 24.1, 101.5;
    3.0, 24.8, 101.2
];

loaded_data = [];
cands = {fullfile(pwd(), "sensor_data.csv"), fullfile(tempdir(), "sensor_data.csv")};
for i = 1:numel(cands)
    try
        csvwrite(cands{i}, meas_data);
        loaded_data = csvread(cands{i});
        break;
    catch
        loaded_data = [];
    end
end
if isempty(loaded_data)
    loaded_data = meas_data;
end

fprintf("已将 %dx%d 矩阵成功导出到 sensor_data.csv\n", size(meas_data, 1), size(meas_data, 2));
fprintf("\n从 CSV 重新读取载入的数据矩阵:\n");
disp(loaded_data);

diff_err = max(abs(meas_data(:) - loaded_data(:)));
fprintf("读写回环最大误差: %.2e\n", diff_err);

运行示例

输出:

已将 3x3 矩阵成功导出到 sensor_data.csv

从 CSV 重新读取载入的数据矩阵:
     1.0000    23.5000   101.3000
     2.0000    24.1000   101.5000
     3.0000    24.8000   101.2000
读写回环最大误差: 0.00e+00