How to do custom equation (non linear) regression?

18 次查看(过去 30 天)
I need to find some constant from data that usually is shown in log-log scale, the equation related to the data would be y=(a*x^b)/(26.1-x). How do I find the a and b constants?

采纳的回答

Star Strider
Star Strider 2023-4-12
There are several nonlinear parameter estimation function to choose from.
This uses fitnlm
yfcn = @(a,b,x) (a*x.^b)./(26.1-x);
T1 = readtable('experiment_data.xlsx');
x = T1.x;
y = T1.y;
B0 = rand(2,1);
mdl = fitnlm(x,y,@(b,x)yfcn(b(1),b(2),x), B0)
mdl =
Nonlinear regression model: y ~ yfcn(b1,b2,x) Estimated Coefficients: Estimate SE tStat pValue ________ _______ _______ _______ b1 0.059055 0.28207 0.20936 0.83475 b2 -1.6212 1.5325 -1.0578 0.29362 Number of observations: 75, Error degrees of freedom: 73 Root Mean Squared Error: 0.00156 R-Squared: -0.0655, Adjusted R-Squared -0.0801 F-statistic vs. zero model: 1.29, p-value = 0.282
xsrt = sort(x);
[ypred,yci] = predict(mdl,xsrt);
figure
plot(x, y, '.', 'DisplayName','Data')
grid
hold on
plot(xsrt, ypred, '-r', 'DisplayName','Function Fit')
plot(xsrt, yci, '--r', 'DisplayName','±95% Confidence Intervals')
hold off
legend('Location','best')
The model is a statistically poor fit to the data and does not describe the data well.
.

更多回答(2 个)

Davide Masiello
Davide Masiello 2023-4-12
Assume these are your experimental data
x = linspace(0,20,30);
y = rand(size(x))/3+(pi*x.^(sqrt(2)/2))./(26.1-x);
figure(1)
plot(x,y,'or')
To find a and b you can do the following.
modelfun = @(p,x) (p(1)*x.^p(2))./(26.1-x);
par = nlinfit(x,y,modelfun,[1 1]);
a = par(1)
a = 6.3320
b = par(2)
b = 0.4825
figure(2)
plot(x,y,'or',x,modelfun(par,x),'k')

Image Analyst
Image Analyst 2023-4-12
I usually use fitnlm (fit non-linear model). You can specify the equation you want to fit to. I'm attaching some examples of fitnlm.
  4 个评论
Image Analyst
Image Analyst 2023-4-12
Well, looks like you're going to use Star's solution, so I won't bother, unless you really want me to.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Linear and Nonlinear Regression 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by