Problem in defining the fit type function for curve fitting tool
Ältere Kommentare anzeigen
I have defined a custom function for use in curve fitting toolbox. In my defined function, I need to call another function "kkrebook2" and its inputs are vectors. But for defining a fit type function we have a for loop of our "nu" value and everything is defined in that for loop which means the input for "kkrebook2" will be elements of vector of "nu". So, it doesn't work when I try to fit because it is getting elements instead of vectors.
But I do want to pass a vector of "nu" to "kkrebook2" in my fit type function. Could you please let me know how can I write my fit type function such that I can call "kkrebook2" in my fit type function properly?
This is related part of my code for the defined fit type function for curve fitting and the "kkrebook2" function.
Thank you in advance!
function p = SCR(nu,numGaussians,a,sigma)
for i = 1:length(nu)
for k = 1 : numGaussians
if k==1
b = Start;
else
b = Start+(24E6 * (k-1));
end
thisGaussian(i) = a.*exp(-((nu(i)-b).^2)/(2.*(sigma.^2)));
% Add into accumulator array:
gaussEqn1(i) = gaussEqn1(i) + thisGaussian(i);
d(i)= gaussEqn1(i);
end
Imag(i)=(-log(d(i))*c)./(nu(i));
Real(i)=kkrebook2(nu(i),Imag(i),0);
f(i)=(-r1+r2*exp(-(d(i)).*exp(-1i*Real(i)));
g(i)=(1-r1*r2*exp(-(d(i))).*exp(-1i*Real(i)));
p(i)= abs(f(i)./g(i));
end
end

2 Kommentare
Matt J
am 24 Mai 2022
There is no variable called 'x' in the code that you've shown.
Antworten (1)
fittype( @(nu,numGaussians,a,sigma) SCR(nu,numGaussians,a,sigma),'independent','nu')
10 Kommentare
Matt J
am 24 Mai 2022
Without 42nsC.mat, I couldn't test this, but I think it should work.
fo = fitoptions('Method','NonlinearLeastSquares','MaxFunEvals',5000,'MaxIter',1000,...
'StartPoint',[0.3, 3.4E6],'Lower', [0 1E6],'Upper',[1.6 8E6]);
ft = fittype('SCR(nu,numGaussians,a,sigma)','independent','nu', 'dependent', 'p',...
'coefficients',{'a','sigma'},'problem','numGaussians','options',fo);
[myfittype,gomyfit] = fit( nu, p, ft, fo)
plot(myfittype, nu, p)
I am not sure but I think what should be changed is something in my fit type custom function when I call "kkrebook2" rather than the fit code.
No, the error messages you've posted don't even mention your custom function.
It's saying that, if you're going to use an anonymous function, the argument order must have the coefficients first,
@(a,sigma,numGaussians,nu) SCR(nu,numGaussians,a,sigma)
See also,
Matt J
am 25 Mai 2022
Thanks. I just try that. It still says the same error.
I don't get any error messages when I run the code.
Shaily_T
am 25 Mai 2022
Matt J
am 25 Mai 2022
Yes, running the Sfit that you have attached throws no error messages.
Shaily_T
am 26 Mai 2022
Here is what I see.

Whether or not this is what you expect is a separate issue from your posted question. Your post is asking how to make fit() invoke your model function and receiving ouput of the proper size. It now appears to be doing that, since no error messages are thrown.
As for why you are not seeing fit results that you expect, there are a number of possible reasons. Your start point could be bad. Or, your model and data may be inconsistent with one another.
Shaily_T
am 26 Mai 2022
Kategorien
Mehr zu Fit Postprocessing finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
