计算工具 · 数学计算

一元二次方程

ax²+bx+c=0/判别式/求根

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 62 次使用
ax² + bx + c = 0(a = 0 时退化为一次方程,照样解)
方程性质韦达 · 顶点 · 因式分解 · 抛物线特征
分步求解求根公式法
抛物线可视化y = ax² + bx + c
自适应坐标系 · 描边生长动画 · 悬停查看坐标 实根(x 轴交点) 顶点 / 对称轴 y 截距
经典案例一键载入 12 道典型方程
概念速查判别式 · 求根公式 · 韦达定理 · 配方法

求根公式(韦达-巴比伦公式):x = (−b ± √Δ) / (2a),其中判别式 Δ = b² − 4ac

判别式三态

  • Δ > 0:两个不同实根,抛物线与 x 轴交于两点。
  • Δ = 0:两个相等实根(重根),抛物线与 x 轴相切于顶点。
  • Δ < 0:两个共轭复根(无实根),抛物线不与 x 轴相交;复根形式 x = α ± βi

韦达定理:若 x₁、x₂ 为 ax²+bx+c=0 的两根,则 x₁ + x₂ = −b/ax₁ · x₂ = c/a,可用于验算与构造方程。

顶点形式:y = a(x − h)² + k,h = −b/(2a)k = c − b²/(4a) = −Δ/(4a)。a>0 顶点为最低点、a<0 为最高点;对称轴 x = h。

配方法:两侧除以 a 后把 x 项凑成完全平方,得 (x + b/2a)² = (b²−4ac)/(4a²),即求根公式的来源,直观解释 Δ 为何决定根的性质。

就绪 · 输入系数实时求解,浮点比较走 epsilon 容差
第一节

关于本工具

About

面对 ax²+bx+c=0,手算判别式再代入求根公式,符号一错全盘皆输。这个工具只做一件事:输入 a、b、c 三个系数,立即给出判别式值及两个实数根(或复数根提示)。纯浏览器计算,系数和结果均不上传服务器。适合作业验算、工程快速校核、或考试后核对答案——不教数学,只做计算器该做的事。

使用场景

物理题答案核对

高二学生小陈做自由落体运动习题,列式 4.9t² - 3t - 2 = 0,算出 t = 0.8s 但总感觉不对。代入工具输入 a=4.9, b=-3, c=-2,判别式 Δ=48.2,两根分别为 1.03s 和 -0.39s。他立刻发现负根舍去后正确答案是 1.03s,自己计算时把 b 符号抄反了。工具 3 秒出结果,比翻书后答案快 10 倍,且能看清每一步的判别式和根值,适合课后自检。

预算盈亏平衡计算

小超市老板老周想进一批饮料,每瓶进价 3 元、售价 5 元,但需付 200 元摊位费。他列方程 5x - 3x - 200 = 0 → 2x - 200 = 0,这是线性方程,但他在本子上误写成了 2x² - 200 = 0。用工具输入 a=2, b=0, c=-200,Δ=1600,根为 ±10。老周立刻意识到方程列错了——二次项不该出现,于是改回线性重新算,避免了进货 10 瓶就以为能回本的错误。

抛物线拱桥施工放样

施工员老赵在修一座拱桥,拱圈设计方程为 y = -0.1x² + 2x(单位米),需在 x=5m 处确认拱高。他代入 x=5 得 y=7.5m,但监理要求验证拱顶位置。老赵将方程化为 -0.1x² + 2x - y = 0,用工具对 y=7.5 求根:a=-0.1, b=2, c=-7.5,Δ=1,两根均为 10m。他立刻确认拱顶在 x=10m、y=10m 处,与设计图一致,避免了凭经验估算导致的 2cm 偏差。

投资回报期验算

投资人王姐看中一个项目,前期投入 50 万,预计每月净收益 3 万,但第 4 个月需追加 10 万维护费。她列方程 3x - 10 - 50 = 0 → 3x = 60 → x = 20 个月回本,但财务总监指出收益是复利增长的,实际模型是 3x² - 10x - 50 = 0。王姐用工具输入 a=3, b=-10, c=-50,Δ=700,正根约 6.1 个月。她发现回本时间比线性估算少了 14 个月,当即调整了投资决策。

抛射角度优化

