Нахождение пересечений кривых, которые нельзя представить как y = f (x) - PullRequest
0 голосов
/ 07 октября 2018

У меня есть две пары наборов данных: x1 против y1 и x2 против y2.x1, y1, x2, y2 имеют неравномерное распределение данных, представленных следующими изображениями:

x1 x2 y1 y2

Моя проблема заключается в определении пересеченияиз двух пар наборов данных, x1 / y1 и x2 / y2, показанных на следующем изображении:

x1/y1 vs x2/y2

Я попытался интерполировать точки данных, чтобы иметь одинаковый интервал, но из-за недопустимогообласти x1 / y1, где существует несколько решений для одного и того же значения x.

Здесь приведено увеличение отношения x1 / y1 и x2 / y2, показывающее, что в наборе данных есть узлы, которые не могут бытьинтерполируется в любой ориентации:

zoom in of x1/y1 and x2/y2 relationship

1 Ответ

0 голосов
/ 13 октября 2018

Кажется, что x2 / y2 - это гладкая кривая, поэтому вы должны иметь возможность кусочно интерполировать ее с помощью полиномов и получить приличные результаты.Конечно, вы не захотите делать это с x1 / y1, так как ваши данные сумасшедшие.Я буду ссылаться на независимую переменную в последних двух изображениях как t.Вы можете использовать функцию сплайна matlab, чтобы выполнить эту интерполяцию из массивов значений t и x2 / y2.Ваш массив значений t в этом случае должен быть того же размера, что и ваш набор значений x2 / y2.Затем вы можете зациклить свои точки x1 / y1, используя интерполяцию для оценки x2 / y2 при том же значении t.Тогда вы можете вычесть эти значения.Когда знак этого значения изменяется для двух последовательных точек x1 / y1, у вас есть точка пересечения между ними.Затем выполните линейную интерполяцию между этими двумя точками x1 / y1 и найдите пересечение этой линии с вашей интерполированной функцией x2 / y2.Код может немного запутаться, но он должен работать.Вам может понадобиться посмотреть документацию MATLAB spline .

...