Hello everyone, how to divide a piece of data into upper and lower parts along the y-axis with C point and D point as the boundary?

1 回表示 (過去 30 日間)
  1 件のコメント
Wesley
Wesley 2021 年 1 月 19 日
Points C and D have been calculated.
load data1.mat
x = data1(:, 1);
y = data1(:, 2);
%Calculate points C and D
[a,I]=min(x);
C=[a,y(I)];
[b,J]=max(x);
D=[b,y(J)];
hold on

サインインしてコメントする。

採用された回答

Star Strider
Star Strider 2021 年 1 月 19 日
Try this:
D = load('data1.mat');
data1 = D.data1;
x = data1(:, 1);
y = data1(:, 2);
[C,ixmin] = min(x);
[D,ixmax] = max(x);
B = [x(ixmin) 1; x(ixmax) 1] \ [y(ixmin); y(ixmax)];
[xsort,sortidx] = sort(x);
fitline = [xsort ones(size(xsort))] * B;
topidx = y(sortidx) >= fitline;
figure
plot(x(sortidx(topidx)), y(sortidx(topidx)), '.r')
hold on
plot(x(sortidx(~topidx)), y(sortidx(~topidx)), '.g')
plot(xsort, fitline, '-b')
plot(C,y(ixmin), 'bo', 'MarkerFaceColor','b')
plot(D,y(ixmax), 'bo', 'MarkerFaceColor','b')
hold off
xlabel('X')
ylabel('Y')
legend('Above Line', 'Below Line', 'Line', 'Location','SE')
text(C,y(ixmin), 'C ', 'HorizontalAlignment','right', 'VerticalAlignment','middle')
text(D,y(ixmax), ' D', 'HorizontalAlignment','left', 'VerticalAlignment','middle')
producing:
.
  9 件のコメント
Wesley
Wesley 2021 年 1 月 20 日
You did a great job, wonderful!Give you a thumbs up.
Star Strider
Star Strider 2021 年 1 月 20 日
As always, my pleasure!
This was likely the most challenging anallysis I’ve done here on Answers!

サインインしてコメントする。

その他の回答 (1 件)

KSSV
KSSV 2021 年 1 月 19 日
編集済み: KSSV 2021 年 1 月 19 日
Option 1: You should get the indices of C, D in the given points of curve. Read about knnsearch, this will give indices of points in curve which are close/ same as C and D. Once you know these indices, you can get the upper and lower curve depending on whether the points are in clockwise direction or anti clockwise direction.
Option 2: This is simple, you know C, D; as they lie on x-axes/ parallel to x-axes, these points should have same y. So:
idx1 = P(:,2)>=C(2) ; % C(2), D(2) both will be same
dataA = P(idx1,:) ;
dataB = P(~idx1,:) ;

カテゴリ

Help Center および File ExchangeAnnotations についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by