I have the toy example belowto compare the direct use of smith_form and
the combination of hermite_form and smith_form.
Last execution (there are random inputs) gave:
CPU times: user 2.22 s, sys: 5.93 ms, total: 2.23 s Wall time: 2.23 s CPU
times: user 454 ms, sys: 990 µs, total: 455 ms Wall time: 456 ms
%%%%%%%%%%%%%%%%%%%%%
R.<t> = QQ[]
n = 3
m = 5
ds = (n, m)
M = MatrixSpace(R, n, m)
V = random_vector(R, n)
A0 = Matrix(R, n, m)
A0[0, 0] = R.random_element()
for j in range(1, n):
A0[j, j] = A0[j -1, j - 1] * R.random_element()
def par(n):
i1 = ZZ.random_element(0,n)
j1 = i1
while j1 == i1:
j1 = ZZ.random_element(0,n)
return (i1, j1)
def smith_hermite(A):
D1, U1 = A.hermite_form(transformation=True)
D, U2, V = D1.smith_form()
U = U2 * U1
return D, U, V
P = {j: identity_matrix(R, ds[j]) for j in range(2)}
s = 20
for k in range(2):
for a in range(s):
i, j = par(n)
f = R.random_element()
P[k].add_multiple_of_row(i, j ,f)
i, j = par(n)
P[k].swap_rows(i, j)
i, j = par(n)
f = R.random_element()
P[k].add_multiple_of_column(i, j ,f)
i, j = par(n)
P[0].swap_columns(i, j)
A = P[0] * A0 * P[1]
%time D, U, V = A.smith_form()
%time D1, U1, V1 = smith_hermite(A)
--
You received this message because you are subscribed to the Google Groups
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/sage-support/dec24250-3a00-4c3e-a2e6-e352cde6ff2bn%40googlegroups.com.