无人机飞手小刘给农田喷洒农药,飞行高度 10 米,喷头出药初速度 5m/s,需计算落地水平距离。他套用斜抛公式 5t² - 10 = 0 → t² = 2 → t ≈ 1.414s,水平距离 = 5×1.414 ≈ 7.07m。但实际有 3m/s 逆风,方程修正为 5t² - 3t - 10 = 0。用工具输入 a=5, b=-3, c=-10,Δ=209,正根 t≈1.67s,水平距离 8.35m。他据此调整航线间距,避免了药液重叠或漏喷。

对比矩阵

维度本工具数学软件 (如 GeoGebra)手工计算
输入方式直接输入 a/b/c 数值需输入完整方程或拖拽图形纸笔抄写方程再提取系数
速度即时出结果需点击/回车后显示分钟级(含验算)
中间过程显示判别式值、根公式代入过程默认只显示最终根需自行逐步推导
复数根判别式<0 时自动输出复数解部分版本需切换复数模式需手动引入虚数单位 i
离线可用纯浏览器,无需网络需安装客户端或在线加载完全离线
隐私数据不出浏览器在线版会上传方程无数据外泄风险
费用免费,无限制基础免费,部分功能需付费仅需纸笔
第二节

使用指南

Getting Started

使用步骤

  1. 1在系数输入框依次填写 a、b、c 的值(支持负数和小数),填写后结果区自动清空旧数据
  2. 2点击「计算」按钮,页面立即显示判别式 Δ 的值(Δ = b² - 4ac)
  3. 3根据 Δ 结果,下方自动输出根的类型(两个实根 / 一个重根 / 无实根)及对应的 x₁、x₂ 数值
  4. 4若需保留结果,点击「复制结果」按钮,将当前根值复制到剪贴板

输入输出示例

输入输出说明
a=1, b=-3, c=2Δ=1, x₁=2, x₂=1常规:判别式为正且为完全平方数,两根为有理数,验证基本求根逻辑
a=1, b=2, c=1Δ=0, x₁=x₂=-1边界:判别式为零,两根相等(重根),验证工具是否正确处理重复根
a=1, b=1, c=1Δ=-3, 无实数根(复数根:-0.5±0.866i)边界:判别式为负,验证工具是否返回复数根或明确提示无实数解
a=0, b=2, c=-4错误:a不能为0(不是一元二次方程)易错:用户常误输入a=0,工具应明确拒绝并提示退化为一元一次方程
a=1, b=0, c=-4Δ=16, x₁=2, x₂=-2常规:b=0的纯二次方程,验证工具处理缺项时的正确性
a=0.5, b=-1.2, c=0.72Δ=0, x₁=x₂=1.2边界:小数系数且判别式为零,验证浮点数精度处理是否导致误判
a=1, b=0, c=0Δ=0, x₁=x₂=0易错:所有系数均为零的特殊情况,验证工具是否按规则返回唯一解0

常见错误对照

1.二次项系数 a 为 0,方程退化一次

✗ 错误a=0, b=2, c=1
✓ 修复a=1, b=2, c=1

一元二次方程定义要求 a ≠ 0。a=0 时方程变为 bx+c=0,判别式与求根公式均失效,工具应返回错误或提示。

2.系数带单位或百分号,数值类型错误

✗ 错误a=2m, b=5, c=3%
✓ 修复a=2, b=5, c=0.03

工具只接受纯数字(整数或浮点数)。带单位或百分号的字符串无法解析为数值,会导致计算失败或 NaN。

3.判别式 Δ < 0 时仍期望实数根

✗ 错误输入 a=2, b=1, c=2,认为有实数解
✓ 修复Δ = 1² - 4×2×2 = -15 < 0,工具应输出『无实数根,有共轭复数根』

判别式 Δ = b² - 4ac 决定根的性质:Δ<0 时实数范围内无解,只有复数解。用户若未理解复数概念会误以为工具出错。

4.系数符号写反,导致方程方向错误

✗ 错误a=1, b=-5, c=6(实际想解 x² - 5x + 6 = 0)
✓ 修复a=1, b=-5, c=6 是正确的

工具严格按 ax² + bx + c = 0 格式解析。若用户将方程写成 x² + 5x - 6 = 0 却输入 a=1, b=5, c=-6,结果正确;但若习惯性把减号当作负号输入,需确认符号。

5.系数为分数时未转为小数,格式不被接受

✗ 错误a=1/2, b=3, c=2
✓ 修复a=0.5, b=3, c=2

