0001 function tensor = computeMixedVolumeTensor(hMatrix, handleH, dim, ...
0002 incidenceMatrix, verbose)
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 if ~exist('verbose', 'var') || isempty(verbose)
0028 verbose = 0;
0029 end
0030
0031 if verbose
0032 disp('Computing mixed volumes..');
0033 fprintf('......');
0034 end
0035 switch dim
0036 case 1
0037 tensor = zeros([1 size(hMatrix, 1)]);
0038 for iSe = 1:size(hMatrix, 1)
0039 tensor(iSe) = handleH(hMatrix(iSe, :)');
0040 end
0041
0042 case 2
0043 tensor = nan([size(hMatrix, 1) size(hMatrix, 1)]);
0044 for iSe = 1:size(hMatrix, 1)
0045 tensor(iSe,iSe) = handleH(hMatrix(iSe, :)');
0046 end
0047
0048
0049
0050
0051
0052
0053 for iSe = 1:size(hMatrix, 1)
0054 for jSe = (iSe+1):size(hMatrix, 1)
0055 if incidenceMatrix(iSe, jSe) == 0
0056 continue
0057 end
0058 tensor(iSe,jSe) = (handleH(...
0059 hMatrix(iSe, :)' + hMatrix(jSe, :)')...
0060 - tensor(iSe,iSe) ...
0061 - tensor(jSe,jSe));
0062 end
0063 end
0064 case 3
0065
0066 tensor = nan([size(hMatrix, 1), ...
0067 size(hMatrix, 1), ...
0068 size(hMatrix, 1)]);
0069
0070
0071
0072 for iSe = 1:size(hMatrix, 1)
0073 if verbose
0074 fprintf('\b\b\b\b\b\b%5.1f%%', ...
0075 (iSe/size(hMatrix, 1))*100);
0076 end
0077 tensor(iSe, iSe, iSe) = handleH(hMatrix(iSe, :)');
0078 end
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091 for iSe = 1:size(hMatrix, 1)
0092 if verbose
0093 fprintf('\b\b\b\b\b\b%5.1f%%', ...
0094 (iSe/size(hMatrix, 1))*100);
0095 end
0096 for jSe = (iSe+1):size(hMatrix, 1)
0097 if incidenceMatrix(iSe, jSe) == 0
0098 continue
0099 end
0100 V_AB = handleH(hMatrix(iSe,:)' + hMatrix(jSe,:)');
0101 V_A2B = handleH(hMatrix(iSe,:)' + 2*hMatrix(jSe,:)');
0102 tensor(iSe,jSe,jSe) = (V_A2B - 2*V_AB ...
0103 + tensor(iSe,iSe,iSe) ...
0104 -6*tensor(jSe,jSe,jSe) ...
0105 )/2;
0106 tensor(iSe,iSe,jSe) = (V_AB ...
0107 - tensor(iSe,iSe,iSe) ...
0108 - tensor(jSe,jSe,jSe) ...
0109 - tensor(iSe,jSe,jSe) ...
0110 );
0111 end
0112 end
0113
0114
0115
0116
0117
0118
0119
0120 for iSe = 1:size(hMatrix, 1)
0121 if verbose
0122 fprintf('\b\b\b\b\b\b%5.1f%%', ...
0123 (iSe/size(hMatrix, 1))*100);
0124 end
0125 for jSe = (iSe+1):size(hMatrix, 1)
0126 if incidenceMatrix(iSe, jSe) == 0
0127 continue
0128 end
0129 for c = (jSe+1):size(hMatrix, 1)
0130 if incidenceMatrix(iSe, c) == 0 || ...
0131 incidenceMatrix(jSe, c) == 0
0132 continue
0133 end
0134 V_ABC = handleH(hMatrix(iSe,:)' + hMatrix(jSe,:)' + hMatrix(c,:)');
0135 tensor(iSe,jSe,c) = (V_ABC ...
0136 -tensor(iSe,iSe,iSe) ...
0137 -tensor(jSe,jSe,jSe) ...
0138 -tensor(c,c,c) ...
0139 -tensor(iSe,jSe,jSe) ...
0140 -tensor(iSe,c,c) ...
0141 -tensor(jSe,c,c) ...
0142 -tensor(iSe,iSe,jSe) ...
0143 -tensor(iSe,iSe,c) ...
0144 -tensor(jSe,jSe,c) ...
0145 );
0146 end
0147 end
0148 end
0149 end
0150 if verbose, fprintf('\b\b\b\b\b\b');end
0151 end