0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 function [Z,Z2,Z3] = TEBD_ops(X,operand,Y,alpha,X2,Y2,alpha2,X3,Y3)
0036
0037
0038 if (nargin == 2)
0039 if strcmp(operand,'norm');
0040 if ~iscell(X);
0041 Z = full(norm(X,'fro'));
0042 else
0043 Z = 0;
0044 for p = 1:length(X); Z = Z + norm(X{p},'fro')^2;end;
0045 Z = sqrt(Z);
0046 end
0047
0048 elseif strcmp(operand,'zeros')
0049 if ~iscell(X)
0050 Z = zeros(size(X,1),size(X,2));
0051 else
0052 Z = cell(size(X));
0053 for p = 1:length(X)
0054 Z{p} = zeros(size(X{p},1),size(X{p},2));
0055 end
0056 end
0057
0058
0059 elseif strcmp(operand,'eye')
0060 if ~iscell(X)
0061 Z = eye(size(X,1),size(X,2));
0062 else
0063 Z = cell(size(X));
0064 for p = 1:length(X)
0065 Z{p} = eye(size(X{p},1),size(X{p},2));
0066 end
0067 end
0068 elseif strcmp(operand,'ones')
0069 if ~iscell(X)
0070 Z = ones(size(X,1),size(X,2));
0071 else
0072 Z = cell(size(X));
0073 for p = 1:length(X)
0074 Z{p} = ones(size(X{p},1),size(X{p},2));
0075 end
0076 end
0077 end
0078 elseif (nargin == 3)
0079 if strcmp(operand,'+') || strcmp(operand,'-') || ...
0080 strcmp(operand,'/') || strcmp(operand,'./') || ...
0081 strcmp(operand,'*') || strcmp(operand,'.*') || ...
0082 strcmp(operand,'.^')
0083 if (~iscell(X) && ~iscell(Y))
0084 eval(['Z = X',operand,'Y;']);
0085 elseif (iscell(X) && iscell(Y))
0086 Z = cell(size(X));
0087 for p = 1:length(X)
0088 if (size(X{p},2) == 1) && (size(Y{p},2) == 1) && ...
0089 (strcmp(operand,'*') || strcmp(operand,'/'))
0090 eval(['Z{p} = X{p}.',operand,'Y{p};']);
0091 else
0092 eval(['Z{p} = X{p} ',operand,'Y{p};']);
0093 end;
0094 end;
0095 elseif (iscell(X) && ~iscell(Y))
0096 Z = cell(size(X));
0097 for p = 1:length(X);
0098 eval(['Z{p} = X{p}',operand,'Y;']);
0099 end
0100 elseif (~iscell(X) && iscell(Y))
0101 Z = cell(size(Y));
0102 for p = 1:length(Y);
0103 eval(['Z{p} = X',operand,'Y{p};']);
0104 end
0105 end
0106 elseif strcmp(operand,'diffnorm')
0107 if ~iscell(X);
0108 Z = full(norm(X-Y,'fro'));
0109 else
0110 Z = 0;
0111 for p = 1:length(X); Z = Z + norm(X{p}-Y{p},'fro')^2;end;
0112 Z = sqrt(Z);
0113 end
0114 else
0115 error([operand,' is not available, check input arguments']);
0116 end
0117 elseif (nargin == 4)
0118 if strcmp(operand,'+') || strcmp(operand,'-')
0119 if ~iscell(X) && ~iscell(Y)
0120 eval(['Z = X',operand,'alpha*Y;']);
0121 elseif (iscell(X) && iscell(Y))
0122 Z = cell(size(X));
0123 for p = 1:length(X)
0124 if (~iscell(X{p}) )
0125 eval(['Z{p} = X{p}',operand,'alpha*Y{p};']);
0126 else
0127 Z{p} = TEBD_ops(X{p},operand,Y{p},alpha);
0128 end
0129 end
0130 else
0131 error('X, Y are different objects');
0132 end
0133 elseif strcmp(operand,'calc2')
0134 if (~iscell(X) )
0135 Z = -X+Y+alpha;
0136 else
0137 Z = cell(size(X));
0138 for p = 1:length(X)
0139 Z{p} = -X{p}+Y{p}+alpha{p};
0140 end;
0141 end
0142
0143 elseif strcmp(operand,'(X-Y)/alpha')
0144 if (~iscell(X) )
0145 Z = (X-Y)/alpha;
0146 else
0147 Z = cell(size(X));
0148 for p = 1:length(X)
0149 Z{p} = (X{p}-Y{p})/alpha;
0150 end;
0151 end
0152 elseif strcmp(operand,'(X+Y*alpha)/alpha')
0153 if (~iscell(X) )
0154 Z2 = (X+Y*alpha);
0155 Z = Z2/alpha;
0156 else
0157 Z = cell(size(X));
0158 Z2 = cell(size(X));
0159 for p = 1:length(X)
0160 Z2{p} = (X{p}+Y{p}*alpha);
0161 Z{p} = Z2{p}/alpha;
0162 end;
0163 end
0164 elseif strcmp(operand,'X-Y-alpha')
0165 if (~iscell(X) )
0166 Z = (X-Y-alpha);
0167 else
0168 Z = cell(size(X));
0169 for p = 1:length(X)
0170 Z{p} = (X{p}-Y{p}-alpha{p});
0171 end;
0172 end
0173 else
0174 error([operand,' is not available']);
0175 end
0176 elseif (nargin == 5)
0177 if strcmp(operand,'calc3')
0178 if (~iscell(X) )
0179 Z = X-((Y-X2)*alpha);
0180 else
0181 Z = cell(size(X));
0182 for p = 1:length(X)
0183 Z{p} = X{p}-((Y{p}-X2{p})*alpha);
0184 end;
0185 end
0186
0187 elseif strcmp(operand,'calc5')
0188 if (~iscell(X) )
0189 Z = X-((Y-X2)*alpha);
0190 else
0191 Z = cell(size(X));
0192 for p = 1:length(X)
0193 Z{p} = X{p}-((Y{p}-X2{p})*alpha);
0194 end;
0195 end
0196
0197 elseif strcmp(operand,'calc7')
0198 if (~iscell(X) )
0199 Z = (1-Y/alpha)*X+(Y/alpha)*X2;
0200 else
0201 Z = cell(size(X));
0202 for p = 1:length(X)
0203 Z{p} = (1-Y/alpha)*X{p}+(Y/alpha)*X2{p};
0204 end;
0205 end
0206
0207 elseif strcmp(operand,'X-alpha*(Y+X2)')
0208 if (~iscell(X) )
0209 Z = X-alpha*(Y+X2);
0210 else
0211 Z = cell(size(X));
0212 for p = 1:length(X)
0213 Z{p} = X{p}-alpha*(Y{p}+X2{p});
0214 end;
0215 end
0216
0217 elseif strcmp(operand,'(X-Y)/alpha+X2')
0218 if (~iscell(X) )
0219 Z = (X-Y)/alpha;
0220 Z2 = Z+X2;
0221 else
0222 Z = cell(size(X));
0223 Z2 = cell(size(X));
0224 for p = 1:length(X)
0225 Z{p} = (X{p}-Y{p})/alpha;
0226 Z2{p} = Z{p}+X2{p};
0227 end;
0228 end
0229
0230 end
0231
0232
0233 elseif (nargin == 6)
0234 if strcmp(operand,'calc1')
0235 if (~iscell(X) )
0236 Z = (((X-Y)/alpha) + X2-Y2);
0237 else
0238 Z = cell(size(X));
0239 for p = 1:length(X)
0240 Z{p} = (((X{p}-Y{p})/alpha)+X2{p}-Y2{p});
0241 end;
0242 end
0243 elseif strcmp(operand,'calc4')
0244 if (~iscell(X) )
0245 Z = (X/Y)+(((X2-Y2)/alpha));
0246 else
0247 Z = cell(size(X));
0248 for p = 1:length(X)
0249 Z{p} = (X{p}/Y)+(((X2{p}-Y2{p})/alpha));
0250 end;
0251 end
0252 elseif strcmp(operand,'(X-Y)/alpha+X2-Y2')
0253 if (~iscell(X) )
0254 Z = (X-Y)/alpha+X2;
0255 Z2 = Z-Y2;
0256 else
0257 Z = cell(size(X));
0258 Z2 = cell(size(X));
0259 for p = 1:length(X)
0260 Z{p} = (X{p}-Y{p})/alpha++X2{p};
0261 Z2{p} = Z{p}-Y2{p};
0262 end;
0263 end
0264 end
0265 elseif (nargin == 7)
0266 if strcmp(operand,'calc6')
0267 if (~iscell(X) )
0268 Z = ((X*(1-Y/alpha))+((X2*Y/alpha)-(Y2*alpha2)));
0269 else
0270 Z = cell(size(X));
0271 for p = 1:length(X)
0272 Z{p} = ((X{p}*(1-Y/alpha))+((X2{p}*Y/alpha)-(Y2{p}*alpha2)));
0273 end;
0274 end
0275 elseif strcmp(operand,'[(X-Y)/alpha]/alpha2-X2-Y2')
0276 if (~iscell(X) )
0277 Z = (X-Y)/alpha;
0278 Z2 = Z/alpha2;
0279 Z3 = Z2-X2-Y2;
0280 else
0281 Z = cell(size(X));
0282 Z2 = cell(size(X));
0283 Z3 = cell(size(X));
0284 for p = 1:length(X)
0285 Z{p} = (X{p}-Y{p})/alpha;
0286 Z2{p} = Z{p}/alpha2;
0287 Z3{p} = Z2{p}-X2{p}-Y2{p};
0288 end;
0289 end
0290 end
0291 elseif (nargin == 9)
0292 if strcmp(operand,'[(X-Y)/alpha +(X2-Y2)*alpha2]/alpha2-X3-Y3')
0293 if (~iscell(X) )
0294 Z = (X-Y)/alpha +(X2-Y2)*alpha2;
0295 Z2 = Z/alpha2;
0296 Z3 = Z2-X3-Y3;
0297 else
0298 Z = cell(size(X));
0299 Z2 = cell(size(X));
0300 Z3 = cell(size(X));
0301 for p = 1:length(X)
0302 Z{p} = (X{p}-Y{p})/alpha +(X2{p}-Y2{p})*alpha2;
0303 Z2{p} = Z{p}/alpha2;
0304 Z3{p} = Z2{p}-X3{p}-Y3{p};
0305 end;
0306 end
0307
0308 end
0309 end
0310