Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mencari Titik Persilangan Lengkung dengan Tepat dengan y = 0 Menggunakan Python?

Bagaimana untuk Mencari Titik Persilangan Lengkung dengan Tepat dengan y = 0 Menggunakan Python?

Patricia Arquette
Patricia Arquetteasal
2024-10-21 07:17:30619semak imbas

How to Accurately Find Intersection Points of a Curve with y = 0 Using Python?

Mengenal pasti Titik Persilangan Lengkung dengan y = 0

Dalam konteks pemplotan Python menggunakan tatasusunan NumPy, nilai tepat pada paksi-y di mana lengkung bersilang dengan y = 0 boleh menjadi tugas yang sukar difahami. Artikel ini membincangkan kaedah untuk menentukan titik persilangan ini dengan tepat, menangani batasan teknik mencari akar sedia ada.

Untuk bermula, mari kita tentukan plot kami menggunakan tatasusunan NumPy:

<code class="python">import numpy as np
import matplotlib.pyplot as plt
vertical_data = ...
gradient = ...
plt.plot(gradient, vertical_data)
plt.show()</code>

Sekarang , katakan kita ingin mencari nilai sifar lengkung. Algoritma pencarian akar konvensional selalunya memberikan hasil yang tidak tepat disebabkan oleh had ketepatan titik terapung. Untuk mengatasinya, kami menggunakan teknik interpolasi linear mudah:

<code class="python">import numpy as np

def find_roots(x, y):
    # Compute the sign differences
    s = np.abs(np.diff(np.sign(y))).astype(bool)
    # Perform linear interpolation at sign changes
    return x[:-1][s] + np.diff(x)[s]/(np.abs(y[1:][s]/y[:-1][s])+1)</code>

Fungsi ini mengambil tatasusunan x dan y sebagai input dan mencari titik persilangan di mana nilai-y melintasi tanda sifar. Kami menggunakan fungsi ini pada data kami dan memplot hasilnya:

<code class="python">z = find_roots(gradient, vertical_data)

plt.plot(gradient, vertical_data)
plt.plot(z, np.zeros(len(z)), marker="o", ls="", ms=4)
plt.show()</code>

Dengan menyongsangkan peranan x dan y, kami boleh menentukan titik persilangan di sepanjang paksi-x:

<code class="python">plt.plot(vertical_data, gradient)
plt.plot(np.zeros(len(z)), z, marker="o", ls="", ms=4)
plt.show()</code>

Selain itu, kaedah yang dibentangkan membolehkan mencari titik persilangan pada nilai bukan sifar y. Hanya tolak nilai-y yang dikehendaki daripada lengkung sebelum menggunakan fungsi find_roots:

<code class="python">y0 = 1.4
z = find_roots(gradient, vertical_data - y0)
plt.plot(z, np.zeros(len(z))+y0)</code>

Akhir sekali, untuk menentukan persilangan antara dua lengkung, kira perbezaan antara lengkung dan gunakan fungsi find_roots untuk mencari persilangan mata:

<code class="python">y2 = ...
z = find_roots(gradient, y2 - y1)
plt.plot(gradient, y1)
plt.plot(gradient, y2, color="C2")
plt.plot(z, np.interp(z, gradient, y1), marker="o", ls="", ms=4, color="C1")</code>

Atas ialah kandungan terperinci Bagaimana untuk Mencari Titik Persilangan Lengkung dengan Tepat dengan y = 0 Menggunakan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn