Matrix
class
and modify your Vector
class from
programming assignment 1 appropriately.
This assignment is both about matrix arithmetic and C++. With regard to the former, you must implement various operations. With regard to the latter, you must use specialization and templates.
Matrix
and Vector
classes
that do not make use of specialization. However, such an implementation
would have several shortcomings:
Vector
objects would be identical to the code for
adding and subtracting two \(n \times 1\) or
\(1 \times n\) Matrix
objects).
Matrix
class would contain "unnecessary" methods
(e.g., to pre-multiply and post-multiply a Matrix
by a Vector
).
Matrix
and an
\(n \times n\) Matrix
a
Vector
or a \(1 \times n\) Matrix
?).
To overcome these shortcomings,
in this assignment if you need a row Vector
you
will use a \(1 \times n\) Matrix
and if you
need a column Vector
you will use a
\(m \times 1\) Matrix
instead.
However, you will still have a Vector
"class" because
it will contain the friend functions that are specific to
Vecor
objects.
Vector
class
from programming assignment 1 is adequate
but will be somewhat difficult to work with for the rest of the semester.
In particular, until you become familiar with computer graphics,
you are likely to make mistakes involving the dimensionality of
various vectors (and matrices) and your current implementation of these
classes will not "catch" those mistakes at compile-time.
Hence, in this assignment you will use templates to create
Vector
and Matrix
objects that can be checked
for dimensional mismtaches at compile-time.
Matrix
and Vector
templates are
available on-line:
Note that, in keeping with the course style guide, templates should
have a suffix of .hpp
(if possible in your development
environment).
Matrix
class and your modified
implementation of the Vector
class.
As before, your driver must include at least three test
cases for each method/operator.
Matrix<2,2> A; Matrix<2,3> B; A = {5,1, 8,9}; B = {2,7,0, 3,4,6};
The operationr B*A
should generate a compile-time error
(something like
"No match for operator*").
Copyright 2014