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!