1 function [res,nres] = rb_residual_norm(model, rd, rbsim)
2 % RB_RESIDUAL_NORM Calculate the residual norm of the rb solution rbsim
4 % Dominik Wittwar, 2016
7 A_coeff = model.A_coeff();
8 B_coeff = model.B_coeff();
9 C_coeff = model.C_coeff();
10 E_coeff = model.E_coeff();
11 Q_coeff = model.Q_coeff();
12 R_coeff = model.R_coeff();
14 % load reduced solution and estim
19 % Directly assemble the small R and Q matrices:
20 Q = lincomb_sequence(rd.Q_comp, Q_coeff);
21 R = lincomb_sequence(rd.R_comp, R_coeff);
22 BN = lincomb_sequence(rd.B_comp,B_coeff);
28 for i=1:length(C_coeff)
29 for j = 1:length(C_coeff)
30 CCT = CCT + estim.CCT{i,j}*C_coeff(i)*C_coeff(j);
35 for i = 1:length(E_coeff)
36 for j = 1:length(A_coeff)
37 WTEATW = WTEATW + estim.WTEATW{i,j}*E_coeff(i)*A_coeff(j);
42 for i = 1:length(E_coeff)
43 for j = 1:length(E_coeff)
44 WTEETW = WTEETW + estim.WTEETW{i,j}*E_coeff(i)*E_coeff(j);
49 for i = 1:length(C_coeff)
50 for j = 1:length(A_coeff)
51 CATW = CATW + estim.CATW{i,j}*C_coeff(i)*A_coeff(j);
56 for i = 1:length(A_coeff)
57 for j = 1:length(A_coeff)
58 WTAATW = WTAATW + estim.WTAATW{i,j}*A_coeff(i)*A_coeff(j);
63 for i = 1:length(E_coeff)
64 for j = 1:length(C_coeff)
65 WTECT = WTECT + estim.WTECT{i,j}*E_coeff(i)*C_coeff(j);
69 temp = trace((Q*CCT)^2);
70 res = temp + trace((PN*WTEETW)*(PN*WTEETW)) -2*trace(Q*WTECT'*PN*WTECT) + ...
71 -2*trace(PN*WTEATW*PN*WTEATW
') + 2*trace(BN*(R_P\BN')*PN*WTEATW
'*PN*WTEATW*PN) + ...
72 +2*trace(Q*CATW*PN*CATW') + trace(PN*WTAATW*PN*WTAATW) + ...
73 -2*trace(Q*CATW*PN*BN*(R_P\BN
')*PN*CATW') + ...
74 -2*trace(PN*WTAATW*PN*BN*(R_P\BN
')*PN*WTAATW) + ...
75 +trace(BN*(R_P\BN')*PN*WTAATW*PN*BN*(R_P\BN
')*PN*WTAATW*PN);
78 nres = res/sqrt(temp);