Hello,
I have the following code, which produces a surface of my data. (Example xlsx file attached). Certain coeffs are already constrained. My question is, how do I constrain the fit so that H(r,eta) does not go above 1? Also, even though I do not have data past eta/eta_c of around 0.15, how do I extend my fitted surface to eta/eta_c = 0? At 0, the function should equal 1 since the C00 coefficient is set to 1.
close all%% Load Data
num=xlsread('C:example.xlsx',1,'A2:H18110');eta_c= 0.6452;r = num(:,4);eta = num(:,3);H = num(:,8);%% Set-up for fit
[I,J]=ndgrid(0:5); Terms= compose('C%u%u*r^%u*eta^%u', I(:),J(:),I(:),J(:)) ; Terms=strjoin(Terms,' + ');independent={'r','eta'};dependent='H';knownCoeffs= {'C00','C10','C20','C30','C40', 'C01','C11','C21','C31','C41'};knownVals=num2cell([ [1 , 0 , 0 , 0 , 0 ], [ 8 , -6 , 0 , 0.5 , 0 ]*eta_c ]); allCoeffs=compose('C%u%u',I(:),J(:));[unknownCoeffs,include]=setdiff(allCoeffs,knownCoeffs);ft=fittype(Terms,'independent',independent, 'dependent', dependent,... 'coefficients', unknownCoeffs,'problem', knownCoeffs);%% Fit and display
fobj = fit([r,eta/eta_c],H,ft,'problem',knownVals);hp=plot(fobj,[r,eta/eta_c],H); set(hp(1),'FaceAlpha',0.5); set(hp(2),'MarkerFaceColor','r'); xlabel 'r', ylabel '\eta/\eta_c' zlabel 'H(r,\eta)' zlim([0 1.1]); ylim([0 0.55]);
Best Answer