fitting to a power function with an additional constant

1 次查看(过去 30 天)
Hello Matlab! I have this dataponits t and y. I want to fit those data points to a function y=a(t+c)^b, and get the parameters a,c and b.I have tried below, but not converging. Can anyone suggest me Thanks GH
close all
clear all
clc
t=[0.097
0.477
0.934
4.835
15.590
46.645
69.371
100.709
165.249
277.846
382.978
1000.64
1519.83
1991.60
2544.96
3023.40
3589.94
4159.93
4473.43
5186.36
6316.71
7134.15
9125.71
10571.90
12565.82
14916.64
16859.92
];
y=[20.96
21.33
20.77
20.96
21.14
21.33
20.24
19.71
17.90
15.98
14.51
10.05
8.37
7.40
6.49
6.05
5.54
5.17
4.82
4.57
4.26
3.87
3.52
3.25
3.08
2.80
2.61
];
loglog(t,y,'o')
F = @(x,xdata)x(1)*(x(2)+xdata).^x(3);
x0 = [80 -0.1 130];
[x,resnorm,~,exitflag,output] = lsqcurvefit(F,x0,t,y)
hold on
plot(t,F(x,t))
hold off

回答(1 个)

Walter Roberson
Walter Roberson 2018-2-6
You used an unconstrained curve fitting, which did a trial run with some values that were invalid for your function.
Your x0 is not especially close to the best parameters, which are approximately 851.271574244121 -0.604937228501513 436.783547500979
  4 个评论
friet
friet 2018-2-6
Thanks for your kind help.
even with your suggested intial values, I cant get it work. Can you check the code.
close all
clear all
clc
t=[0.097
0.477
0.934
4.835
15.590
46.645
69.371
100.709
165.249
277.846
382.978
1000.64
1519.83
1991.60
2544.96
3023.40
3589.94
4159.93
4473.43
5186.36
6316.71
7134.15
9125.71
10571.90
12565.82
14916.64
16859.92
];
y=[20.96
21.33
20.77
20.96
21.14
21.33
20.24
19.71
17.90
15.98
14.51
10.05
8.37
7.40
6.49
6.05
5.54
5.17
4.82
4.57
4.26
3.87
3.52
3.25
3.08
2.80
2.61
];
loglog(t,y,'o')
F = @(x,xdata)x(1)*(x(2)+xdata).^x(3);
x0 = [851.271574244121 -0.604937228501513 436.783547500979];
[x,resnorm,~,exitflag,output] = lsqcurvefit(F,x0,t,y)
hold on
plot(t,F(x,t))
hold off
Walter Roberson
Walter Roberson 2018-2-6
You have x(2)+xdata, where xdata is t. min(t) is 0.097 so if your trial x(2) is less than -0.097 then you would get a negative value for x(2)-min(t), and you would then try to raise that negative to a floating point power. You thus need a constraint that x(2) >-min(t) to avoid that negative raised to a floating point.
I will need to investigate further as to why I did not encounter this problem in my own tests.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Interpolation 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by