2016-05-22 29 views
-4

2x2行列の逆の値を返すにはどうすればよいですか?クラスメソッドCalcInverseを使用します。C++、2x2行列の逆行列を返します。クラスメソッド

#include <iostream> 

    class Matrix2x2 { 
     private: 
      double val00; // first row, first column 
      double val01; // first row, second column 
      double val10; // second row, first colum 
      double val11; // second row, second column 

     public: 
      Matrix2x2(); 
      Matrix2x2(const Matrix2x2& other); //why do you want to overide? 
      Matrix2x2(double a, double b, double c, double d); 
      double CalcDeterminant() const; 
      Matrix2x2 CalcInverse() const; 

      double Getval00() const {return val00;} 
      double Getval01() const {return val01;} 
      double Getval10() const {return val10;} 
      double Getval11() const {return val11;} 

      //non mandatory 
      void Print() const; //should i use this to print out the inverse value? 
    }; 

    #endif /* SUBMISSION_MATRIX2X2_HPP_ */ 

//my useclass method below 


    Matrix2x2::Matrix2x2(){ 
     val00 = 0.0; // first row, first column 
     val01 = 0.0; // first row, second column 
     val10 = 0.0; // second row, first colum 
     val11 = 0.0; // second row, second column 
    } 
    Matrix2x2::Matrix2x2(const Matrix2x2& other){ //copy constructer 
     val00 = other.val01; 
     val01 = other.val01; 
     val10 = other.val10; 
     val11 = other.val11; 
    } 

    Matrix2x2::Matrix2x2(double a, double b, double c, double d){ 

     val00 = a; 
     val01 = b; 
     val10 = c; 
     val11 = d; 
    } 

    double Matrix2x2::CalcDeterminant() const{ 
     double Determinant = val00*val11-val01*val10; 
     return Determinant; 
     } 


    Matrix2x2 Matrix2x2::CalcInverse() const{ // is this the correct way to make inverse method? 
     Matrix2x2 other; 
     double Determinant = val00*val11-val01*val10; 
     other.val00 = Determinant*val11; 
     other.val01 = Determinant*val01; 
     other.val10 = Determinant*val10; 
     other.val11 = Determinant*val00; 
     return other; 
    } 

    void Print() const{ 
     ? 
    } 

私は逆の値をプリントアウトするmain.cppにファイルを使用することができますが、私はこれを行う方法を確認していません。プライベートメンバーの値を取得するだけで、val00..etc。そして行列式。私のuseclass.cppファイル。最初の方法はプライベートメンバーです。 私は正しい道にいるといいですね。

+0

@ Avis - コピーコンストラクタのエラー: 'val00 = other.val01'は間違っています。 'val00 = other.val00' – max66

+0

ゼロで除算しないことを確認してください。 – Matsmath

答えて

0

私は2つのだけの機能CalcInverseと印刷をチェックしました、エラーの2種類があります。

  • 可視性エラーが(あなたがval00がプライベートであるため、other.val00呼び出してプライベート変数を変更することはできません)。
  • 逆行列を計算するために使用される式のエラー(参照のためthis linkを参照)。

CalcInverseはこのようなものでなければなりません。そして、あなたは行列の値を印刷する方法を必要とする

Matrix2x2 Matrix2x2::CalcInverse() const{   
    double invVal00, invVal01, invVal10, invVal11; 
    double determinant = val00*val11-val01*val10; 
    invVal00 = val11/determinant; 
    invVal01 = -val01/determinant; 
    invVal10 = -val10/determinant; 
    invVal11 = val00/determinant; 
    Matrix2x2 invMatrix(invVal00, invVal01, invVal10, invVal11); 
    return invMatrix; 
} 

。例えば、あなたは次のようなものを使うべきです:

void Matrix2x2::Print() const{ 
    std::cout << val00 << " " << val01 << std::endl; 
    std::cout << val10 << " " << val11 << std::endl; 
} 
+0

はい、私のスリップアップだった正しく逆を計算しませんでした。そして、私が他のメンバークラスメソッドの中でメンバークラスメソッドを使うことができないことを私が気付かなかった非常に重要な教訓があります。今感謝します。そして、私はこれが私のコピークラスを使って、行列の逆行列をどのように出力するのかと思います。 int main(){ \t Matrix2x2 other(4,23,22,2); other.CalcInverse(); \t std :: cout << other.Print(); – Aviv

+0

いいえ、それは以下のようになります:int main(){Matrix2x2 other(4,23,22,2); Matrix2x2 inverseMatrix = other.CalcInverse(); std :: cout << inverseMatrix.Print(); 0を返します。 }。あなたの問題を解決した場合は、その答えを回答として設定して質問を閉じます。 –

関連する問題