Nano Hash - криптовалюты, майнинг, программирование

Попытка найти точку пересечения с помощью приблизительной функции, результаты правильные по оси y, но не по оси x.

Работая в R, я пытаюсь построить поперечные сечения рек, интерполировать точку на пересечении напротив идентифицированной «насыпной» точки и рассчитать площадь под линией насыпи. Это часть цикла, обрабатывающего множество поперечных сечений. Лучшее решение, которое я придумал, - это использовать функцию приблизительного определения, однако все точки не находятся точно в точке пересечения, и я не смог понять, что я делаю неправильно.

Трудно предоставить образцы данных, так как они являются частью цикла, но приведенный ниже пример кода дает результат на изображении. Синий треугольник должен находиться в точке пересечения пунктирной линии «насыпи» и сплошной линии периметра поперечного сечения.

###sample data

stn.sub.sort <- data.frame(dist = c(0,1.222,2.213,2.898,4.453,6.990,7.439,7.781,8.753,10.824,10.903,13.601,17.447), depth=c(-0.474,-0.633,0,-0.349,-1.047,-2.982,-2.571,-3.224,-3.100,-3.193,-2.995,-0.065,-0.112), Bankful = c(0,0,0,0,1,0,0,0,0,0,0,0,0))

###plot cross section with identified bankful
plot(stn.sub.sort$dist,
     as.numeric(stn.sub.sort$depth),
     type="b",
     col=ifelse(stn.sub.sort$Bankful==1,"red","black"),
     ylab="Depth (m)",
     xlab="Station (m)",
     ylim=range(stn.sub.sort$depth),
     xlim=range(stn.sub.sort$dist),
     main="3")


###visualize bankful line of intersection
abline(h=stn.sub.sort$depth[stn.sub.sort$Bankful==1],
       lty=2,
       col="black")

###approximate point at intersection
index.bf=which(stn.sub.sort$Bankful==1)

index.approx<-which(stn.sub.sort$dist>stn.sub.sort$dist[index.bf])

sbf <- approx(stn.sub.sort$depth[index.approx],
            stn.sub.sort$dist[index.approx],
            xout=stn.sub.sort$depth[index.bf])  

###plot opposite bankful points 
points(sbf$y,sbf$x,pch=2,col="blue")

Образец поперечного сечения


  • У вас есть 13 точек, которые вы можете ввести вручную и вставить в stn.sub.sort <- data.frame(dist = c(), depth=c(), Bankful = c()). Это интересный вопрос, но добавление примеров данных значительно упростило бы поиск ответа. 20.05.2020
  • Спасибо за ответ. Я добавил образцы данных. 20.05.2020

Ответы:


1

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

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

BankfulDepth = stn.sub.sort$depth[stn.sub.sort$Bankful==1]
Low = max(which(stn.sub.sort$depth < BankfulDepth))

InvAF = approxfun(stn.sub.sort$depth[c(Low,Low+1)], 
            stn.sub.sort$dist[c(Low,Low+1)])
points(InvAF(BankfulDepth), BankfulDepth, pch=2,col="blue")

График с добавленной правильной точкой.

20.05.2020
  • Это действительно элегантное решение, спасибо. Есть такие, которые плетены с несколькими каналами, а есть и противоположные, но в целом они будут очень похожи на это. Ваше решение определенно будет хорошо переведено в другие формы. 20.05.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..