工具输入字段为数字类型,不支持分数表达式。1/2 会被当作字符串或除法运算,导致解析异常。应手动换算为小数。

6.根为无理数时,误以为结果必须精确分数

✗ 错误输入 a=1, b=1, c=-1,期望输出 ( -1 ± √5 ) / 2 的精确形式
✓ 修复工具输出浮点近似值:0.618... 和 -1.618...

本工具为数值计算工具,输出浮点数近似值而非根式表达式。若需精确根式形式,应使用符号计算工具。

7.将方程移项后未归零,导致系数错误

✗ 错误方程 x² + 2x = 8,直接输入 a=1, b=2, c=8
✓ 修复移项得 x² + 2x - 8 = 0,输入 a=1, b=2, c=-8

工具要求方程右侧为 0。若未移项,c 值会差一个常数项,导致判别式和根完全错误。

8.系数过大或过小,浮点精度损失

✗ 错误a=1e-20, b=2, c=1e20
✓ 修复a=1, b=2, c=1(先缩放方程)

极悬殊的系数(如 1e20 和 1e-20)在浮点运算中会因精度截断导致结果失真。建议先整体缩放方程使系数量级接近。

第三节

工作原理

How It Works

核心公式

x = [-b ± √(b² - 4ac)] / (2a)

变量说明

  • a二次项系数,a ≠ 0
  • b一次项系数
  • c常数项
  • Δ判别式 Δ = b² - 4ac

示例

方程 2x² - 4x - 6 = 0,a=2, b=-4, c=-6。Δ = (-4)² - 4×2×(-6) = 16 + 48 = 64。x = [4 ± √64] / (2×2) = [4 ± 8] / 4。x₁ = (4+8)/4 = 3,x₂ = (4-8)/4 = -1。

输入系数a, b, c计算判别式Δ = b² − 4ac判断 Δ 符号正 / 零 / 负根据 Δ 分支求根x = [−b ± √Δ] / 2a输出根(实 / 复)
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

5 种主流语言实现,复制即用:

