You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MATLAB中合理输出所需结果(含Excel读取与均值计算)

你的MATLAB代码修正与完整实现

首先,你的现有代码存在变量未定义、逻辑判断错误、核心统计步骤缺失等问题,以下是严格遵循课堂要求(自定义均值、for循环、仅用基础语法)的完整修正方案:

完整代码实现

% 1. 读取Excel数据(替换为你的实际文件名与工作表)
[machines, ~, ~] = xlsread('machine_data.xlsx');

% 2. 获取数据行列数(rows=天数,cols=机器数量)
[rows, cols] = size(machines);

% 3. 打开输出文件,准备写入结果
output = fopen('daily_machine_stats.txt', 'w');

% 4. 遍历每一行(每一天)
for r = 1:rows
    % 初始化统计变量:有效数据总和、有效计数、故障机器数
    total = 0;
    valid_count = 0;
    fault_count = 0;
    
    % 遍历当前行的每一列(每个机器)
    for c = 1:cols
        if isnan(machines(r, c))
            % 当前机器当天故障,故障数加1
            fault_count = fault_count + 1;
        else
            % 当前机器数据有效,累加总和并增加计数
            total = total + machines(r, c);
            valid_count = valid_count + 1;
        end
    end
    
    % 计算故障占比(百分比)
    blankDays = (fault_count / cols) * 100;
    
    % 计算自定义均值(避免除以0的边界情况)
    if valid_count > 0
        myAverage = total / valid_count;
    else
        myAverage = NaN; % 当天所有机器故障,无有效均值
    end
    
    % 写入结果到文件
    fprintf(output, '=== Day %d Statistics ===\n', r);
    fprintf(output, 'Machine fault rate: %.1f%%\n', blankDays);
    if ~isnan(myAverage)
        fprintf(output, 'Average of working machines: %.4f\n\n', myAverage);
    else
        fprintf(output, 'All machines were out of service today\n\n');
    end
end

% 5. 关闭输出文件
fclose(output);

关键修正点说明

  • 变量补全:补充了rows/cols的获取逻辑,以及统计所需的total/valid_count/fault_count变量,解决原代码未定义变量的问题
  • 逻辑修复:原代码中isnan >= blankDays的错误判断被替换为:先统计每行故障机器数,再计算占比的合理逻辑
  • 自定义均值:通过手动累加有效数据总和与计数计算均值,完全避开内置mean函数
  • 边界处理:加入valid_count > 0的判断,避免当天所有机器故障时出现除以0的错误
  • 格式修正:修复了fprintf的无效格式符(原代码%f.1f错误,改为%.1f),同时优化了输出可读性

内容的提问来源于stack exchange,提问作者NegativeZero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:30:44