生活工具 · 健康育儿

1RM 力量计算

卧推/深蹲/硬拉最大重量推算

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 59 次使用
动作 单位
完成重量 weight
kg
力竭次数 reps
快速预设 presets · kg
填「真力竭」次数(最后一次几乎做不动),不是随便选的配重次数。
本地记录 local only
仅存于本浏览器(localStorage),不上传。按动作分别记录,可追踪长期进步。
请输入完成重量与力竭次数
就绪 · 重量与次数即时换算,强度阶梯指针平滑滑动
第一节

关于本工具

About

杠铃片加到极限,最后一组动作变形——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 算法依赖个人知识,通常只用一种
多组数推算支持输入多组重量/次数,取最优仅单次输入需逐组手算,易出错
第二节

使用指南

Getting Started

使用步骤

  1. 1在「动作类型」下拉框选择卧推、深蹲或硬拉,后续算法据此调整
  2. 2在「重量」输入框填入实际完成组使用的杠铃重量(单位:公斤)
  3. 3在「重复次数」输入框填入该组实际完成的完整次数(1–30 次)
  4. 4点击「计算 1RM」按钮,结果区立即显示推算出的最大重量及对应强度百分比
  5. 5切换不同算法(Epley / Brzycki / Lombardi),结果区自动刷新对比值

输入输出示例

输入输出说明
卧推 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 次,求 1RM

Epley、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 推算基于独立完成的向心收缩,辅助借力改变了实际负荷-次数关系,输入借力次数会高估真实力量水平。

第三节

工作原理

How It Works

核心公式

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。

输入重量 / 次数 / 动作算法选择Epley / Brzycki / 其他本地计算浏览器内纯 JS 运算输出 1RM预估最大重量动作选择卧推 / 深蹲 / 硬拉
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

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.0
function 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.1
package 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.7
fn 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), } }
第五节

常见问题

Q & A
我卧推只能做 8 次,最大重量怎么算?用哪个公式准?

本工具默认使用 Epley 公式(1RM = 重量 × (1 + 0.0333 × 次数)),这是力量训练领域引用最广的估算方法之一,对 1-10 次范围内的预测误差约 ±5%。如果你做的是 8RM(8 次力竭),直接输入重量和 8 次,工具会自动算出理论最大重量。注意:次数超过 12 次时,Epley 公式会高估实际 1RM,建议改用 Brzycki 公式(本工具可选),后者对高次数更保守。

我硬拉用这个算出来的结果,跟我实际测的差很多,为什么?

硬拉是神经募集要求最高的动作,1RM 预测公式对硬拉的准确度普遍低于卧推。原因有二:一是硬拉力竭时技术崩溃风险大,多数人实际 1RM 比公式算出的低 5-10%;二是公式假设所有次数都是严格标准动作,但硬拉后半程常借力。建议:硬拉使用工具结果时减 5% 作为安全上限,或改用 Lombardi 公式(本工具可选),它对硬拉这种大重量动作偏差略小。

这个工具算 1RM 需要我输入什么?要填身高体重吗?

不需要。本工具只需两个输入:你实际能完成的重量(公斤或磅)和力竭次数(1-30 次)。不需要身高、体重、性别或训练年限——1RM 估算公式只基于重量与次数的线性/曲线关系,不依赖个人体征。输入时注意:重量必须是你能且只能完成指定次数的重量(即做不到第 9 次),次数少填或多填会直接导致结果偏差。

我输入重量 100kg 做 5 次,结果出来 113kg,这个数字我下次训练直接冲吗?

不建议直接冲。公式算出的 1RM 是理论最大值,实际测试时受当天状态、热身充分度、保护者配合等因素影响。安全做法:用结果的 90%(约 102kg)做 3 次 x 3 组作为试探组,如果动作稳定再逐步加重。本工具结果栏也标注了「误差 ±5%」,即实际 1RM 可能在 107-119kg 之间,建议取区间下限做计划。

我深蹲用 80kg 做 10 次,但第 10 次其实还能再多蹲一个,这样算准吗?

不准。1RM 估算公式的核心前提是「力竭」——即你输入的次数必须是该重量下能完成的最大次数。如果第 10 次后还有余力,实际力竭次数是 11 或 12,此时用 10 次算会低估你的真实 1RM。建议:下次训练时先测出准确的 8-10RM(完全做不动),再输入本工具;或者用「余量修正」:感觉还能多做 1 次,就按次数+1 输入,结果更接近真实值。

这个工具能离线用吗?我健身房没信号。

可以。本工具完全在浏览器本地运行(FE 实现),所有计算逻辑写在 JavaScript 里,不依赖后端服务器。你第一次打开页面加载完成后,断网刷新依然能正常输入和计算。数据不会上传,计算结果也不会被记录——隐私和安全方面,你的训练数据始终留在自己设备上。

我练的是哑铃卧推,单边 30kg,这个工具能算吗?

可以,但注意单位。输入重量时直接填单边哑铃重量(30kg),次数填你能完成的力竭次数,工具会按你输入的值计算。不过哑铃卧推与杠铃卧推在力学上略有差异:哑铃活动范围更大、稳定性要求更高,通常同重量下哑铃的实际 1RM 比杠铃低 5-10%。如果你后续要转杠铃训练,建议将工具结果再减 5% 作为过渡重量。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

健康参考提示本工具仅供个人记录与生活参考不能代替医生诊断或专业医疗建议。如有健康疑虑或持续不适,请咨询医生或前往医院就诊。

选择 打开 +新窗口 esc关闭