代数表达式是用运算符号把数与字母连起来的式子,如 3x + 2 或 x 平方减 5x 加 6。本节处理表达式的三套核心变形:合并与展开、乘法公式、因式分解。它是第二章"未知数 x 的一生"的起点——x 刚出生,还不知道自己是几,但我们已经能对它做加工。后续解方程、研究函数全部依赖这里的变形语法。
表达式像一台没有装输入的机器:x 平方减 5x 加 6 这台机器,喂进 0 吐出 6,喂进 2 吐出 0,喂进 3 也吐出 0。喂出 0 的那两个输入格外重要——它们就是下一节方程的根。变形的意义在于:同一台机器有很多种写法,有的写法便于求值,有的便于看出零点,有的便于配平。会变形 = 会挑写法。
先做最基础的:合并 3x + 2x - 7 + x 平方 - 4x + 5。按次数分组:x 平方项一个;x 项 3+2-4 = 1 个;常数 -7+5 = -2。结果:x 平方 + x - 2。规则只有一句话:同类项(字母与次数都相同)才能合并。
展开 (a+b) 平方,用分配律老老实实乘:a 平方 + ab + ab + b 平方 = a 平方 + 2ab + b 平方。同理 (a-b) 平方 = a 平方 - 2ab + b 平方。第三个:(a+b)(a-b) = a 平方 - ab + ab - b 平方 = a 平方 - b 平方。这三个公式是"压缩包"——展开很长的计算被压成一行,背下来到处提速。
实战:展开 (2x + 3) 平方。套第一个公式,a 换成 2x、b 换成 3:4 倍 x 平方 + 12x + 9。再展开 (x - 5)(x + 5):直接得 x 平方 - 25。
>>> from sympy import symbols, expand >>> x = symbols('x') >>> expand((2*x + 3)**2) 4*x**2 + 12*x + 9 >>> expand((x - 5)*(x + 5)) x**2 - 25 >>> expand((x + 2)*(x - 3)*(x + 1)) # 三项连乘也照吃不误 x**3 - 7*x - 6
第三个例子手算要乘两次:先 (x+2)(x-3) = x 平方 - 3x + 2x - 6 = x 平方 - x - 6,再乘 (x+1):x 三次方 + x 平方 - x 平方 - x - 6x - 6 = x 三次方 - 7x - 6,与 SymPy 一致。三次展开最容易错的就是中间项的符号——逐项乘、随手合并,比"跳步"可靠得多。
展开是打包后拆开,因式分解是拆开后打包。为什么费劲分解?因为乘积为零的条件极其简单:只要有一个因数为零。这是下一节解方程的钥匙。
分解 x 平方 - 5x + 6:找两个数,积为 6、和为 -5,取 -2 与 -3,得 (x - 2)(x - 3)。验证:交叉相乘再相加,-3x - 2x = -5x ✓。
分解 x 平方 - 9:直接套平方差,(x+3)(x-3)。分解 4 倍 x 平方 - 20x + 25:这是 (2x - 5) 的平方——先看完全平方再看其他。
提公因式是第一优先级:分解 6 倍 x 三次方 y - 15 倍 x 平方 y 平方,公因式 3 倍 x 平方 y,提出后得 3 倍 x 平方 y (2x - 5y)。
>>> from sympy import symbols, factor >>> x = symbols('x') >>> factor(x**2 - 5*x + 6) (x - 3)*(x - 2) >>> factor(x**3 - 7*x - 6) # 三次也能分:先猜有理根 (x - 3)*(x + 1)*(x + 2) >>> factor(x**4 - 16) # 平方差叠平方差 (x - 2)*(x + 2)*(x**2 + 4)
第三个例子回到上面那个三次式:x 三次方 - 7x - 6 分解出 (x-3)(x+1)(x+2),根是 3、-1、-2,x 项系数确为 -7。第四个例子展示了"叠套":x 四次方 - 16 先看成 (x 平方 - 4)(x 平方 + 4),前一个再分解。
公式变形(如从 v = u + at 解出 t)只允许对等式两边做同一件事,且保持含义:两边同加、同减、同乘、同除(除数非零)。从 v = u + at 出发:两边减 u 得 v - u = at,两边除 a 得 t = (v - u)/a。物理公式的"翻来覆去"全是这一套。
⚠️ 常见坑:约分只对乘积结构合法。x 平方比 x 在 x 非零时约成 x 没问题;但 (x 平方 - 4) 比 (x - 2) 直接"约去 x - 2"会丢掉 x = 2 这个点的讨论——正确做法是先分解成 (x-2)(x+2) 再约,并注明 x 不等于 2。
把 x 平方 - 6x + 2 改写成"平方加减常数"的形状:x 平方 - 6x 凑出 (x - 3) 平方 = x 平方 - 6x + 9,比原式多 7,所以原式 = (x - 3) 平方 - 7。这个变形叫配方法,它把一般二次式变成标准姿态,下一节推导求根公式全靠它,第六章判断抛物线顶点位置也靠它。心法一句:二次项系数化为 1 后,取一次项系数的一半配平方,多退少补。
>>> from sympy import symbols, expand >>> x = symbols('x') >>> expand((x - 3)**2 - 7) x**2 - 6*x + 2
展开回去恰好还原原式,配方正确。
问:因式分解分到什么程度算完?
答:分到每个因式在规定数域内不能再分。x 四次方 - 16 要分到 (x-2)(x+2)(x 平方+4) 三段,停在 (x 平方-4)(x 平方+4) 不算完。
对 x 平方 + px + q 型,找两个数使"和为 p、积为 q",直接拆成 (x + m)(x + n)。例:x 平方 + 7x + 12,找和 7 积 12 的两个数——3 与 4,得 (x + 3)(x + 4)。系数不全为 1 时(如 2 倍 x 平方 + 7x + 3),十字交叉试:2 拆 1×2、3 拆 1×3,交叉相乘再相加凑 7(1×3 + 2×3 不对;1×3 与 2×1:交叉和 = 1 + 6 = 7 ✓),得 (2x + 1)(x + 3)。十字法快但依赖试凑,分解不出来的二次式别硬凑——下一节求根公式兜底。
表达式会变形了,下一节给 x 一个等式,把它真正"解"出来。