Problem to find inflection point

16 Ansichten (letzte 30 Tage)
aliff saad
aliff saad am 8 Jun. 2020
Kommentiert: Star Strider am 20 Jun. 2020
Hi, i previously follow the guidelines and tutorial provided by Stryker to solve the inflection points problem. At first, i used 19 values in an array and it come out fine. However, when i have 20 values inside my array, i got an error message: "Index exceeds array bounds". Can someone help me? i really appreciate any help.
My array with 20 values inside:
xNew = [-433.08032 -422.60339 -435.8176 -447.13495 -458.09866 -469.62628 -476.03198 -478.79868 -482.30139 -481.55859 -479.44727 -474.50156 -472.0987 -463.40927 -456.15408 -449.5589 -442.93631 -442.58139 -445.34409 -447.53372];
yNew = [1443.96497 1399.23254 1369.25476 1351.823 1329.43958 1299.13647 1268.26343 1234.25989 1201.34021 1174.68372 1145.37134 1118.427 1089.32715 1061.75366 1034.36926 1008.59052 982.44653 956.20862 933.88422 905.15338];

Akzeptierte Antwort

Star Strider
Star Strider am 8 Jun. 2020
Note that with your data, in order to calculate the inflection points correctly, you need to reverse ‘x’ and ‘y’ in my code:
x = yNew;
y = xNew;
The index range worked for the original example (How to find inflection point, PLEASE HELP!), however it needs to be modified in the event that it over-writes the end of the vector.
Try this:
dydx = gradient(y) ./ gradient(x); % Derivative Of Unevenly-Sampled Data
zci = @(v) find(v(:).*circshift(v(:), [-1 0]) <= 0); % Returns Approximate Zero-Crossing Indices Of Argument Vector
zxidx = zci(dydx); % Approximate Indices Where ‘dydx=0’
for k1 = 1:numel(zxidx) % Loop Finds ‘x’ & ‘y’ For ‘dydx=0’
ixrng = max(zxidx(k1)-2,1):min(zxidx(k1)+2,numel(x));
inflptx(k1) = interp1(dydx(ixrng), x(ixrng), 0, 'linear');
inflpty(k1) = interp1(x(ixrng), y(ixrng), inflptx(k1), 'linear');
end
figure(1)
plot(x, y)
hold on
plot(x, dydx*10)
plot(inflptx, inflpty, 'pg', 'MarkerFaceColor','g')
hold off
grid
legend('Data', 'Derivative', 'Inflection Points', 'Location','best')
inflpts = sprintfc('(%5.3f,%5.3f)', [inflptx; inflpty].');
text(inflptx, inflpty, inflpts,'FontSize',8, 'HorizontalAlignment','center', 'VerticalAlignment','bottom')
I edited my original post to include this change (‘ixrng’).
.
  2 Kommentare
aliff saad
aliff saad am 20 Jun. 2020
thank you very much Star Strider :) it works really fine and i'm really sorry for the late reply as i am trying to cope with new way of life during this Covid-19 period and it is really challenging. I really appreciate for you reply, thanks again!! :)
Star Strider
Star Strider am 20 Jun. 2020
As always, my pleasure!
No worries! SARS-CoV-2 is making life difficult for nearly all of us.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by