11

以下の 2 つの未知数を持つ 2 つの連立方程式を解きます。

ここに画像の説明を入力

a1、b1、c1、a2、b2、c2は、ユーザ自身が入力する。

最初に問題の数学的な解決策を見つけようとしましたが、遠くまで行けないようです..

私がこれまでに試したことは次のとおりです。

  1. 最初の方程式から y を見つけます。(b1y = c1-a1x、y = (c1-a1x)/b1)
  2. 次に、2 番目の方程式の y を置き換えます。この場合、x の場合、未知数が 1 の方程式が 1 つ得られます。しかし、私は方程式を解くことができません.私はいくつかの奇数/方程式を取得し、ここで停止しました.

これは正しいですか、それとももっと簡単な方法はありますか?

現在のコード:

#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;
}
4

2 に答える 2

15

Cramer の規則を使用して線形システムを解きます。

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

于 2013-10-27T15:37:58.007 に答える