Error in using * in Non-linear regression
3 次查看(过去 30 天)
显示 更早的评论
Hello,
I would like to fit an equation in the form y=k*(x1^a)*(x2^b)*(x3^c), where I know the data of x1,x2,x3 and y.
I have to determine the coefficients k, a, b, and c.
I am using the following code:
% Fit a nonlinear regression model.
modelfun = @(b,x) b(1)*[x(:,1).^b(2)] * [x(:,2).^b(3)] * [x(:,3).^b(4)];
beta0 = [0.2 0.33 0.33 0.166];
mdl = fitnlm(X,y,modelfun,beta0)
The above code is giving an error saying:
Error in y_vs_x (line 29)
mdl = fitnlm(X,y,modelfun,beta0)
Caused by:
Error using *
Inner matrix dimensions must agree.
If I replace the second and third asterisk (*) by plus (+) then the code looks as below and is working:
modelfun = @(b,x) b(1)*[x(:,1).^b(2)] + [x(:,2).^b(3)] + [x(:,3).^b(4)];
Can anyone help me where I am going wrong?
Thanks in advacne!
vidyadhar
0 个评论
采纳的回答
更多回答(1 个)
Walter Roberson
2019-3-5
Take the log of both sides.
log(y) = log(cons) + a * log(x1) + b * log(x2) + c * log(x3)
This is a linear system, so you can construct
v = [log(x1(:)), log(x2(:)), log(x3(:)), ones(length(x1),1)] \ log(y(:))
and then a = v(1), b = v(2), c = v(3), d = exp(v(4))
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Nonlinear Regression 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!