// Copyright (C) 2026 Kiyotsugu Arai // SPDX-License-Identifier: LGPL-3.0-or-later // // example_doc_matrix_samples.cpp // Verification harness for samples in api/Matrix.html (ja+en). #include #include #include #include #include using namespace sangi; void print_mat(const Matrix& m) { std::cout << '{'; for (std::size_t i = 0; i < m.rows(); ++i) { std::cout << (i ? ", {" : "{"); for (std::size_t j = 0; j < m.cols(); ++j) { if (j) std::cout << ", "; std::cout << m(i, j); } std::cout << '}'; } std::cout << '}'; } template void print_vec(const V& v) { std::cout << '{'; for (std::size_t i = 0; i < v.size(); ++i) { if (i) std::cout << ", "; std::cout << v[i]; } std::cout << '}'; } int main() { std::cout << std::setprecision(15); // ---- arithmetic ---------------------------------------------- { std::cout << "[arithmetic]\n"; Matrix A = {{1, 2}, {3, 4}}; Matrix B = {{5, 6}, {7, 8}}; Matrix C = A * B; std::cout << " A*B = "; print_mat(C); std::cout << "\n"; Vector v({1.0, 2.0}); Vector w = A * v; std::cout << " A*v = "; print_vec(w); std::cout << "\n"; Matrix At = A ^ 'T'; std::cout << " A^T = "; print_mat(At); std::cout << "\n"; Matrix Ainv = A ^ (-1); std::cout << " A^-1 = "; print_mat(Ainv); std::cout << "\n"; Matrix A3 = A ^ 3; std::cout << " A^3 = "; print_mat(A3); std::cout << "\n"; } // ---- determinant / inverse / trace / norm -------------------- { std::cout << "[determinant/inverse/trace/norm]\n"; Matrix A = {{1, 2}, {3, 4}}; std::cout << " det(A) = " << A.determinant() << "\n"; std::cout << " trace(A) = " << A.trace() << "\n"; std::cout << " norm_F(A) = " << A.norm() << "\n"; Matrix Ainv = A.inverse(); Matrix I = A * Ainv; std::cout << " A*A^-1 = "; print_mat(I); std::cout << "\n"; } // ---- identity factory ----------------------------------------- { std::cout << "[identity factory]\n"; Matrix I3 = Matrix::identity(3); std::cout << " identity(3) = "; print_mat(I3); std::cout << "\n"; } // ---- solve via Matrix.solve() (newly added member) ----------- { std::cout << "[Matrix.solve]\n"; // A x = b, where A = [[4, 1], [1, 3]] and b = [9, 8] Matrix A = {{4, 1}, {1, 3}}; Vector b({9.0, 8.0}); auto x_opt = A.solve(b); if (x_opt) { std::cout << " x = "; print_vec(*x_opt); std::cout << "\n"; Vector r = A * (*x_opt); std::cout << " A*x = "; print_vec(r); std::cout << " (should be b)\n"; } else { std::cout << " singular system\n"; } } return 0; }