2017-01-17 11 views
0

私はMatrixオブジェクトとSquareMatrixオブジェクトのためのこの子を格納する2つのクラスを実装することを含むコースワークを持っています。 Ax = bという式の方程式を解くことができるメンバー関数を実装する必要があります.Aは行列、xは見つけたいベクトル、bは既知のベクトルです。子クラスのインスタンスを使用する親クラスメンバ関数C++

私はSquareMatrixの場合にこれを実装しました.Gaussianの除去ではそれほど難しくないからです。コースウェアでは、非正方行列の場合を解くために使用する必要があると言う方法は、A'Ax = A'bを「転置意味」で解くことです。 A'Aは正方行列になっているので、これはガウス消去を使っても解けます。

私が知りたかったのは、Matrixの解決関数でSquareMatrixオブジェクトを作成し、SquareMatrixメンバーの解決法を使ってシステムを解決することが有効であるかどうかということでした。だから、例えばSquareMatrixに私は私はその後Matrix.cppにだから私はその転置を乗じて、マトリックスの正方形を作り、その後SquareMatrix関数を解決呼んでいる

Matrix Matrix::solve(Matrix& b){ 
    //make the matrix into a square 
    SquareMatrix AtransposeA = (this->transpose())*(*this); 

    //update rhs of equation accordingly 
    Matrix Atransposeb = (this->transpose()) * b; 

    //Call SquareMatrix solve to solve the problem. 
    Matrix x = AtransposeA.solve(Atransposeb); 
    return x; 
} 

Matrix SquareMatrix::solve(Matrix& b){ 
    //stuff that solves (*this) * x = b for x and returns x 
} 

を持ってもらえている場合。私はC++には比較的新しいので、100%は継承の周りに頭を浮かべていないので、これが有効かどうかわからない。

答えて

1

これが有効かどうかわかりません。

派生クラスを使用して、場合によっては親クラスの関数を実装することは有効です。

SquareMatrixMatrixに由来するかどうかは別の考慮事項です。その質問に対する答えを知るためには、あなたの設計を考慮し、すべての階級不変量とメンバー関数の前後条件の概要をMatrixとし、それらをすべて満足できるかどうかを検討する必要があります。

+0

私はあなたのことを知っていますが、教科書でMatrixからSquareMatrixを派生させることを明示的に求めているので、選択肢はありません。親クラスの派生クラスを使用しても有効かどうかを確認してくれてありがとう – bigbadpiano

関連する問題