我有一个课程,涉及实现两个类,一个用于存储Matrix对象,另一个用于SquareMatrix对象。我们必须实现成员函数以能够求解形式Ax = b的方程,其中A是矩阵,x是我们想要找到的向量,b是已知向量。
我已经在SquareMatrix的情况下实现了这一点,因为高斯消除并不太难。课程作业说我们应该用非方形矩阵解决案例的方法是用' Ax = A' b来解决。意思是转置。 A' A现在是方矩阵,因此也可以使用高斯消元来解决。
我想知道的是,在Matrix求解函数中创建SquareMatrix对象是否有效,然后使用SquareMatrix成员求解来解决系统问题。例如,如果在SquareMatrix我有
Matrix SquareMatrix::solve(Matrix& b){
//stuff that solves (*this) * x = b for x and returns x
}
我可以在Matrix.cpp中使用
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;
}
所以我通过乘以它的转置使矩阵平方,然后调用SquareMatrix求解函数。我对C ++比较陌生,并且100%不知道我的继承权,所以我不确定这是否是一个有效或明智的事情。
答案 0 :(得分:1)
我不确定这是否是一个有效或明智的事情。
在某些情况下使用派生类来实现父类的功能是有效的。
从SquareMatrix
派生Matrix
是否有意义是另一个考虑因素。要知道该问题的答案,您需要考虑您的设计,并概述Matrix
的所有类不变量和成员函数前后条件,然后考虑SquareMatrix
是否可以满足所有这些条件