matrixContainerTest.py
You can view and download this file on Github: matrixContainerTest.py
1#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2# This is an EXUDYN example
3#
4# Details: Simple test for MatrixContainer, similar as Examples given in Docu
5#
6# Author: Johannes Gerstmayr
7# Date: 2024-10-09
8#
9# Copyright:This file is part of Exudyn. Exudyn is free software. You can redistribute it and/or modify it under the terms of the Exudyn license. See 'LICENSE.txt' for more details.
10#
11#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12
13import exudyn as exu
14
15testIsActive = exu.sys.get('testIsActive', False)
16
17import numpy as np
18from scipy.sparse import csr_matrix
19from exudyn import MatrixContainer
20
21u = 0 #result
22mc = MatrixContainer()
23
24#Create MatrixContainer with dense matrix:
25#matrix can be initialized with a dense matrix, using a numpy array or list of lists , e.g.:
26matrix = np.eye(3)
27mcDense1 = MatrixContainer(matrix)
28u+= mcDense1.Convert2DenseMatrix()[0,1]
29mcDense2 = MatrixContainer([[1,2],[3,4]])
30
31u+= mcDense1.Convert2DenseMatrix()[1,0]
32mcSparse = MatrixContainer(csr_matrix(np.array([[1,5],[0,7]])))
33u+= mcSparse.Convert2DenseMatrix()[0,1]
34
35#Set with dense pyArray (a numpy array):
36pyArray = np.array(matrix)
37mc.SetWithDenseMatrix(pyArray, useDenseMatrix = True)
38u+= mc.Convert2DenseMatrix()[1,0]
39
40#Set empty matrix:
41mc.SetWithDenseMatrix([[]], useDenseMatrix = True)
42
43#Set with list of lists, stored as sparse matrix:
44mc.SetWithDenseMatrix([[1,2],[3,4]], useDenseMatrix = False)
45u+= mc.Convert2DenseMatrix()[1,0]
46
47#Set with sparse triplets (list of lists or numpy array):
48mc.SetWithSparseMatrix([[0,0,13.3],[1,1,4.2],[1,2,42.]],
49 numberOfRows=2, numberOfColumns=3,
50 useDenseMatrix=True)
51u+= mc.Convert2DenseMatrix()[1,2]
52
53exu.Print(mc)
54#gives dense matrix:
55#[[13.3 0. 0. ]
56# [ 0. 4.2 42. ]]
57
58#Set with scipy matrix:
59#WARNING: only use csr_matrix
60# csc_matrix would basically run, but gives the transposed!!!
61spmat = csr_matrix(matrix)
62mc.SetWithSparseMatrix(spmat) #takes rows and column format automatically
63u+= mc.Convert2DenseMatrix()[1,1]
64
65#initialize and add triplets later on
66mc.Initialize(3,3,useDenseMatrix=False)
67mc.AddSparseMatrix(spmat, factor=1)
68#can also add smaller matrix
69mc.AddSparseMatrix(csr_matrix(np.eye(2)), factor=0.5)
70exu.Print('mc=',mc.Convert2DenseMatrix())
71u+= mc.Convert2DenseMatrix()[0,0]
72
73#set matrix with smaller sparse matrix than the final dimensions
74mc.SetWithSparseMatrix(csr_matrix(np.array([[1,2],[3,4]])), numberOfRows=4, numberOfColumns=2)
75exu.Print('mc=',mc.Convert2DenseMatrix())
76u+= mc.Convert2DenseMatrix()[1,1]
77
78
79result = u
80exu.Print('solution of matrixContainerTest=',result)
81
82exu.sys['testResult'] = result