Skip to content

Commit 380f9e8

Browse files
authored
Merge pull request #13 from DurieuxPol/feat/methods
Fixed Eigen values and vectors for matrix with single value
2 parents bb4c5c9 + 2e645ab commit 380f9e8

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

src/Math-Matrix-Tests/PMMatrixTest.class.st

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,22 @@ PMMatrixTest >> testDimension [
163163

164164
]
165165

166+
{ #category : 'linear algebra' }
167+
PMMatrixTest >> testEigenForSingleValueMatrix [
168+
169+
| matrix expectedEigenvalues eigenvalues expectedEigenvectors eigenvectors |
170+
matrix := PMMatrix rows: #( #( 3 ) ).
171+
172+
expectedEigenvalues := #( 3 ).
173+
expectedEigenvectors := PMVector with: (PMVector ones: 1).
174+
175+
eigenvalues := matrix eigen values.
176+
eigenvectors := matrix eigen vectors.
177+
178+
eigenvalues with: expectedEigenvalues do: [ :actual :expected | self assert: actual closeTo: expected ].
179+
eigenvectors with: expectedEigenvectors do: [ :actual :expected | self assert: actual closeTo: expected ]
180+
]
181+
166182
{ #category : 'linear algebra' }
167183
PMMatrixTest >> testEigenvalues [
168184
"Code Example 8.15"

src/Math-Matrix/PMMatrix.class.st

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,8 @@ PMMatrix >> eigen [
498498
matrix eigen values.
499499
matrix eigen vectors."
500500

501+
self numberOfColumns == 1 & self numberOfRows == 1 ifTrue: [ ^ PMSingleValueMatrixHelper matrix: self ].
502+
501503
self isSymmetric
502504
ifTrue: [ ^ self asSymmetricMatrix eigen ]
503505
ifFalse: [ self error: 'Eigenvalues and eigenvectors of non-symmetric matrix are currently not supported' ]
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Class {
2+
#name : 'PMSingleValueMatrixHelper',
3+
#superclass : 'PMJacobiTransformationHelper',
4+
#category : 'Math-Matrix',
5+
#package : 'Math-Matrix'
6+
}
7+
8+
{ #category : 'initialization' }
9+
PMSingleValueMatrixHelper >> initialize: aSingleValueMatrix [
10+
11+
eigenvalues := Array with: (aSingleValueMatrix at: 1 at: 1).
12+
eigenvectors := PMVector with: (PMVector ones: 1)
13+
]

0 commit comments

Comments
 (0)