Извлеките локальный максимум и минимум и постройте функцию конверта

Мой набор данных:

У меня есть следующий набор данных, который при построении с использованием Plotly дает следующий результат (упрощенный): Извлеките локальный максимум и минимум и постройте функцию конверта

Мое задание:

Я хочу создать функцию конверта, которая извлекает локальные максимумы и минимумы из данных из приведенного выше набора данных и строит кривую конверта. Примерно это будет выглядеть так:

Извлеките локальный максимум и минимум и постройте функцию конверта

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

Вот мой код для начального сюжета:

import plotly.express as px
import plotly.graph_objects as go

fig= go.Figure()

fig.add_traces(go.Scatter(x= mem_df['time'], y=mem_df['volatge']))

fig.update_layout(xaxis_title = r'$\text{Time } T \text{ in s}  $',
                      yaxis_title = r'$\text{Deflection angle } \text{ in radians}$')
fig.update_layout(title= r'$\text{Deflection angles versus time for the damping sheet}$')
fig.show()

Любая помощь в этом случае будет оценена по достоинству! Заранее спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
20
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

import plotly.express as px
import plotly.graph_objects as go
import pandas as pd
import numpy as np
from scipy.optimize import curve_fit
from scipy.signal import argrelextrema

mem_df = pd.read_csv("path/to/file")
x = mem_df['time'].values
y = mem_df['deflection'].values
# dampened oscillator
func = lambda x, xi, k, phi, a, b: a * np.sin(k * x - phi) * np.exp(-xi * x) + b
popt, pcov = curve_fit(func, x, y)

fig= go.Figure()
fig.add_traces(go.Scatter(x=x, y=y, name = "data"))

# plot the curve fit
xx = np.linspace(0, 20, 150)
yy = func(xx, *popt)
fig.add_traces(go.Scatter(x=xx, y=yy, name = "fit"))

idx_max = argrelextrema(yy, np.greater)
idx_min = argrelextrema(yy, np.less)
fig.add_traces(go.Scatter(x=xx[idx_max], y=yy[idx_max], name = "top"))
fig.add_traces(go.Scatter(x=xx[idx_min], y=yy[idx_min], name = "bottom"))

fig.update_layout(xaxis_title = r'$\text{Time } T \text{ in s}  $',
                      yaxis_title = r'$\text{Deflection angle } \text{ in radians}$')
fig.update_layout(title= r'$\text{Deflection angles versus time for the damping sheet}$')
fig.show()

Потрясающий! Большое спасибо, что научили меня этому! Это интересный подход. Мне было интересно, как бороться с шумом в данных.

Royce Anton Jose 16.05.2022 18:05

Другие вопросы по теме