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

Patricia Arquette
Lepaskan: 2024-10-21 07:17:30
asal
535 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!