编程解二元一次方程组

122 阅读2分钟

引子

上初中的时候,解二元一次方程组是常做的题型,经常练习解方程。但是自从工作当了程序员之后,使用编程基本上就是在做web之类的需求。昨天下午看到老家的侄子的暑假作业里面有方程组,尝试了下编程来解方程组,哈哈。

首先给出一个方程组例子

2x + 5y = 26
3x + 7y = 37

初中解方程有两种算法,一种是代入消元法,一种是加减消元法。我们采用加减消元法来解方程。

定义数据结构

首先,我们定义下方程的数据结构,比如上面的两个方程定义如下:

// 第一个方程
const a ={
    x: 2,
    y: 5,
    result: 26
}

// 第二个方程
const b ={
    x: 3,
    y: 7,
    result: 37
}

方程消元

2x + 5y = 26 ① 
3x + 7y = 37 ② 

① * 3 得到新的方程
6x + 15y = 78 ③

② * 2 得到新的方程
6x + 14y = 74 ④

③ - ④ 得
1y = 4 ⑤

⑤ 除以系数得到 y值
y = 4 / 1 = 4

对应的代码

function compute(a, b) {
    // a * b.x
    let ax = {
        x: a.x * b.x,
        y: a.y * b.x,
        result: a.result * b.x
    }

    // b * a.x
    let bx = {
        x: b.x * a.x,
        y: b.y * a.x,
        result: b.result * a.x
    }

    // 相减,消元
    let sub1 = {
        x: 0,
        y: a.y * b.x - b.y * a.x,
        result: a.result * b.x - b.result * a.x
    }

    // 除法,得到y的值
    let y = sub1.result / 1.0 / sub1.y;
    console.log("y = ", y);
}

将一个已知数代入方程,求得另一个未知数

2x + 5 * 4 = 26x = (26 - 5* 4)/2

对应的代码

// 代入得到x的值
let x = (a.result - a.y * y) / 1.0 / a.x;
console.log("x = ", x);

至此,整个解方程的过程就结束了。

完整的代码如下

main();

function main(){
    // 第一个方程
    const a ={
        x: 2,
        y: 5,
        result: 26
    }

    // 第二个方程
    const b ={
        x: 3,
        y: 7,
        result: 37
    }

    // 计算两个方程组
    const result = compute(a, b);
}



function compute(a, b) {
    // a * b.x
    let ax = {
        x: a.x * b.x,
        y: a.y * b.x,
        result: a.result * b.x
    }

    // b * a.x
    let bx = {
        x: b.x * a.x,
        y: b.y * a.x,
        result: b.result * a.x
    }

    // 相减,消元
    let sub1 = {
        x: 0,
        y: a.y * b.x - b.y * a.x,
        result: a.result * b.x - b.result * a.x
    }

    // 除法,得到y的值
    let y = sub1.result / 1.0 / sub1.y;
    // console.log("y = ", y);

    // 代入得到x的值
    let x = (a.result - a.y * y) / 1.0 / a.x;
    // console.log("x = ", x);

    // 打印最终结果
    console.log("x = ", x, ",y = ", y);
}