import math def solve_quadratic(a, b, c): """返回一元二次方程 ax²+bx+c=0 的根(实数或复数)""" d = b*b - 4*a*c if d >= 0: sqrt_d = math.sqrt(d) x1 = (-b + sqrt_d) / (2*a) x2 = (-b - sqrt_d) / (2*a) return (x1, x2) else: sqrt_d = math.sqrt(-d) real = -b / (2*a) imag = sqrt_d / (2*a) return (complex(real, imag), complex(real, -imag)) # 示例:x² - 5x + 6 = 0 → 根为 2.0 和 3.0 print(solve_quadratic(1, -5, 6)) # 示例:x² + x + 1 = 0 → 复数根 print(solve_quadratic(1, 1, 1))
function solveQuadratic(a, b, c) { const d = b * b - 4 * a * c; if (d >= 0) { const sqrtD = Math.sqrt(d); const x1 = (-b + sqrtD) / (2 * a); const x2 = (-b - sqrtD) / (2 * a); return [x1, x2]; } else { const sqrtD = Math.sqrt(-d); const real = -b / (2 * a); const imag = sqrtD / (2 * a); return [`${real}+${imag}i`, `${real}-${imag}i`]; } } // 示例:x² - 5x + 6 = 0 → [2, 3] console.log(solveQuadratic(1, -5, 6)); // 示例:x² + x + 1 = 0 → 复数根 console.log(solveQuadratic(1, 1, 1));
package main import ( "fmt" "math" ) func solveQuadratic(a, b, c float64) (complex128, complex128) { d := b*b - 4*a*c if d >= 0 { sqrtD := math.Sqrt(d) x1 := complex((-b+sqrtD)/(2*a), 0) x2 := complex((-b-sqrtD)/(2*a), 0) return x1, x2 } else { sqrtD := math.Sqrt(-d) real := -b / (2 * a) imag := sqrtD / (2 * a) return complex(real, imag), complex(real, -imag) } } func main() { // 示例:x² - 5x + 6 = 0 → (3+0i) (2+0i) fmt.Println(solveQuadratic(1, -5, 6)) // 示例:x² + x + 1 = 0 → 复数根 fmt.Println(solveQuadratic(1, 1, 1)) }
use std::f64; fn solve_quadratic(a: f64, b: f64, c: f64) -> (f64, f64) { let d = b * b - 4.0 * a * c; let sqrt_d = d.sqrt(); let x1 = (-b + sqrt_d) / (2.0 * a); let x2 = (-b - sqrt_d) / (2.0 * a); (x1, x2) } fn main() { // 示例:x² - 5x + 6 = 0 → (3, 2) let (x1, x2) = solve_quadratic(1.0, -5.0, 6.0); println!("根: {} 和 {}", x1, x2); // 注意:Rust 标准库不直接支持复数,此函数仅处理实数根 // 判别式 < 0 时返回 NaN }
<?php function solveQuadratic($a, $b, $c) { $d = $b * $b - 4 * $a * $c; if ($d >= 0) { $sqrtD = sqrt($d); $x1 = (-$b + $sqrtD) / (2 * $a); $x2 = (-$b - $sqrtD) / (2 * $a); return [$x1, $x2]; } else { $sqrtD = sqrt(-$d); $real = -$b / (2 * $a); $imag = $sqrtD / (2 * $a); return ["{$real}+{$imag}i", "{$real}-{$imag}i"]; } } // 示例:x² - 5x + 6 = 0 → [3, 2] print_r(solveQuadratic(1, -5, 6)); // 示例:x² + x + 1 = 0 → 复数根 print_r(solveQuadratic(1, 1, 1)); ?>
第五节

常见问题

Q & A
我输入了 a=0 为什么没结果?

a=0 时方程退化为 bx+c=0,是一元一次方程,不是二次方程。本工具只处理二次项系数 a≠0 的情况。如果你需要解 bx+c=0,可以直接心算 x=-c/b,或用专门的一元一次方程工具。输入前请确认 a 不是 0,否则结果区会提示无效输入。

判别式小于 0 的时候显示什么?

判别式 Δ=b²-4ac 小于 0 时,方程在实数范围内无解(无实根),本工具会明确显示“无实数根”并给出 Δ 的数值。如果你需要复数根的结果,本工具暂不支持,可以换用支持复数运算的数学软件。实数域内就到这里。

为什么我算出来的根和书上的答案不一样?

最常见的原因是符号抄错:检查 a、b、c 是否按 ax²+bx+c=0 的标准形式输入。例如 2x²-4x+2=0,a=2、b=-4、c=2。如果 b 漏了负号,结果会完全不同。另一个原因是约分习惯不同:本工具保留精确分数或根式(如 √2),如果书上约成小数,看起来会不一样。建议对照判别式值确认。

这个工具能解分数系数或带根号的方程吗?

可以。输入框接受小数、分数(如 1/3)和根号(如 sqrt(2))形式的系数。例如 0.5x² + (1/3)x - √2 = 0,直接输入 a=0.5、b=1/3、c=-sqrt(2) 即可。工具内部会转换为浮点数计算,结果以小数显示,精度约 15 位有效数字,足够日常使用。

结果里的根号能显示成最简形式吗?

本工具目前只输出小数近似值(如 1.4142),不输出 √2 这样的精确根式。如果你需要精确的根式结果,可以手动化简判别式的平方根部分:Δ 的值会单独显示,你可以用 sqrt(Δ) 的形式代入求根公式。后续版本可能加入根式化简功能。

我输入很大的数会不会算不出来?

本工具在浏览器本地计算,没有服务器限制。但 JavaScript 处理超大整数(>2⁵³)时可能丢失精度。例如 a=10¹⁶ 时,判别式 b²-4ac 的中间结果可能超出安全整数范围,导致结果不准确。建议系数绝对值控制在 10¹² 以内。如果必须处理超大数,可考虑用支持高精度的数学软件。

输入小数的位数有限制吗?

没有人工限制,但浏览器浮点数精度约 15 位十进制有效数字。例如输入 a=0.3333333333333333(16 个 3),工具实际存储为 0.3333333333333333,但内部计算时最后一位可能被截断或舍入。对于大多数中学数学题(系数通常 2-3 位小数),完全够用。

这个工具和手机计算器解方程有什么区别?

手机自带计算器通常没有一元二次方程专用功能,需要手动套求根公式分步计算,容易按错符号或漏掉负号。本工具只需输入三个系数,一键出两根 + 判别式,省去中间步骤。另外本工具在浏览器运行,不联网也能用(首次加载后),手机浏览器直接打开就行,不用装 App。

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

选择 打开 +新窗口 esc关闭