Esempio n. 1
0
 const char* sequence(const char* src) {
   const char* rslt = src;
   (rslt = mx1(rslt)) && (rslt = mx2(rslt)) &&
   (rslt = mx3(rslt)) && (rslt = mx4(rslt)) &&
   (rslt = mx5(rslt)) && (rslt = mx6(rslt));
   return rslt;
 }
Esempio n. 2
0
 const char* alternatives(const char* src) {
   const char* rslt = src;
   (rslt = mx1(rslt)) || (rslt = mx2(rslt)) ||
   (rslt = mx3(rslt)) || (rslt = mx4(rslt)) ||
   (rslt = mx5(rslt)) || (rslt = mx6(rslt)) ||
   (rslt = mx7(rslt)) || (rslt = mx8(rslt));
   return rslt;
 }
int
main()
{
    JMatrix mx1(2,2),mx2(2,2);										// constructor

    cout << "mx1 is " << mx1.GetRowCount() << " x " << mx1.GetColCount() << endl;

    cout << "mx1 should be 0 0, 0 0" << endl;
    cout << "mx1 = " << mx1 << endl;

    mx1 = JIdentityMatrix(2);

    mx2.SetElement(1,1, 0.0);
    mx2.SetElement(1,2, 1.0);
    mx2.SetElement(2,1, 1.0);
    mx2.SetElement(2,2, 0.0);

    cout << "mx1 should be 1 0, 0 1" << endl;
    cout << "mx1 = " << mx1 << endl;

    cout << "mx2 should be 0 1, 1 0" << endl;
    cout << "mx2 = " << mx2 << endl;

    JWaitForReturn();

    JMatrix mx3 = -mx2;												// copy constructor

    cout << "mx3 should be 0 -1, -1 0" << endl;
    cout << "mx3 = " << mx3 << endl;

    mx3 += mx1;

    JMatrix mx4 = mx1 - mx2;

    cout << "mx4 should be 1 -1, -1 1" << endl;
    cout << "mx4 = " << mx4 << endl;

    cout << "mx3 should equal mx4" << endl;
    cout << "mx3 equals mx4? " << (mx3 == mx4) << endl;

    mx4 /= 0.5;

    cout << "mx4 should be 2 -2, -2 2" << endl;
    cout << "mx4 = " << mx4 << endl;

    mx4.SetAllElements(1.0);
    mx4.SetElement(1,2, 0.0);

    cout << "mx4 should be 1 0, 1 1" << endl;
    cout << "mx4 = " << mx4 << endl;

    JMatrix mx5 = mx4.Transpose();

    cout << "mx5 should be 1 1, 0 1" << endl;
    cout << "mx5 = " << mx5 << endl;

    cout << "mx4 * mx5 should be 1 1, 1 2" << endl;
    cout << "mx4 * mx5 = " << mx4 * mx5 << endl;

    JWaitForReturn();

    JVector v1 = mx4.GetColVector(2);
    JVector v2 = mx4.GetRowVector(1);

    cout << "v1 should be 0 1" << endl;
    cout << "v1 = " << v1 << endl;

    cout << "v1 dot v2 should be 0" << endl;
    cout << "v1 dot v2 = " << JDotProduct(v1, v2) << endl;

    cout << "mx4 * v1 should be 0, 1" << endl;
    cout << "mx4 * v1 = " << mx4 * v1 << endl;

    cout << "(v1)t * mx4 should be 1 1" << endl;
    cout << "(v1)t * mx4 = " << v1.Transpose() * mx4 << endl;

    cout << "Enter new mx5: ";
    cin >> mx5;
    JInputFinished();
    cout << "mx5 = " << mx5 << endl;

    JWaitForReturn();

    JMatrix mx6(3,3), mx7(3,3);

    mx6.SetElement(1,1, 1.0);
    mx6.SetElement(2,2, 2.0);
    mx6.SetElement(3,3, 3.0);

    cout << "det(mx6) should be 6" << endl;
    cout << "det(mx6) = " << mx6.Determinant() << endl;

    assert( mx6.Invert(&mx7) );
    cout << "mx7 should be 1 0 0, 0 0.5 0, 0 0 0.333333" << endl;
    cout << "mx7 = " << mx7 << endl;

    mx6.SetElement(1,1, 1.0);
    mx6.SetElement(1,2, 2.0);
    mx6.SetElement(1,3, 3.0);
    mx6.SetElement(2,1, 4.0);
    mx6.SetElement(2,2, 5.0);
    mx6.SetElement(2,3, 6.0);
    mx6.SetElement(3,1, 2.0);
    mx6.SetElement(3,2, 3.0);
    mx6.SetElement(3,3, 4.0);

    cout << endl;
    cout << "mx6 should be 1 2 3, 4 5 6, 2 3 4" << endl;
    cout << "mx6 = " << mx6 << endl;

    cout << "det(mx6) should be 0" << endl;
    cout << "det(mx6) = " << mx6.Determinant() << endl;

    assert( !mx6.Invert(&mx7) );

    cout << "mx6 was not invertible (correct)" << endl;

    mx6.SetElement(1,1, 1.0);
    mx6.SetElement(1,2, 0.5);
    mx6.SetElement(1,3, -2.0);
    mx6.SetElement(2,1, 1.0/3.0);
    mx6.SetElement(2,2, 5.0);
    mx6.SetElement(2,3, -7.5);
    mx6.SetElement(3,1, 0.0);
    mx6.SetElement(3,2, 1.0);
    mx6.SetElement(3,3, -3.0);

    cout << endl;
    assert( mx6.Invert(&mx7) );

    cout << "det(mx6) should be 1/det(mx7) should be -7.666667" << endl;
    cout << mx6.Determinant() << " ?= " << 1.0/mx7.Determinant() << endl;

    cout << "A*A-1 should get 1 0 0, 0 1 0, 0 0 1" << endl;
    cout << "A*A-1 = " << mx6 * mx7 << endl;
    cout << "A-1*A = " << mx7 * mx6 << endl;

    mx6.SetElement(1,1, 2.0);
    mx6.SetElement(1,2, -1.0);
    mx6.SetElement(1,3, 1.0);
    mx6.SetElement(2,1, 1.0);
    mx6.SetElement(2,2, 3.0);
    mx6.SetElement(2,3, 2.0);
    mx6.SetElement(3,1, 5.0);
    mx6.SetElement(3,2, 0.0);
    mx6.SetElement(3,3, -2.0);

    JVector b(3, 3.0, 13.0, -1.0);
    JVector x(3);

    cout << endl;
    cout << "Solution should be: 1 2 3" << endl;
    if (JGaussianElimination(mx6, b, &x))
    {
        cout << "Solution is:        " << x << endl;
    }
    else
    {
        cout << "ERROR: mx6 should be invertible!" << endl;
    }

    mx6.SetElement(3,1, 3.0);
    mx6.SetElement(3,2, 2.0);
    mx6.SetElement(3,3, 3.0);

    cout << endl;
    cout << "Solution should not exist" << endl;
    if (!JGaussianElimination(mx6, b, &x))
    {
        cout << "Solution does not exist" << endl;
    }
    else
    {
        cout << "Solution exists: " << x << endl;
        cout << "(because of round off error)" << endl;
    }

    return 0;
}
Esempio n. 4
0
 const char* alternatives(const char* src) {
   const char* rslt;
   (rslt = mx1(src)) || (rslt = mx2(src)) || (rslt = mx3(src)) ||
   (rslt = mx4(src)) || (rslt = mx5(src)) || (rslt = mx6(src));
   return rslt;
 }