MATLAB Answers

How to know which plot is more linear then the other?

6 views (last 30 days)
Meshooo
Meshooo on 26 Nov 2020
Commented: Meshooo on 21 Dec 2020 at 4:41
Dear all,
I have two datasets arrays:
A = [0
0.423891532
0.819380304
1.289479809
1.739548357
2.288748183
2.8990623
3.618974647
4.402757506
5.268816221
6.240886445
7.278958674
8.321358342
9.369407383
10.37825178
11.17417756
12.02774088
12.69808163
13.49653247
14.36958724
15.50198578
16.68295148
20.09421834]
%%
B = [0
0.406558949
0.771247013
1.123943155
1.487752056
1.915016538
2.365427777
2.852526752
3.419995212
3.933726314
4.436914792
4.958793052
5.510476759
5.961517074
6.415268974
6.843890692
7.102927349
7.118216122
7.677116245
8.751585797
9.636923065
10.32502819
12.9488068]
%%
plot(A, 'green')
hold on
plot(B, 'blue')
hold off
%%
Both A and B are nonlinear curves, but B seems to be more linear (less curvature) than A.
How can I show such information numerically?
Any sugguestion will be appreciated.
Best,
Meshoo

  0 Comments

Sign in to comment.

Accepted Answer

Ameer Hamza
Ameer Hamza on 26 Nov 2020
You can see the residual error with linear fit to see which dataset is more linear
[~, eA] = polyfit(1:numel(A), A, 1)
[~, eB] = polyfit(1:numel(B), B, 1)
Result
>> eA.normr
ans =
4.0713
>> eB.normr
ans =
2.8868
Vector 'B' is more linear as compared to A.

  2 Comments

Mustafa Sami
Mustafa Sami on 15 Dec 2020
Thank you very much Ameer.
Is there any range (maximum and minimum) for eA.normr?

Sign in to comment.

More Answers (2)

VBBV
VBBV on 26 Nov 2020
AA = diff(A); % compute the slope
BB = diff(B);
plot(AA); hold on; plot(BB) % and plot to compare linearity

  3 Comments

VBBV
VBBV on 26 Nov 2020
You can see the constant slope for BBconstant line
Meshooo
Meshooo on 26 Nov 2020
Thank you for your help. I need to judge based on some numeric information. Is there a way to quantify the slope from the diff that you provided?
VBBV
VBBV on 26 Nov 2020
The diagram quantifies the slopes obtained for A and B and compared.
You can see the y axis value of ~ 0.5 for red line and has nearly constant or stable slope till first 15 elements, except the last few where it turns non-linear

Sign in to comment.


KSSV
KSSV on 26 Nov 2020
How about finding the area bounded by the curves..which ever has least area is straight.
A = [0
0.423891532
0.819380304
1.289479809
1.739548357
2.288748183
2.8990623
3.618974647
4.402757506
5.268816221
6.240886445
7.278958674
8.321358342
9.369407383
10.37825178
11.17417756
12.02774088
12.69808163
13.49653247
14.36958724
15.50198578
16.68295148
20.09421834]
%%
B = [0
0.406558949
0.771247013
1.123943155
1.487752056
1.915016538
2.365427777
2.852526752
3.419995212
3.933726314
4.436914792
4.958793052
5.510476759
5.961517074
6.415268974
6.843890692
7.102927349
7.118216122
7.677116245
8.751585797
9.636923065
10.32502819
12.9488068]
%%
plot(1:length(A),A, 'g')
hold on
plot(1:length(B),B, 'b')
%%
x = [1:length(A)]' ;
L1 = [[x ; x(1)] [A ;A(1)]] ;
L2 = [[x ;x(1)] [B;B(1)]] ;
patch(L1(:,1),L1(:,2),'r')
hold on
patch(L2(:,1),L2(:,2),'b')
A1 = polyarea(L1(:,1),L1(:,2)) ;
A2 = polyarea(L2(:,1),L2(:,2)) ;

  0 Comments

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!