Найти точку пересечения двух ListLinePlot в математике

У меня есть много экспериментальных данных, которые я рисую как 2 кривые, используя ListLinePlot в математике. Я хочу найти точку пересечения между этими двумя. Могу ли я это сделать без создания интерполяционной функции и Solve []? Я действительно не думаю, что нужно сделать полином с порядком 1000 или каким бы он ни был в моем случае. Это должно быть просто, но я не могу найти функцию, которая это делает. Я отлично разбираюсь в функции, которая предполагает прямые линии между каждой точкой данных, как ListLinePlot (так как их так много). Я чувствую, что это должно быть очень очевидно, но я действительно не могу понять, как это сделать (за исключением того, что я просто использую мой взгляд)

1 ответ

Я бы использовал Mathematica Interpolation для генерации интерполяций двух кривых, а затем используйте FindRoot, чтобы найти пересечение, как показано ниже.

curve1 = Interpolation[ data1 ];
curve2 = Interpolation[ data2 ];
FindRoot[ curve1[x] - curve2[x], {x, bestguess} ]

Несмотря на тысячи задействованных точек, интерполяция - очень быстрая операция, и на моей машине нет заметной задержки между нажатием shift + enter и возвратом Mathematica.

Однако есть предостережение. Поскольку это экспериментальные данные, само пересечение будет иметь неопределенность, и я предлагаю вам использовать подходящий метод, предназначенный для создания этой информации, например, найденный здесь. Хотя он не сразу доступен, он должен указывать вам в правильном направлении.

licensed under cc by-sa 3.0 with attribution.