How can I choose powers of each variable separately and get it's value?
2 次查看(过去 30 天)
显示 更早的评论
Hi every one I solved a equation leading to function like this f=x^a*y^b*z^c; but I don't know a,b and c.I want matlab to show me these power constants but have trouble making matlab select them. How can I choose powers of each variable separately and get it's value?
3 个评论
回答(2 个)
Matt J
2014-5-23
If there is no error in the equations, you can take logs and turn it into a linear equation in a,b, and c
logf=a*logx+b*logy+c*logz
1 个评论
Matt J
2014-5-23
编辑:Matt J
2014-5-23
You can also use the linearization to develop an initial guess for the fminsearch approach (See Star Strider's answer).
Star Strider
2014-5-23
You can do a nonlinear fit with fminsearch:
f = @(p,x,y,z) x.^p(1) .* y.^p(2) .* z.^p(3); % Function
x = 3; % Define variables
y = 5;
z = 7;
s = 13; % Define f(x,y,z,) = s
objfcn = @(p) f(p,x,y,z) - s; % Objective function = 0 when f(x,y,z,) = s
[b, fval] = fminsearch(objfcn, [1 1 1])
produces:
b =
11.3000 -3.0500 -25.5000
fval =
-13.0000
4 个评论
Matt J
2014-5-23
编辑:Matt J
2014-5-23
If you don't include the norm(), your error function is signed. fminsearch will then look for the 'p' that makes the error function as negative as possible.
As an example, consider the alternative data x=13,y=1,z=1, s=13. With
objfcn = @(p) f(p,x,y,z) - s;
I obtain the false solution,
b =
-18.8889 6.2222 5.4278
fval =
-13
whereas when the norm() is included, fminsearch correctly detects that the initial point [1 1 1] is a solution,
b =
1 1 1
fval =
0
Star Strider
2014-5-23
Noted. I’ve only done minimisation or least-squares curve fitting with fminsearch, so never encountered that.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!