Encontrando interseções de curvas com zero
Em Python, obter valores exatos do eixo y de um gráfico pode ser um desafio quando o valor não é um número inteiro. Este artigo aborda esse problema e apresenta uma solução baseada em interpolação linear.
Dadas duas matrizes (dados_verticais e gradiente(dados_temperatura)), um gráfico é gerado usando plt.plot. No entanto, o gráfico exibe um valor y próximo, mas não exatamente zero.
Interpolação linear para estimativa de raiz
Para estimar a raiz exata de uma matriz numpy , um método simples de interpolação linear pode ser usado. O código a seguir demonstra como encontrar os valores zero de uma curva arbitrária:
import numpy as np
def find_roots(x, y):
s = np.abs(np.diff(np.sign(y))).astype(bool)
return x[:-1][s] np.diff(x)[s]/(np.abs(y[1:][s]/y[:-1][s]) 1)
x = .4 np.sort(np.random.rand(750))*3.5
y = (x-4)*np.cos(x*9.)*np.cos(x*6 0.05) 0.1
z = find_roots(x,y)
plt.plot(x,y)
plt.plot(z, np.zeros(len(z)), marker="o", ls="", ms=4)
Este código identifica as raízes da curva e as plota como círculos no valor y exato de zero.
Interceptações diferentes de zero
A mesma abordagem pode ser usada para encontrar a interseção de uma curva com qualquer y diferente de zero -value (y0) modificando a linha que encontra as raízes:
z = find_roots(x,y-y0)
Duas interseções de curva
O método de interpolação linear também pode ser usado para encontrar a interseção entre duas curvas. Ao encontrar as raízes da diferença entre as duas curvas, podemos estimar seu ponto de intersecção:
y2 = (x - 2) * np.cos(x * 8.) * np.cos(x * 5 0.03) 0.3
z = find_roots(x,y2-y1)
plt.plot(x,y1)
plt.plot(x,y2, color="C2")
plt.plot(z, np.interp(z, x, y1), marker="o", ls="", ms=4, color="C1")
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3