0001
0002 times_glob = zeros(9,6);
0003 appr_glob = zeros(9,6);
0004
0005
0006
0007 d0t = 12;
0008 d0x = 10;
0009 dpx = 2;
0010
0011 a = 0;
0012 b = 1;
0013 h = (b-a)/(2^d0x+1);
0014
0015
0016 tol = 1e-6;
0017 eps = 1e-8;
0018
0019
0020 tranges = [0,0.5];
0021
0022
0023 Ax = tt_matrix(tt_qlaplace_dd(d0x*ones(1,dpx)));
0024 Ax = Ax/(h^2);
0025
0026 Ix = tt_matrix(tt_eye(2, dpx*d0x));
0027
0028 x = (a+h:h:b-h)';
0029
0030 z = (0:h:(b-a-2*h))';
0031 z = exp(-z.^2/(4*tranges(end)));
0032 z = tt_reshape(tt_tensor(z), 2*ones(1,d0x), eps);
0033
0034 C1l = tt_matrix(tt_qltrtoepl(core(z)));
0035 C1d = diag(diag(C1l));
0036 C1 = C1l+ C1l' - C1d;
0037 C1 = round(C1, eps)*h;
0038
0039
0040
0041 C = [];
0042 for i=1:dpx
0043 C = kron(C,C1);
0044 end;
0045
0046 u00 = tt_reshape(tt_tensor(sin(pi*x)), 2*ones(1,d0x), eps);
0047
0048
0049
0050
0051 x = tt_tensor(x);
0052 x = tt_reshape(x, 2*ones(d0x, 1), eps);
0053 e1 = tt_tensor(tt_ones(2, d0x));
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064 u00 = round(u00, eps);
0065
0066
0067 u00 = kron(u00,u00);
0068
0069
0070 u_ex = u00*exp(-2*pi^2*tranges(end));
0071
0072
0073
0074 spacial_rhs = tt_zeros(2,d0x*dpx);
0075
0076 u0 = u00;
0077
0078 ttimes = zeros(1, max(size(tranges))-1);
0079 resids = zeros(1, max(size(tranges))-1);
0080 for out_t=1:max(size(tranges))-1
0081 tau = (tranges(out_t+1)-tranges(out_t))/(2^d0t);
0082
0083 St = tt_shf(d0t); St = tt_matrix(St); St=St';
0084 It = tt_matrix(tt_eye(2,d0t));
0085 Grad_t = (It-St)/tau;
0086 Grad_t = round(Grad_t, eps);
0087
0088 KN_term = (It+St)*0.5;
0089 KN_term = round(KN_term, eps);
0090
0091 e1t = cell(d0t,1);
0092 for i=1:d0t
0093 e1t{i}=[1;0];
0094 end;
0095 e1t = tt_tensor(e1t);
0096 eet = tt_tensor(tt_ones(2,d0t));
0097
0098
0099
0100
0101 M = kron(Ix, Grad_t) + kron(Ax, KN_term);
0102 M = round(M, eps);
0103
0104
0105
0106
0107
0108
0109
0110
0111 U = kron(u0, eet);
0112
0113 tic;
0114 u0_rhs = u0/tau - (Ax*u0)*0.5;
0115 u0_rhs = round(u0_rhs, eps);
0116 rhs = kron(u0_rhs, e1t) + kron(spacial_rhs, eet);
0117 rhs = round(rhs, eps);
0118
0119
0120
0121 [U,swps] = dmrg_solve2(M, rhs, tol, 'x0', U, 'nswp', 20);
0122 ttimes(out_t) = toc;
0123
0124
0125 Mx = mvk3(M,U,tol);
0126
0127 resids(out_t) = norm(Mx-rhs)/norm(rhs);
0128
0129
0130
0131 ind = num2cell([1;2]*ones(1,U.d), 1);
0132
0133 for i=1:d0t
0134 ind{i+dpx*d0x}=2;
0135 end;
0136 u0 = U(ind);
0137 u0 = tt_reshape(u0, 2*ones(1,dpx*d0x));
0138
0139
0140
0141
0142
0143
0144 appr = norm(u0-u_ex)/norm(u_ex)
0145
0146 fprintf('Time range: [%g; %g], solve_time = %g, resid = %3.3e, swps: %d\n', tranges(out_t), tranges(out_t+1), ttimes(out_t), resids(out_t), swps);
0147
0148 end;
0149
0150 times_glob(d0t-5, d0x-5)=sum(ttimes);
0151 appr_glob(d0t-5, d0x-5)=appr;
0152
0153
0154