diff --git a/functions/CAcorrelationMatrix/correlationMatrixCA.m b/functions/CAcorrelationMatrix/correlationMatrixCA.m
new file mode 100644
index 0000000000000000000000000000000000000000..ae4a3ee9d11b9f2e466639d530bd0b08368309c1
--- /dev/null
+++ b/functions/CAcorrelationMatrix/correlationMatrixCA.m
@@ -0,0 +1,215 @@
+function correlationMatrixCA(rocket)
+arguments
+    rocket      Rocket = Rocket.empty;
+end
+%% MISSION FILE
+% PATH
+currentPath = fileparts(mfilename("fullpath"));
+dissilePath = fullfile(currentPath, '..', '..', 'dissileMatcom');
+commonPath = trimPath(fullfile(currentPath, '..', 'common'));
+addpath(genpath(currentPath));
+addpath(genpath(dissilePath));
+addpath(genpath(commonPath));
+
+if ~contains(path, currentPath), addpath(genpath(currentPath)); end
+if ~contains(path, commonPath), addpath(genpath(commonPath)); end
+if ~contains(path, dissilePath), addpath(genpath(dissilePath)); end
+
+% LOAD DATA / SETTINGS
+mission = Mission(true);
+if isempty(rocket), rocket  = Rocket(mission); end
+
+%% STATES
+CoeffsCA = squeeze(rocket.coefficients.total(1, :, :, :, :, :, 1));
+% Find indeces for alpha = 0, beta = 0:
+iAlpha = find(rocket.coefficients.state.alphas == 0); 
+iBeta = find(rocket.coefficients.state.betas == 0);
+
+if isempty(iAlpha) 
+    error('State.Alphas must contain 0.');
+end
+
+if isempty(iBeta) 
+    error('State.Betas must contain 0.');
+end
+
+CA = squeeze(CoeffsCA(iAlpha,:,iBeta,:,:));
+
+mach = rocket.coefficients.state.machs; 
+alt = rocket.coefficients.state.altitudes;
+hProt = rocket.coefficients.state.hprot;
+
+nMach = length(mach); 
+nAlt = length(alt); 
+nHProt = length(hProt);
+
+%% Body Alone:
+CABody = CA(:,:,1);
+
+mAlt = floor(nAlt/2); % mean index in altitude array
+
+pMBody = polyfit(mach,CABody(:,mAlt),6); % interpolation wrt mach
+
+% Add dependence on altitude:
+% Create variables grids:
+[altGrid, machGrid] = meshgrid(alt,mach);
+
+% Interpolating function:
+interpCABody = @(mach,alt,pMBody,pABody) polyval(pMBody,mach) + polyval(pABody,alt);
+%%
+% Cost function to optimize pABody:
+costFun1 = @(x) norm(CABody(:) - interpCABody(machGrid(:),altGrid(:),pMBody,x));
+
+x0 = [0;0]; % Initial Guess
+
+[pABody,~] = fminsearch(costFun1,x0);
+
+% Compute error:
+CABodyInterp = interpCABody(machGrid,altGrid,pMBody,pABody);
+errorBody = (CABodyInterp'-CABody');
+errMaxBody = max(errorBody(:));
+
+%% Protuberance Alone:
+CAProt = CA - CABody;
+
+% Degrees of polynomials:
+degM = 5;  degHP = 2;
+coeffsM = zeros(nHProt, degM+1); coeffsHP = zeros(degM + 1,degHP + 1);
+
+% Interpolation wrt mach:
+CAFixAlt = CAProt(:,mAlt,:);
+
+for iHP = 1:nHProt
+    coeffsM(iHP,:) = polyfit(mach,squeeze(CAFixAlt(:,iHP)),degM);
+end
+
+% Interpolation wrt hProt:
+for iDM = 1:degM+1
+    coeffsHP(iDM,:) = polyfit(hProt,squeeze(coeffsM(:,iDM)),degHP);
+end
+
+% Add dependence on altitude:
+x0 = 0; % Initial guess
+
+opts = optimset('TolFun',1e-5,'Display','iter');
+
+pAProt = fminsearch(@(x) costFun2(x,coeffsHP,mach,alt,hProt,CAProt),x0,opts);
+
+[~,errMaxProt,CAProtInterp] = costFun2(pAProt,coeffsHP,mach,alt,hProt,CAProt);
+
+%% Total CA:
+CAInterp = CABodyInterp + CAProtInterp;
+
+errMax = max(abs(CA(:) - CAInterp(:)));
+normErr = norm(CA(:) - CAInterp(:));
+
+%% OUTPUT
+fprintf('\n\n******************* CA ***************************\n')
+fprintf('Max error on only-body matrix is        %2.4f\n', errMaxBody)
+fprintf('Max error on protuberances matrix is    %2.4f\n', errMaxProt)
+fprintf('Max error on CA is                      %2.4f\n', errMax)
+fprintf('Norm of the error on CA is              %2.4f\n\n', normErr)
+
+%% Group coefficients:
+% CABody = mb0 + mb1*M + mb2*M^2 ... + mb6*M^6 + ab0 + ab1*A =
+%          p0 + p1*M + p2*M^2 ... + p6*M^6 + p7*A
+
+% CAProt = mp0 + ... + mp5*M^5 + ap1*A with mpi = hi0 + hi1*h + hi2*h^2
+% CAProt = h00 + h10*M + h20*M^2 + h30*M^3....+h50*M^5 + ap1*A
+
+% CA = (mb0 + ab0 + h00) + (mb1 + h10)*M +...+(mb5+h50)*M^5 + mb6*M^6 +
+%       hi1*h*M^i + hi2*h^2*M^i (i = 0,...,5) + (ab1 + ap1)*A
+
+
+
+% syms M A H 
+% 
+% CABM = sum(pMBody(:).*M.^[length(pMBody)-1:-1:0]');
+% 
+% CABA = sum(pABody(:).*A.^[length(pABody)-1:-1:0]');
+% 
+% 
+% for l = 1:size(coeffsHP,1)
+% 
+%     cTemp = coeffsHP(l,:);
+%     CAPM(l) = sum(cTemp(:).*H.^[length(cTemp)-1:-1:0]');
+% 
+% end
+% 
+% CAPMH = sum(CAPM(:).*M.^[length(CAPM)-1:-1:0]');
+% 
+% CAP = CAPMH + sum(pAProt(:).*A.^[length(pAProt)-1:-1:0]');
+% 
+% symCA = CAP + CABA + CABM;
+% 
+% myFunCA = matlabFunction(symCA,'File','myFunCA','Vars',[M,A,H]);
+% 
+% [M,A,H] = ndgrid(mach,alt,hProt);
+
+%% COEFFS STRUCT
+coeffs.n000 = (pMBody(7) + pABody(2) + coeffsHP(6,3));
+coeffs.n100 = (pMBody(6) + coeffsHP(5,3));
+coeffs.n200 = (pMBody(5) + coeffsHP(4,3));
+coeffs.n300 = (pMBody(4) + coeffsHP(3,3)); 
+coeffs.n400 = (pMBody(3) + coeffsHP(2,3));
+coeffs.n500 = (pMBody(2) + coeffsHP(1,3));
+coeffs.n600 = pMBody(1);
+coeffs.n010 = coeffsHP(6,2);
+coeffs.n020 = coeffsHP(6,1);
+coeffs.n110 = coeffsHP(5,2);
+coeffs.n120 = coeffsHP(5,1);
+coeffs.n210 = coeffsHP(4,2);
+coeffs.n220 = coeffsHP(4,1);
+coeffs.n310 = coeffsHP(3,2);
+coeffs.n320 = coeffsHP(3,1);
+coeffs.n410 = coeffsHP(2,2);
+coeffs.n420 = coeffsHP(2,1);
+coeffs.n510 = coeffsHP(1,2);
+coeffs.n520 = coeffsHP(1,1);
+coeffs.n001 = (pABody(1) + pAProt(1));
+
+%% CREATING OUTPUT
+outputName = 'CAinterpCoeffs';
+outputPath = fullfile(mission.dataPath, outputName);
+output = struct();
+
+if ~exist(outputPath, 'file')
+    save(outputPath, '-struct', 'output')
+else
+    save(outputPath, '-struct', 'output', '-append')
+end
+
+output = coeffs;
+
+save(outputPath, '-struct', 'output', '-append')
+
+%% FUNCTIONS
+% costFun2
+function [J,errMax,CAProtInterp] = costFun2(x,coeffsHP,mach,alt,hProt,CAProt)
+    CAProtInterp = interpCAProt(mach,alt,hProt,coeffsHP,x);
+    J = norm(abs(CAProt(:) - CAProtInterp(:)));
+    errMax = max(abs(CAProt(:) - CAProtInterp(:)));
+end
+
+% interpCAProt
+function CAProtInterp = interpCAProt(mach,alt,hProt,coeffsHP,pAProt)
+    nMach = length(mach); nAlt = length(alt); nHProt = length(hProt);
+    CAProtInterp = zeros(nMach,nAlt,nHProt);
+    for i = 1:nMach
+        for j = 1:nAlt
+            for k = 1:nHProt
+                
+                coeffsM = zeros(1,size(coeffsHP,1));
+                for l = 1:size(coeffsHP,1)
+                    
+                    coeffsM(l) = polyval(coeffsHP(l,:),hProt(k));
+                    
+                end
+                
+                CAProtInterp(i,j,k) = polyval(coeffsM,mach(i)) + pAProt*alt(j);
+                
+            end
+        end
+    end
+end
+end % end of main
\ No newline at end of file
diff --git a/functions/CAcorrelationMatrix/myFunCA.m b/functions/CAcorrelationMatrix/myFunCA.m
new file mode 100644
index 0000000000000000000000000000000000000000..fd011319982c245818fa12114401ac7f20cd3a9e
--- /dev/null
+++ b/functions/CAcorrelationMatrix/myFunCA.m
@@ -0,0 +1,22 @@
+function myCA = myFunCA(M,A,X,coeffs)
+% Function to compute the CA through a correlation.
+% INPUT:    
+%       M       Mach Number
+%       A       Altitude [m]
+%       X       Aerobrakes extension [m]
+%       coeffs  struct that contains the coefficients 
+% 
+
+myCA =  coeffs.n000 + ...
+        coeffs.n100*M + coeffs.n200*M^2 + ...
+        coeffs.n300*M^3 + coeffs.n400*M^4 + ...
+        coeffs.n500*M^5 + coeffs.n600*M^6 + ...
+        coeffs.n010*X + coeffs.n020*X^2 + ...
+        coeffs.n110*X*M + coeffs.n120*X^2*M + ...
+        coeffs.n210*X*M^2 + coeffs.n220*X^2*M^2 + ...
+        coeffs.n310*X*M^3 + coeffs.n320*X^2*M^3 + ...
+        coeffs.n410*X*M^4 + coeffs.n420*X^2*M^4 + ...
+        coeffs.n510*X*M^5 + coeffs.n520*X^2*M^5 + ...
+        coeffs.n001*A;
+
+end
\ No newline at end of file