@@ -331,19 +331,22 @@ connected in a chain.
331331- `chi` is the bond dimension of the virtual indices.
332332- `d` is the dimension of the physical indices.
333333"""
334- function matrix_product_state (n:: Int , chi:: Int , d:: Int = 2 )
335- tensors = Any[randn (ComplexF64, d, chi)]
334+ random_matrix_product_state (n:: Int , chi:: Int , d:: Int = 2 ) = random_matrix_product_state (ComplexF64, n, chi, d)
335+ function random_matrix_product_state (:: Type{T} , n:: Int , chi:: Int , d:: Int = 2 ) where T
336+ # chi ^ (n-1) * (variance^n)^2 == 1/d^n
337+ variance = d^ (- 1 / 2 ) * chi^ (- 1 / 2 + 1 / 2 n)
338+ tensors = Any[randn (T, d, chi) .* variance]
336339 physical_indices = collect (1 : n)
337340 virtual_indices_ket = collect (n+ 1 : 2 n- 1 )
338341 virtual_indices_bra = collect (2 n: 3 n- 2 )
339342 ixs_ket = [[physical_indices[1 ], virtual_indices_ket[1 ]]]
340343 ixs_bra = [[physical_indices[1 ], virtual_indices_bra[1 ]]]
341344 for i = 2 : n- 1
342- push! (tensors, randn (ComplexF64 , chi, d, chi))
345+ push! (tensors, randn (T , chi, d, chi) .* variance )
343346 push! (ixs_ket, [virtual_indices_ket[i- 1 ], physical_indices[i], virtual_indices_ket[i]])
344347 push! (ixs_bra, [virtual_indices_bra[i- 1 ], physical_indices[i], virtual_indices_bra[i]])
345348 end
346- push! (tensors, randn (ComplexF64 , chi, d))
349+ push! (tensors, randn (T , chi, d) .* variance )
347350 push! (ixs_ket, [virtual_indices_ket[n- 1 ], physical_indices[n]])
348351 push! (ixs_bra, [virtual_indices_bra[n- 1 ], physical_indices[n]])
349352 tensors, ixs = [tensors... , conj .(tensors)... ], [ixs_ket... , ixs_bra... ]
0 commit comments