@@ -65,10 +65,13 @@ struct ProceduralMatrix : public MatrixExpr<ProceduralMatrix<Functor_, Rows_, Co
6565 Functor_ f_;
6666};
6767// definition of procedrual matrices
68- template <int Rows, int Cols> using ZeroMatrix = ProceduralMatrix<decltype ([](int , int ) { return 0 ; }), Rows, Cols>;
69- template <int Rows, int Cols> using OnesMatrix = ProceduralMatrix<decltype ([](int , int ) { return 1 ; }), Rows, Cols>;
70- template <int Rows, int Cols>
71- using IdentityMatrix = ProceduralMatrix<decltype ([](int i, int j) { return i == j ? 1 : 0 ; }), Rows, Cols>;
68+ template <typename Scalar, int Rows, int Cols>
69+ using ZeroMatrix = ProceduralMatrix<decltype ([](int , int ) { return Scalar (0 ); }), Rows, Cols>;
70+ template <typename Scalar, int Rows, int Cols>
71+ using OnesMatrix = ProceduralMatrix<decltype ([](int , int ) { return Scalar (1 ); }), Rows, Cols>;
72+ template <typename Scalar, int Rows, int Cols>
73+ using IdentityMatrix =
74+ ProceduralMatrix<decltype ([](int i, int j) { return i == j ? Scalar (1 ) : Scalar (0 ); }), Rows, Cols>;
7275
7376namespace internals {
7477
@@ -341,18 +344,18 @@ class Matrix : public MatrixBase<Scalar_, Rows_, Cols_, StorageOrder_, Matrix<Sc
341344 }
342345
343346 // static named constructors
344- static constexpr auto Zero () { return ZeroMatrix<Rows_, Cols_>(); }
347+ static constexpr auto Zero () { return ZeroMatrix<Scalar_, Rows_, Cols_>(); }
345348 static constexpr auto Zero (int size) {
346349 fdapde_static_assert (Rows_ == 1 || Cols_ == 1 , THIS_METHOD_IS_FOR_ROW_OR_COLUMN_VECTORS_ONLY);
347- return ZeroMatrix< Rows_ == 1 ? Rows_ : Dynamic, Cols_ == 1 ? Cols_ : Dynamic >(size);
350+ return ZeroMatrix<Scalar_, Rows_ == 1 ? Rows_ : Dynamic, Cols_ == 1 ? Cols_ : Dynamic>(size);
348351 }
349- static constexpr auto Zero (int rows, int cols) { return ZeroMatrix<Dynamic, Dynamic>(rows, cols); }
350- static constexpr auto Ones () { return OnesMatrix<Rows_, Cols_>(); }
352+ static constexpr auto Zero (int rows, int cols) { return ZeroMatrix<Scalar_, Dynamic, Dynamic>(rows, cols); }
353+ static constexpr auto Ones () { return OnesMatrix<Scalar_, Rows_, Cols_>(); }
351354 static constexpr auto Ones (int size) {
352355 fdapde_static_assert (Rows_ == 1 || Cols_ == 1 , THIS_METHOD_IS_FOR_ROW_OR_COLUMN_VECTORS_ONLY);
353- return OnesMatrix < Rows_ == 1 ? Rows_ : Dynamic, Cols_ == 1 ? Cols_ : Dynamic > (size);
356+ return OnesMatrix<Scalar_, Rows_ == 1 ? Rows_ : Dynamic, Cols_ == 1 ? Cols_ : Dynamic> (size);
354357 }
355- static constexpr auto Ones (int rows, int cols) { return OnesMatrix<Dynamic, Dynamic>(rows, cols); }
358+ static constexpr auto Ones (int rows, int cols) { return OnesMatrix<Scalar_, Dynamic, Dynamic>(rows, cols); }
356359 static constexpr auto Constant (Scalar value) { return value * Ones (); }
357360 static constexpr auto Constant (int size, Scalar value) {
358361 fdapde_static_assert (Rows_ == 1 || Cols_ == 1 , THIS_METHOD_IS_FOR_ROW_OR_COLUMN_VECTORS_ONLY);
@@ -445,7 +448,7 @@ class MatrixView :
445448// vector aliases
446449template <typename Scalar, int Rows> using Vector = Matrix<Scalar, Rows, 1 >;
447450template <typename Scalar, int Rows> using VectorView = MatrixView<Scalar, Rows, 1 >;
448-
451+
449452} // namespace fdapde
450453
451454#endif // _FDAPDE_LINALG_MATRIX_H__
0 commit comments