# -------------------------- initial_guess = tt.ones(operator.col_dims, [1] * order, ranks=tt_rank).ortho_right() # solve Markovian master equation in TT format # -------------------------------------------- print('TT approach:\n') solution = ode.trapezoidal_rule(operator, initial_distribution, initial_guess, step_sizes) # operator in QTT format # ---------------------- operator = TT.tt2qtt(operator, qtt_modes, qtt_modes, threshold=threshold) # initial distribution in QTT format # ---------------------------------- initial_distribution = tt.zeros(operator.col_dims, [1] * operator.order) for p in range(initial_distribution.order): initial_distribution.cores[p][0, 0, 0, 0] = 1 # initial guess in QTT format # --------------------------- initial_guess = tt.ones(operator.col_dims, [1] * operator.order, ranks=qtt_rank).ortho_right() # solve Markovian master equation in QTT format
operator = mdl.two_step_destruction( 1, 2, 1, m).tt2qtt([[2] * m] + [[2] * (m + 1)] + [[2] * m] + [[2] * m], [[2] * m] + [[2] * (m + 1)] + [[2] * m] + [[2] * m], threshold=10**-14) # initial distribution in TT format and convert to QTT format # ----------------------------------------------------------- initial_distribution = tt.zeros([2**m, 2**(m + 1), 2**m, 2**m], [1] * 4) initial_distribution.cores[0][0, -1, 0, 0] = 1 initial_distribution.cores[1][0, -2, 0, 0] = 1 initial_distribution.cores[2][0, 0, 0, 0] = 1 initial_distribution.cores[3][0, 0, 0, 0] = 1 initial_distribution = TT.tt2qtt( initial_distribution, [[2] * m] + [[2] * (m + 1)] + [[2] * m] + [[2] * m], [[1] * m] + [[1] * (m + 1)] + [[1] * m] + [[1] * m], threshold=0) # initial guess in QTT format # --------------------------- initial_guess = tt.uniform([2] * (4 * m + 1), ranks=qtt_rank).ortho_right() # solve Markovian master equation in QTT format # --------------------------------------------- solution = ode.implicit_euler(operator, initial_distribution, initial_guess, step_sizes, tt_solver='mals',