求解具有两个未知数的两个方程的系统

时间:2013-10-27 14:36:48

标签: c++ math equation equation-solving

解决下面两个未知数的两个方程组的系统:

enter image description here

a1,b1,c1,a2,b2和c2由用户自己输入。

我一直在努力为这个问题找到一个数学解决方案而且我似乎无法走远......

到目前为止我尝试的是:

  1. 从第一个等式找到y。 (b1y = c1-a1x,y =(c1-a1x)/ b1)
  2. 然后我在第二个等式中替换y,得到一个方程式,其中1个未知,在这种情况下为x。但是,我无法解决这个等式,我得到一些奇数/方程并停在这里。
  3. 这是正确的还是有更简单的方法来做到这一点?

    当前代码:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int a1, b1, c1, a2, b2, c2;
        cout << "Enter the values for the first equation." << endl;
        cout << "Enter the value for a1" << endl;
        cin >> a1;
        cout << "Enter the value for b1" << endl;
        cin >> b1;
        cout << "Enter the value for c1" << endl;
        cin >> c1;
        cout << "Enter the values for the second equation." << endl;
        cout << "Enter the value for a2" << endl;
        cin >> a2;
        cout << "Enter the value for b2" << endl;
        cin >> b2;
        cout << "Enter the value for c2" << endl;
        cin >> c2;
        cout << "Your system of equations is the following:" << endl;
        cout << a1 << "x+" << b1 << "y=" << c1 << endl;
        cout << a2 << "x+" << b2 << "y=" << c2 << endl;
    
    if ((a1 * b2) - (b1 * a2) == 0){
        cout << "The system has no solution." << endl;
    }
    else{
        res_x = ((c1*b2) - (b1*c2))/((a1*b2)-(b1*a2));
        res_y = ((a1*c2) - (c1*a2)) / ((a1*b2) - (b1*a2));
        cout << "x=" << res_x << " y=" << res_y << endl;
    }
    
        return 0;
    }
    

2 个答案:

答案 0 :(得分:11)

我们使用Cramer's rule求解线性系统:

int main(int argc, char** argv) {
    /* we solve the linear system
     * ax+by=e
     * cx+dy=f
     */
    if(argc != 7) {
        cerr<<"Cramer equations system: error,"
                             " we need a,b,c,d,e,f parameters.\n";
        return -1;
    }

    double a,b,e;
    double c,d,f;
    sscanf(argv[1],"%lf",&a);
    sscanf(argv[2],"%lf",&b);
    sscanf(argv[3],"%lf",&e);
    sscanf(argv[4],"%lf",&c);
    sscanf(argv[5],"%lf",&d);
    sscanf(argv[6],"%lf",&f);

    double determinant = a*d - b*c;
    if(determinant != 0) {
        double x = (e*d - b*f)/determinant;
        double y = (a*f - e*c)/determinant;
        printf("Cramer equations system: result, x = %f, y = %f\n", x, y);
    } else {
        printf("Cramer equations system: determinant is zero\n"
                "there are either no solutions or many solutions exist.\n"); 
    }
    return 0;
}

./ cramer_equation_system 1 2 5 1 -1 -1

Cramer方程组:结果,x = 1.000000,y = 2.000000

答案 1 :(得分:-1)

4pie0's answer启发的Javascript版本

// throws error if intersection can't be found
function intersect_2_lines (
    a,b,e,
    c,d,f
)
{
        /* we solve the linear system
         * ax+by=e
         * cx+dy=f
         */

        var determinant = a*d - b*c;
        if(determinant != 0) {
            var x = (e*d - b*f)/determinant;
            var y = (a*f - e*c)/determinant;
            console.log(`Cramer equations system: result, x = ${x}, y = ${y}\n`);
        } else {
            throw new Error("Cramer equations system: determinant is zero\n" +
                    "there are either no solutions or many solutions exist.\n"); 
        }
        return [x,y];
}