1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This file is part of Eigen, a lightweight C++ template library 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// for linear algebra. 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2011 Kolja Brix <brix@igpm.rwth-aachen.de> 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2011 Andreas Platen <andiplaten@gmx.de> 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This Source Code Form is subject to the terms of the Mozilla 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Public License v. 2.0. If a copy of the MPL was not distributed 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "sparse.h" 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <Eigen/SparseExtra> 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <Eigen/KroneckerProduct> 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid check_dimension(const MatrixType& ab, const unsigned int rows, const unsigned int cols) 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_EQUAL(ab.rows(), rows); 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_EQUAL(ab.cols(), cols); 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid check_kronecker_product(const MatrixType& ab) 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_EQUAL(ab.rows(), 6); 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_EQUAL(ab.cols(), 6); 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_EQUAL(ab.nonZeros(), 36); 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(0,0), -0.4017367630386106); 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(0,1), 0.1056863433932735); 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(0,2), -0.7255206194554212); 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(0,3), 0.1908653336744706); 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(0,4), 0.350864567234111); 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(0,5), -0.0923032108308013); 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(1,0), 0.415417514804677); 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(1,1), -0.2369227701722048); 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(1,2), 0.7502275131458511); 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(1,3), -0.4278731019742696); 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(1,4), -0.3628129162264507); 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(1,5), 0.2069210808481275); 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(2,0), 0.05465890160863986); 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(2,1), -0.2634092511419858); 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(2,2), 0.09871180285793758); 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(2,3), -0.4757066334017702); 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(2,4), -0.04773740823058334); 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(2,5), 0.2300535609645254); 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(3,0), -0.8172945853260133); 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(3,1), 0.2150086428359221); 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(3,2), 0.5825113847292743); 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(3,3), -0.1532433770097174); 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(3,4), -0.329383387282399); 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(3,5), 0.08665207912033064); 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(4,0), 0.8451267514863225); 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(4,1), -0.481996458918977); 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(4,2), -0.6023482390791535); 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(4,3), 0.3435339347164565); 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(4,4), 0.3406002157428891); 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(4,5), -0.1942526344200915); 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(5,0), 0.1111982482925399); 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(5,1), -0.5358806424754169); 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(5,2), -0.07925446559335647); 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(5,3), 0.3819388757769038); 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(5,4), 0.04481475387219876); 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(5,5), -0.2159688616158057); 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid check_sparse_kronecker_product(const MatrixType& ab) 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_EQUAL(ab.rows(), 12); 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_EQUAL(ab.cols(), 10); 75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_EQUAL(ab.nonZeros(), 3*2); 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(3,0), -0.04); 77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(5,1), 0.05); 78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(0,6), -0.08); 79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(2,7), 0.10); 80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(6,8), 0.12); 81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(ab.coeff(8,9), -0.15); 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid test_kronecker_product() 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // DM = dense matrix; SM = sparse matrix 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Matrix<double, 2, 3> DM_a; 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MatrixXd DM_b(3,2); 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SparseMatrix<double> SM_a(2,3); 91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SparseMatrix<double> SM_b(3,2); 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_a.insert(0,0) = DM_a(0,0) = -0.4461540300782201; 93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_a.insert(0,1) = DM_a(0,1) = -0.8057364375283049; 94c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_a.insert(0,2) = DM_a(0,2) = 0.3896572459516341; 95c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_a.insert(1,0) = DM_a(1,0) = -0.9076572187376921; 96c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_a.insert(1,1) = DM_a(1,1) = 0.6469156566545853; 97c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_a.insert(1,2) = DM_a(1,2) = -0.3658010398782789; 98c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_b.insert(0,0) = DM_b(0,0) = 0.9004440976767099; 99c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_b.insert(0,1) = DM_b(0,1) = -0.2368830858139832; 100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_b.insert(1,0) = DM_b(1,0) = -0.9311078389941825; 101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_b.insert(1,1) = DM_b(1,1) = 0.5310335762980047; 102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_b.insert(2,0) = DM_b(2,0) = -0.1225112806872035; 103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_b.insert(2,1) = DM_b(2,1) = 0.5903998022741264; 104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SparseMatrix<double,RowMajor> SM_row_a(SM_a), SM_row_b(SM_b); 105c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // test kroneckerProduct(DM_block,DM,DM_fixedSize) 107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Matrix<double, 6, 6> DM_fix_ab; 108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath DM_fix_ab(0,0)=37.0; 109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath kroneckerProduct(DM_a.block(0,0,2,3),DM_b,DM_fix_ab); 110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST(check_kronecker_product(DM_fix_ab)); 111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // test kroneckerProduct(DM,DM,DM_block) 113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MatrixXd DM_block_ab(10,15); 114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath DM_block_ab(0,0)=37.0; 115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath kroneckerProduct(DM_a,DM_b,DM_block_ab.block(2,5,6,6)); 116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST(check_kronecker_product(DM_block_ab.block(2,5,6,6))); 117c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // test kroneckerProduct(DM,DM,DM) 119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MatrixXd DM_ab(1,5); 120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath DM_ab(0,0)=37.0; 121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath kroneckerProduct(DM_a,DM_b,DM_ab); 122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST(check_kronecker_product(DM_ab)); 123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // test kroneckerProduct(SM,DM,SM) 125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SparseMatrix<double> SM_ab(1,20); 126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_ab.insert(0,0)=37.0; 127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath kroneckerProduct(SM_a,DM_b,SM_ab); 128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST(check_kronecker_product(SM_ab)); 129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SparseMatrix<double,RowMajor> SM_ab2(10,3); 130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_ab2.insert(0,0)=37.0; 131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath kroneckerProduct(SM_a,DM_b,SM_ab2); 132c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST(check_kronecker_product(SM_ab2)); 133c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // test kroneckerProduct(DM,SM,SM) 135c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_ab.insert(0,0)=37.0; 136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath kroneckerProduct(DM_a,SM_b,SM_ab); 137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST(check_kronecker_product(SM_ab)); 138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_ab2.insert(0,0)=37.0; 139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath kroneckerProduct(DM_a,SM_b,SM_ab2); 140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST(check_kronecker_product(SM_ab2)); 141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // test kroneckerProduct(SM,SM,SM) 143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_ab.resize(2,33); 144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_ab.insert(0,0)=37.0; 145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath kroneckerProduct(SM_a,SM_b,SM_ab); 146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST(check_kronecker_product(SM_ab)); 147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_ab2.resize(5,11); 148c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_ab2.insert(0,0)=37.0; 149c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath kroneckerProduct(SM_a,SM_b,SM_ab2); 150c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST(check_kronecker_product(SM_ab2)); 151c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 152c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // test kroneckerProduct(SM,SM,SM) with sparse pattern 153c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_a.resize(4,5); 154c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_b.resize(3,2); 155c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_a.resizeNonZeros(0); 156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_b.resizeNonZeros(0); 157c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_a.insert(1,0) = -0.1; 158c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_a.insert(0,3) = -0.2; 159c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_a.insert(2,4) = 0.3; 160c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_a.finalize(); 161c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_b.insert(0,0) = 0.4; 162c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_b.insert(2,1) = -0.5; 163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_b.finalize(); 164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_ab.resize(1,1); 165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath SM_ab.insert(0,0)=37.0; 166c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath kroneckerProduct(SM_a,SM_b,SM_ab); 167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST(check_sparse_kronecker_product(SM_ab)); 168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // test dimension of result of kroneckerProduct(DM,DM,DM) 170c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MatrixXd DM_a2(2,1); 171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MatrixXd DM_b2(5,4); 172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MatrixXd DM_ab2; 173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath kroneckerProduct(DM_a2,DM_b2,DM_ab2); 174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST(check_dimension(DM_ab2,2*5,1*4)); 175c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath DM_a2.resize(10,9); 176c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath DM_b2.resize(4,8); 177c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath kroneckerProduct(DM_a2,DM_b2,DM_ab2); 178c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST(check_dimension(DM_ab2,10*4,9*8)); 179c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 180