用计算机程序解小学数学方程

最近发现孩子的数学题,我已经无法用他们的解法来做了,比如:

明明用一根绳子来测量一口井的深度。把绳子折成一样长的 3 段,将一端放入井底,井口外绳子余下 3 米;把这根绳子折成 5 段后,将一端放入井底,这时绳子离井口还有 1 米。求这口井的深度和绳子的长度。

看一下题目,我们可以知道井深是固定的,绳长也是固定的。我们假设绳长是 , 根据井深固定列出以下算式:

方程变换一下:

两边乘以最小公倍数

得出绳长 30 米,代入方程算出井深 米。

如何使用程序来解呢?大致思路又是暴力法,比如提供 2 个函数,然后疯狂的输入,直到两个函数返回相等

function f1(x) {
  return x / 3 - 3;
}

function f2(x) {
  return x / 5 + 1;
}

let i = 0;
let a = f1(i);
let b = f2(i);

while (true) {
  if (a === b) {
    break;
  }
  i++;
  a = f1(i);
  b = f2(i);
}

console.log(i); // 输出 30

然后在网上搜索了一下,发现有一个专门做方程的库 algebra,使用起来就和写数学公式一样:

const y1 = algebra.parse("x / 3 - 3");
const y2 = algebra.parse("x / 5 + 1");

const eq = new algebra.Equation(y1, y2);

const answer = eq.solveFor("x");

console.log(answer.toString()); // 输出 30

除此之外还可以结合 katex 直接渲染在页面上。

实际运行效果,可查看 algebra Demo