I'm looking to fit some data that I have to a function in the form of
y=k(sqrt(x))
with "k" being some constant. How would I find such a line of best fit for the data that I have?

 채택된 답변

Matt J
Matt J 2022년 9월 6일

2 개 추천

k=sqrt(x(:))\y(:)

댓글 수: 5

spacing=[0.5,1,1.5,2,2.5,3]
velocity=[55.71428571,72.97297297,88.46153846,100,115.1162791,116.3265306]
k=sqrt(spacing(:))\velocity(:);
scatter(spacing, velocity, 'red', 'v');
hold on;
y=k*(sqrt(spacing));
plot(y);
This is the code I'm using to plot the function, but the line is totally off of the points.
Matt J
Matt J 2022년 9월 6일
편집: Matt J 2022년 9월 6일
Your plotting code neglected to plot the fit as a function of 'spacing'. It shoudl be,
spacing=[0.5,1,1.5,2,2.5,3];
velocity=[55.71428571,72.97297297,88.46153846,100,115.1162791,116.3265306];
k=sqrt(spacing(:))\velocity(:);
plot(spacing, velocity, 'rv', spacing,k*(sqrt(spacing)),'b-') ;
Bob
Bob 2022년 9월 6일
thank you so much! by any chance, is there a quick way to find the r^2 value for this data trend? if you have the time that is.
Matt J
Matt J 2022년 9월 6일
편집: Matt J 2022년 9월 6일
R2 = 1 - mean( (k*(sqrt(spacing)) - velocity).^2 )/var(velocity,1)
fontSize = 18;
spacing=[0.5,1,1.5,2,2.5,3];
velocity=[55.71428571,72.97297297,88.46153846,100,115.1162791,116.3265306];
coefficients = sqrt(spacing(:))\velocity(:);
fittedVelocity = coefficients*(sqrt(spacing))
fittedVelocity = 1×6
50.2134 71.0125 86.9722 100.4269 112.2806 122.9973
subplot(2, 1, 1);
plot(spacing, velocity, 'rv', spacing, fittedVelocity,'b.-') ;
grid on;
title('Velocity Measurements', 'FontSize', fontSize)
xlabel('Spacing', 'FontSize', fontSize)
ylabel('Velocity', 'FontSize', fontSize)
legend('Original Data', 'Fitted Curve', 'Location', 'northwest')
% Determine and say how well we did with our predictions, numerically, using several metrics like RMSE and MAE.
% Fit a linear model between predicted and true so we can get the R squared.
subplot(2, 1, 2);
% Draw 45 degree line.
line([50, 120], [50, 120], 'Color', 'g', 'LineWidth', 2)
hold on;
plot(velocity, fittedVelocity, 'b.-', 'LineWidth', 2, 'MarkerSize', 25);
grid on;
xlabel('Velocity (Original Data)', 'FontSize', fontSize)
ylabel('Fitted Velocity', 'FontSize', fontSize)
mdl = fitlm(velocity, fittedVelocity);
rSquared = mdl.Rsquared.Ordinary;
caption = sprintf('R Squared = %.3f', rSquared);
title(caption, 'FontSize', fontSize, 'Interpreter', 'none')
legend('Perfect Fit Line', 'Fitted vs. Original Data', 'Location', 'northwest')

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Get Started with Curve Fitting Toolbox에 대해 자세히 알아보기

제품

릴리스

R2022a

태그

질문:

Bob
2022년 9월 6일

댓글:

2022년 9월 6일

Community Treasure Hunt

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

Start Hunting!

Translated by