备赛最后一周定重量
力量举选手小陈在赛前第6天,面对最后一次大重量训练。他需要在「保守完成3次」和「冲击极限」之间做选择。用本工具输入他上周刚完成的130kg卧推3次组,算出预估1RM为140.5kg。根据这个数字,他决定用90%即126kg做最后一组,既保证神经不疲劳,又维持了对140kg的心理自信。
杠铃片加到极限,最后一组动作变形——1RM 不是靠猜的。输入最近一次训练的重量和完成次数,工具用 Epley、Brzycki 等主流算法反推理论最大重量,并给出不同次数下的预估负荷。所有计算在浏览器内完成,数据不上传服务器。适合力量训练者做周期计划时参考,而非在保护杠缺失时直接试举。
力量举选手小陈在赛前第6天,面对最后一次大重量训练。他需要在「保守完成3次」和「冲击极限」之间做选择。用本工具输入他上周刚完成的130kg卧推3次组,算出预估1RM为140.5kg。根据这个数字,他决定用90%即126kg做最后一组,既保证神经不疲劳,又维持了对140kg的心理自信。
刚进健身房三个月的用户,深蹲能完成80kg做5次,但不知道自己的极限该用多少片。他用本工具算出预估1RM为93kg。然后他算了下:如果直接挑战90kg,需要一片20kg+一片10kg+一片5kg,而健身房只有一对15kg的铃片。他改为用85kg(5RM强度)做递增组,避免了一次因配片错误导致的动作失衡。
一位业余跑者因左膝髌腱炎停训三周,恢复后第一次做腿举。他用本工具输入伤前最后完成的120kg腿举8次,算出预估1RM为149kg。但他现在只能轻松完成100kg做8次,对应1RM仅124kg。他意识到力量下降了17%,于是主动将训练重量从原计划的80%退阶到65%,避免了再次受伤。
一位CrossFit爱好者常做的硬拉是传统硬拉,但本周训练计划要求用六角杠铃硬拉。他传统硬拉1RM为180kg,但六角杠铃能拉起更多。他用本工具输入他在六角杠铃上完成的160kg做3次,算出预估1RM为170kg。他据此将WOD中的六角杠铃重量设为140kg(约82%),而不是照搬传统硬拉的百分比,保证了训练效果。
线上教练老王收到学员发来的训练视频:学员用120kg做了3次卧推,但第4次被压,动作变形。老王用本工具输入120kg×3次,算出预估1RM为127kg。他判断学员实际极限在125-130kg之间,于是将下周计划中的5×5重量从原定的105kg下调到100kg,并嘱咐学员暂停冲击极限,优先巩固动作轨迹。
| 维度 | 本工具 | 竞品 A(StrengthLevel) | 传统方法(纸笔/计算器) |
|---|---|---|---|
| 计算速度 | 即时出结果,无等待 | 需加载页面,约 1-2 秒 | 手动计算,耗时 1-5 分钟 |
| 隐私 | 纯浏览器计算,数据不上传服务器 | 数据发送至服务器处理 | 完全离线,无数据外泄 |
| 离线可用 | 支持,首次加载后断网可用 | 需联网,无法离线 | 完全离线 |
| 收费 | 免费,无隐藏费用 | 免费,但含广告 | 零成本(纸笔) |
| 算法选择 | 提供 Epley、Brzycki、Lombardi 等 5+ 种算法 | 仅默认 Epley 算法 | 依赖个人知识,通常只用一种 |
| 多组数推算 | 支持输入多组重量/次数,取最优 | 仅单次输入 | 需逐组手算,易出错 |
| 输入 | 输出 | 说明 |
|---|---|---|
| 卧推 80kg × 8次 | 1RM ≈ 99.2kg(Epley公式) | 常规:典型中等重量训练,验证Epley公式的常见计算 |
| 深蹲 120kg × 5次 | 1RM ≈ 135.0kg(Epley公式) | 常规:5次组是力量训练常用次数,输出结果直观 |
| 硬拉 200kg × 1次 | 1RM = 200.0kg(单次即最大值) | 边界:1次重复时工具应直接返回输入重量,不进行推算 |
| 卧推 100kg × 0次 | 无效输入:次数必须≥1 | 边界:次数为0时工具应拒绝计算,避免除零错误 |
| 深蹲 50kg × 30次 | 1RM ≈ 125.0kg(Epley公式,注意高次数估算误差较大) | 边界:高次数(≥20)时Epley公式可能高估,工具应附带误差提示 |
| 硬拉 80kg × 12次 | 1RM ≈ 112.0kg(Epley公式) | 易错:用户可能误将80kg当作1RM,实际推算值更高,需注意区分 |
| 卧推 60kg × 15次 | 1RM ≈ 90.0kg(Epley公式,注意耐力型训练结果仅供参考) | 易错:15次接近耐力区间,工具应说明估算结果不如低次数可靠 |
1.用错重量单位,公斤当成磅输入
卧推 225(实际是磅,当作公斤输入)卧推 102(将磅换算为公斤后输入)1RM 公式基于公斤计算,若直接输入磅数,推算结果会虚高约 2.2 倍,导致训练计划负荷失真。
2.重复次数超过 10 次,公式误差急剧增大
深蹲 100kg 做 15 次,求 1RM深蹲 100kg 做 8 次,求 1RMEpley、Brzycki 等主流公式在 1-10 次范围内误差 ±5%,超过 10 次后拟合曲线外推,误差可达 20% 以上,建议实测或改用多次数专用公式。
3.把热身组重量当训练组重量输入
硬拉 60kg 做 5 次(实际是热身组,正式组 120kg 做 3 次)硬拉 120kg 做 3 次1RM 推算需用接近力竭的训练组数据,热身组重量远低于实际能力,推算结果会严重偏低,误导后续训练负荷设定。
4.未区分动作类型,用卧推数据算硬拉 1RM
卧推 80kg 做 8 次,直接填入硬拉 1RM 输入框卧推数据只用于推算卧推 1RM,硬拉需单独输入硬拉数据不同动作的神经募集、肌肉参与度差异大,卧推 1RM 不能代表硬拉能力,混用会导致硬拉负荷设定过高或过低。
5.把半程动作或辅助动作当作全程主项输入
深蹲 140kg 做 5 次(实际是半程深蹲,非全幅度)深蹲 120kg 做 5 次(全幅度深蹲数据)半程动作行程短、发力模式不同,可承受重量明显高于全程。用半程数据推算全程 1RM,结果偏高,增加受伤风险。
6.输入的是组数而非单组次数
卧推 80kg 做 3 组×5 次,直接输入 15卧推 80kg 做 5 次(取单组实际完成的次数)1RM 公式要求输入单组最大重复次数(AMRAP),输入累计次数会导致推算值远低于实际能力,失去参考意义。
7.使用辅助借力完成的次数
卧推 100kg 做 6 次(最后 2 次由保护者托肘完成)卧推 100kg 做 4 次(仅计入无辅助完成的次数)1RM 推算基于独立完成的向心收缩,辅助借力改变了实际负荷-次数关系,输入借力次数会高估真实力量水平。
1RM = W × (1 + 0.0333 × R)
W完成 R 次的最大重量(kg)R力竭时完成的重复次数(1–10)卧推 80 kg 完成 5 次力竭:1RM = 80 × (1 + 0.0333 × 5) = 80 × 1.1665 ≈ 93.3 kg。
5 种主流语言实现,复制即用:
import math
def calculate_1rm(weight: float, reps: int, formula: str = "epley") -> float:
"""
根据完成次数与重量推算 1RM(最大单次重量)
formula: epley / brzycki / lander / lombardi
"""
if reps == 1:
return weight
if formula == "epley":
return weight * (1 + reps / 30)
elif formula == "brzycki":
return weight * (36 / (37 - reps))
elif formula == "lander":
return weight * (100 / (101.3 - 2.67123 * reps))
elif formula == "lombardi":
return weight * (reps ** 0.10)
else:
raise ValueError(f"未知公式: {formula}")
# 示例:卧推 80kg 完成 5 次
print(f"Epley: {calculate_1rm(80, 5, 'epley'):.1f} kg") # 93.3
print(f"Brzycki: {calculate_1rm(80, 5, 'brzycki'):.1f} kg") # 90.0function calculate1RM(weight, reps, formula = 'epley') {
if (reps === 1) return weight;
switch (formula) {
case 'epley':
return weight * (1 + reps / 30);
case 'brzycki':
return weight * (36 / (37 - reps));
case 'lander':
return weight * (100 / (101.3 - 2.67123 * reps));
case 'lombardi':
return weight * Math.pow(reps, 0.10);
default:
throw new Error(`未知公式: ${formula}`);
}
}
// 示例:深蹲 120kg 完成 3 次
console.log(`Epley: ${calculate1RM(120, 3, 'epley').toFixed(1)} kg`); // 132.0
console.log(`Brzycki: ${calculate1RM(120, 3, 'brzycki').toFixed(1)} kg`); // 127.1package main
import (
"fmt"
"math"
)
func calculate1RM(weight float64, reps int, formula string) (float64, error) {
if reps == 1 {
return weight, nil
}
switch formula {
case "epley":
return weight * (1 + float64(reps)/30), nil
case "brzycki":
return weight * 36 / float64(37-reps), nil
case "lander":
return weight * 100 / (101.3 - 2.67123*float64(reps)), nil
case "lombardi":
return weight * math.Pow(float64(reps), 0.10), nil
default:
return 0, fmt.Errorf("未知公式: %s", formula)
}
}
func main() {
// 示例:硬拉 140kg 完成 6 次
result, _ := calculate1RM(140, 6, "epley")
fmt.Printf("Epley: %.1f kg\n", result) // 168.0
result, _ = calculate1RM(140, 6, "brzycki")
fmt.Printf("Brzycki: %.1f kg\n", result) // 162.6
}type Formula = 'epley' | 'brzycki' | 'lander' | 'lombardi';
function calculate1RM(weight: number, reps: number, formula: Formula = 'epley'): number {
if (reps === 1) return weight;
switch (formula) {
case 'epley':
return weight * (1 + reps / 30);
case 'brzycki':
return weight * (36 / (37 - reps));
case 'lander':
return weight * (100 / (101.3 - 2.67123 * reps));
case 'lombardi':
return weight * Math.pow(reps, 0.10);
}
}
// 示例:卧推 90kg 完成 8 次
console.log(`Epley: ${calculate1RM(90, 8, 'epley').toFixed(1)} kg`); // 114.0
console.log(`Brzycki: ${calculate1RM(90, 8, 'brzycki').toFixed(1)} kg`); // 111.7fn calculate_1rm(weight: f64, reps: u32, formula: &str) -> Result<f64, String> {
if reps == 1 {
return Ok(weight);
}
match formula {
"epley" => Ok(weight * (1.0 + reps as f64 / 30.0)),
"brzycki" => Ok(weight * 36.0 / (37.0 - reps as f64)),
"lander" => Ok(weight * 100.0 / (101.3 - 2.67123 * reps as f64)),
"lombardi" => Ok(weight * (reps as f64).powf(0.10)),
_ => Err(format!("未知公式: {}", formula)),
}
}
fn main() {
// 示例:深蹲 100kg 完成 10 次
match calculate_1rm(100.0, 10, "epley") {
Ok(v) => println!("Epley: {:.1} kg", v), // 133.3
Err(e) => eprintln!("{}", e),
}
match calculate_1rm(100.0, 10, "brzycki") {
Ok(v) => println!("Brzycki: {:.1} kg", v), // 137.0
Err(e) => eprintln!("{}", e),
}
}本工具默认使用 Epley 公式(1RM = 重量 × (1 + 0.0333 × 次数)),这是力量训练领域引用最广的估算方法之一,对 1-10 次范围内的预测误差约 ±5%。如果你做的是 8RM(8 次力竭),直接输入重量和 8 次,工具会自动算出理论最大重量。注意:次数超过 12 次时,Epley 公式会高估实际 1RM,建议改用 Brzycki 公式(本工具可选),后者对高次数更保守。
硬拉是神经募集要求最高的动作,1RM 预测公式对硬拉的准确度普遍低于卧推。原因有二:一是硬拉力竭时技术崩溃风险大,多数人实际 1RM 比公式算出的低 5-10%;二是公式假设所有次数都是严格标准动作,但硬拉后半程常借力。建议:硬拉使用工具结果时减 5% 作为安全上限,或改用 Lombardi 公式(本工具可选),它对硬拉这种大重量动作偏差略小。
不需要。本工具只需两个输入:你实际能完成的重量(公斤或磅)和力竭次数(1-30 次)。不需要身高、体重、性别或训练年限——1RM 估算公式只基于重量与次数的线性/曲线关系,不依赖个人体征。输入时注意:重量必须是你能且只能完成指定次数的重量(即做不到第 9 次),次数少填或多填会直接导致结果偏差。
不建议直接冲。公式算出的 1RM 是理论最大值,实际测试时受当天状态、热身充分度、保护者配合等因素影响。安全做法:用结果的 90%(约 102kg)做 3 次 x 3 组作为试探组,如果动作稳定再逐步加重。本工具结果栏也标注了「误差 ±5%」,即实际 1RM 可能在 107-119kg 之间,建议取区间下限做计划。
不准。1RM 估算公式的核心前提是「力竭」——即你输入的次数必须是该重量下能完成的最大次数。如果第 10 次后还有余力,实际力竭次数是 11 或 12,此时用 10 次算会低估你的真实 1RM。建议:下次训练时先测出准确的 8-10RM(完全做不动),再输入本工具;或者用「余量修正」:感觉还能多做 1 次,就按次数+1 输入,结果更接近真实值。
可以。本工具完全在浏览器本地运行(FE 实现),所有计算逻辑写在 JavaScript 里,不依赖后端服务器。你第一次打开页面加载完成后,断网刷新依然能正常输入和计算。数据不会上传,计算结果也不会被记录——隐私和安全方面,你的训练数据始终留在自己设备上。
可以,但注意单位。输入重量时直接填单边哑铃重量(30kg),次数填你能完成的力竭次数,工具会按你输入的值计算。不过哑铃卧推与杠铃卧推在力学上略有差异:哑铃活动范围更大、稳定性要求更高,通常同重量下哑铃的实际 1RM 比杠铃低 5-10%。如果你后续要转杠铃训练,建议将工具结果再减 5% 作为过渡重量。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。
健康参考提示本工具仅供个人记录与生活参考,不能代替医生诊断或专业医疗建议。如有健康疑虑或持续不适,请咨询医生或前往医院就诊。