Spaces:
Running
Running
from sympy.core.expr import unchanged | |
from sympy.core.symbol import Symbol, symbols | |
from sympy.matrices.immutable import ImmutableDenseMatrix | |
from sympy.matrices.expressions.companion import CompanionMatrix | |
from sympy.polys.polytools import Poly | |
from sympy.testing.pytest import raises | |
def test_creation(): | |
x = Symbol('x') | |
y = Symbol('y') | |
raises(ValueError, lambda: CompanionMatrix(1)) | |
raises(ValueError, lambda: CompanionMatrix(Poly([1], x))) | |
raises(ValueError, lambda: CompanionMatrix(Poly([2, 1], x))) | |
raises(ValueError, lambda: CompanionMatrix(Poly(x*y, [x, y]))) | |
assert unchanged(CompanionMatrix, Poly([1, 2, 3], x)) | |
def test_shape(): | |
c0, c1, c2 = symbols('c0:3') | |
x = Symbol('x') | |
assert CompanionMatrix(Poly([1, c0], x)).shape == (1, 1) | |
assert CompanionMatrix(Poly([1, c1, c0], x)).shape == (2, 2) | |
assert CompanionMatrix(Poly([1, c2, c1, c0], x)).shape == (3, 3) | |
def test_entry(): | |
c0, c1, c2 = symbols('c0:3') | |
x = Symbol('x') | |
A = CompanionMatrix(Poly([1, c2, c1, c0], x)) | |
assert A[0, 0] == 0 | |
assert A[1, 0] == 1 | |
assert A[1, 1] == 0 | |
assert A[2, 1] == 1 | |
assert A[0, 2] == -c0 | |
assert A[1, 2] == -c1 | |
assert A[2, 2] == -c2 | |
def test_as_explicit(): | |
c0, c1, c2 = symbols('c0:3') | |
x = Symbol('x') | |
assert CompanionMatrix(Poly([1, c0], x)).as_explicit() == \ | |
ImmutableDenseMatrix([-c0]) | |
assert CompanionMatrix(Poly([1, c1, c0], x)).as_explicit() == \ | |
ImmutableDenseMatrix([[0, -c0], [1, -c1]]) | |
assert CompanionMatrix(Poly([1, c2, c1, c0], x)).as_explicit() == \ | |
ImmutableDenseMatrix([[0, 0, -c0], [1, 0, -c1], [0, 1, -c2]]) | |