Fitting data with integral function
이전 댓글 표시
I want to fit an ensemble (t,Y) of data by a function defined as an integral
$$
f(x)=\int{\frac{A}{1+A*x*y}dy,0,10}
$$
where A is a parameter to be fitted on the data.
I tried something as follows
% t and y are previously defined as two array of numbers
syms z
f = @(x,xdata,z) x(1)/(1+x(1)*xdata*z);
fit = @(x,xdata) int(f(x,xdata,z),[0, 10]);
x0 = [1];
[x,resnorm,~,exitflag,output] = lsqcurvefit(fit,x0,t,y);
Unfortunately, the software available in my university is in Japanese, and I can't understand the error message. From my understanding, at least two things are problematic
- I don't know if "int" can be used this way. For instance, I don't understand how to declare the variable on which the integral should be performed. I copied the MWE from https://fr.mathworks.com/help/symbolic/int.html
- I don't know if "fit" can indeed be used as a fitting function.
Thank you for your help
답변 (1개)
Try
f = @(x,xdata,z) x(1)./(1+x(1)*xdata*z);
fit = @(x,xdata) integral(@(z)f(x,xdata,z),0,10,'ArrayValued',true);
x0 = 1;
[x,resnorm,~,exitflag,output] = lsqcurvefit(fit,x0,t,y);
Don't use z as symbolic variable now since you use integral instead of int.
Best wishes
Torsten.
댓글 수: 2
Daniel Suchet
2017년 1월 20일
Walter Roberson
2017년 1월 20일
It sounds as if you might be using a version before R2012a. For versions before that you should see quadgk() or quadl() or quad()
카테고리
도움말 센터 및 File Exchange에서 Common Operations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!