MATLAB中用for循环调用fprintf输出错误值时结果异常
解决MATLAB循环计算误差值的问题
看起来你手动计算的逻辑是完全正确的,换成for循环出问题大概率是循环里的变量引用或者结果存储方式没处理对。咱们一步步来修正:
首先,先梳理你手动代码的核心逻辑:对k数组里的每个值,调用vel函数,计算相对误差百分比,最后输出每个k对应的误差结果。
常见的循环错误原因
你之前的循环可能踩了这些坑:
- 循环时直接用循环索引(比如
i=1:3)代替了k的实际值(5、10、15) - 没有用数组存储误差结果,导致每次循环覆盖了之前的误差值
- 输出时的变量名和循环里的存储逻辑不对应
正确的for循环实现
这里给你写一个和手动逻辑完全对齐的循环版本:
k = [5, 10, 15]; % 初始化数组存储误差,长度和k保持一致 errors = zeros(size(k)); t1 = ...; % 替换成你实际的t1变量值 t2 = ...; % 替换成你实际的t2变量值 func = ...; % 替换成你实际的函数句柄/变量 exact = ...; % 替换成你的精确参考值 % 遍历k的每个元素 for idx = 1:length(k) current_k = k(idx); % 完全复刻手动计算的误差公式 errors(idx) = (vel(current_k, t1, t2, func) - exact) * 100 / exact; end % 统一输出所有误差结果 for idx = 1:length(k) fprintf("Error for k = %d, error = %.4f\n", k(idx), errors(idx)); end
代码细节解释
- 初始化误差数组:用
zeros(size(k))创建和k长度相同的空数组,避免每次循环用单个变量存储导致结果被覆盖 - 正确引用k值:通过
current_k = k(idx)拿到当前循环对应的k值,确保和手动调用vel(5,...)、vel(10,...)的参数完全一致 - 统一输出格式:循环输出每个k和对应的误差,格式和你手动的
fprintf保持一致,避免变量名混乱
如果你的vel函数参数本身没问题,这个版本的结果应该和你手动计算的完全一致。你可以对比下之前的循环代码,看看是不是没正确引用k(idx),或者没存储到数组里导致结果异常。
内容的提问来源于stack exchange,提问作者nekmat97
相关产品推荐
相关产品推荐

