R语言Sd函数迭代输出枚举与最优解迭代步数统计方法咨询
R自定义梯度下降函数添加迭代计数的实现方案
你只需要在原有代码的基础上新增迭代计数变量,同步调整打印逻辑即可,修改后的完整代码如下:
Sd=function(b0,epsilon=1e-5){ # 初始化迭代计数器 iter_count <- 0 while (norm(gradient(b0))>epsilon) { iter_count <- iter_count + 1 num1=(t(b0)%*%Q%*%gradient(b0)-t(y)%*%X%*%gradient(b0))/(t(gradient(b0))%*%Q%*%gradient(b0)) num2=norm(num1) step=num2*gradient(b0) b0=b0-step # 按序号打印每轮迭代结果 cat(paste0("第", iter_count, "次迭代参数:\n")) print(t(b0)) } # 输出总迭代步数 cat(paste0("收敛完成,总迭代步数:", iter_count, "\n")) # 可选:返回最终参数和总迭代数供后续计算使用 return(list(final_param = b0, total_iter = iter_count)) }
本次修改的核心内容:
- 新增迭代计数器:在while循环外初始化为0,每进入一次循环就自增1,保证每轮迭代对应唯一的序列编号
- 调整打印逻辑:在打印参数向量前先输出当前迭代的序号,你可以根据需求调整输出的文本格式
- 补充结果输出:收敛后直接打印总迭代步数,同时支持返回结构化结果,不需要返回值可以直接删除
return语句
如果不需要每轮都打印完整的参数向量,只需要统计总步数,把循环内的cat和print语句注释掉即可,最终的总步数统计不受影响。
内容的提问来源于stack exchange,提问作者Stiven G
相关产品推荐
相关产品推荐

