Help with linear fit

1 view (last 30 days)
aurc89
aurc89 on 7 Feb 2014
Commented: aurc89 on 7 Feb 2014
Given a curve (x vs y) I need to do a linear fit but only between two points x1 and x2 of that curve. Then, I need to calculate the slope of this line. Could you suggest me the fastest way to do that? Thanks.

Accepted Answer

Mischa Kim
Mischa Kim on 7 Feb 2014
Edited: Mischa Kim on 7 Feb 2014
Here is one way:
x = 0:0.05:1; % define data
y = sin(x).^2;
x1 = x(10); % define interval
x2 = x(20);
xrange = x(find(x == x1):find(x == x2)); % pick out x and y vals in interval
yrange = y(find(x == x1):find(x == x2));
p = polyfit(xrange, yrange, 1); % do linear curve fit
yfit = polyval(p, xrange);
figure
hold on; grid; box
plot(x,y,xrange,yfit,'-r')
The first element of p is the slope of the linear curve.
  1 Comment
aurc89
aurc89 on 7 Feb 2014
It works, thank you very much!

Sign in to comment.

More Answers (1)

Jos (10584)
Jos (10584) on 7 Feb 2014
Here's how:
tf = x > x1 & x < x2 % true for x1 < x < x2
p = polyfit(x(tf), y(tf),1) % fit on selection

Community Treasure Hunt

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

Start Hunting!