Fit Powerlaw to Data
조회 수: 47 (최근 30일)
이전 댓글 표시
Hi all!
I need to fit following Power Law to some experimental data.
y = C(B+x)^n
The data I have is as the following:
STRESS = [0.574, 367.364, 449.112, 531.087, 596.241, 649.097, 695.038, 737.173, 815.008];
STRAIN = [2.8746e-04, 0.00063, 0.0459, 0.0901, 0.1320, 0.1725, 0.2132, 0.2557, 0.3579];
The variables are x and y are STRAIN and STRESS respectively, and I would like estimates for C, B and n.
I'm not sure how to use the fitting tool for this kind of specific model.
Any ideas or suggestions would be greatly appreciated!
Thank you very much!
댓글 수: 2
John D'Errico
2019년 12월 6일
편집: John D'Errico
2019년 12월 6일
One requirement is that you have the same number of values in each vector. You don't meet that basic requirement.
numel(STRESS)
ans =
8
numel(STRAIN)
ans =
9
Once you have actually told us the correct data, then you need to explain which variable is intended to be x, and which is y. If you want help, then make it possible, even easy, for someone to help you.
채택된 답변
Star Strider
2019년 12월 6일
편집: Star Strider
2019년 12월 6일
Try this:
STRESS = [0.574, 367.364, 449.112, 531.087, 596.241, 649.097, 695.038, 737.173, 815.008];
STRAIN = [2.8746e-04, 0.00063, 0.0459, 0.0901, 0.1320, 0.1725, 0.2132, 0.2557, 0.3579];
yfcn = @(b,x) b(1).*(b(2)+x).^b(3);
B0 = [1E-6; 100; 2];
B = fminsearch(@(b) norm(STRAIN - yfcn(b,STRESS)), B0);
xv = linspace(min(STRESS), max(STRESS), 50);
yv = yfcn(B,xv);
figure
plot(STRESS, STRAIN, 'pg')
hold on
plot(xv, abs(yv), '-r')
hold off
grid
text(150, 0.27, sprintf('y = %.3E \\cdot (%.3f + x)^{%.3f}', B))
xlabel('STRESS')
ylabel('STRAIN')
Experiment to get different results.
EDIT — (6 Dec 2019 at 17:50)
Added plot image:
댓글 수: 7
Star Strider
2021년 5월 8일
vedavathi — It is a straightforward calculation, however it is easier to use fitnlm with ‘yfcn’ to get that and a number of other statistics.
추가 답변 (2개)
Image Analyst
2019년 12월 6일
I'd use fitnlm() in the Statistics and Machine Learning Toolbox.
I suggest that you don't try to fit the first point. When I try to do that, it's impossible to get a fit. I get error messages that says the Jacobian is not well defined. "Warning: The Jacobian at the solution is ill-conditioned, and some model parameters may not be estimated well (they are not identifiable). Use caution in making predictions. " and it won't do the fit.
But if I try to fit from the second point onwards, I still get the warning but the fit seems reasonable. See plot below. If you want you could do a piece-wise fit where you fit everything to the left of the second point to a line.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Stress and Strain에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!