2013-10-27 19 views
7

Lösen das System von zwei Gleichungen mit zwei Unbekannten unter:Lösen System von zwei Gleichungen mit zwei Unbekannten

enter image description here

a1, b1, c1, a2, b2 und c2 durch den Benutzer selbst eingegeben.

Ich habe versucht, eine mathematische Lösung für das Problem zuerst zu finden, und ich kann nicht weit zu gehen scheinen ..

Was ich versucht habe, so weit ist:

  1. Von der ersten Gleichung, um y zu finden. (b1y = c1-a1x, y = (c1-a1x)/b1)
  2. Dann ersetze ich y in der zweiten Gleichung und ich bekomme eine Gleichung mit 1 unbekannt in diesem Fall x. Allerdings kann ich die Gleichung nicht lösen, ich bekomme ein paar ungerade Zahlen/Gleichungen und stoppe hier.

Ist das korrekt oder gibt es einen einfacheren Weg?

Aktuelle Code:

#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

'C++' Code bitte – P0W

+2

in Ihrem Code, zuerst, sollten Sie überprüfen, ob Ihr System von 2 Unbekannten hat eine, unendlich oder keine Lösung (berechnen Sie die Determinante) – lolando

+2

Die Lösung ist direkt angegeben als die Umkehrung der 2x2 Matrix (a1, b1; a2, b2) falls die Matrix invertierbar ist (d. h. det! = 0). –

Antwort

10

wir lösen das lineare System mit 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 Systemgleichungen: Ergebnis x = 1.000000, y = 2.000000

Verwandte Themen