如何在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
相关产品推荐
相关产品推荐

