Saya mencari algoritma untuk menggambar 2d-grafik standar untuk fungsi yang mungkin atau mungkin tidak memiliki singularitas. Tujuannya adalah untuk menulis "Mini-CAS", jadi saya tidak memiliki pengetahuan apriori tentang jenis fungsi, pengguna ingin membuat grafik.
Masalah ini sudah sangat tua, jadi saya membayangkan harus ada beberapa algoritma standar dalam literatur. Untuk sekali ini saya tidak punya banyak keberhasilan menemukan referensi melalui Google.
Saya memang menemukan satu algoritma yang menarik, yaitu yang ini dari "YACAS - Book of algoritma" bernama "Adaptive function plotting".
Singkatnya:
- Apakah ada algoritma standar?
- Apakah ada rangkaian uji untuk fungsi yang sulit untuk diketahui yang diketahui?
- Apa makalah menarik untuk dibaca?
algorithms
visualization
soegaard
sumber
sumber
Jawaban:
Saya telah menerapkan rutin pengambilan sampel adaptif Mathematica di GitHub (Ini adalah file C tunggal, naik ke pohon sumber untuk file header). Saya menemukan deskripsi rutin dalam buku besar tentang Mathematica sejak lama, dan saya telah menggunakan variasi pada implementasi ini untuk beberapa waktu sekarang. Ini pada dasarnya melakukan sampel linier kasar atas domain yang diminati, kemudian kembali untuk memperbaiki daerah dengan kelengkungan tinggi. Ada kemungkinan bahwa beberapa fitur yang sangat tajam terlewatkan, tetapi dalam praktiknya saya menemukan ini sangat langka. File ini juga berisi versi paralel.
sumber
Exclusions -> None
atau dengan menyembunyikan struktur fungsi Anda dariPlot
dengan mendefinisikannya sebagaif[x_?NumericQ] := ...
. Ini bukan yang saya maksud ketika saya bertanya tentang perubahan. Saya percaya ada beberapa perubahan pada algoritma, karena v5 dan v6 dijadikan sampel pada titik yang berbeda. Saat ini saya tidak dapat menguji pada v5 untuk membandingkan lagi.Mengetahui bagaimana CAS lainnya melakukan ini dapat membantu Anda.
Mulailah dengan kisi-kisi titik spasi secara teratur pada domain yang merencanakan. (Dalam Mathematica, ada parameter untuk mengontrol berapa yang harus diambil, yang disebut
PlotPoints
.)Jika kami belum mencapai batas iterasi (ditetapkan oleh
MaxRecursion
di Mathematica), ulangi dari langkah 2.Beberapa dari ini dibahas dalam buku Mathematica in Action oleh Stan Wagon, yang dapat Anda lihat di sini di Google Books .
Saya menerapkan algoritma ini sebelumnya untuk memiliki kontrol yang lebih baik atas berapa kali fungsi perhitungan saya yang mahal dievaluasi. Berikut kode Mathematica untuk langkah 2:
sumber
Halaman web MathWorld pada Function Graphs berisi referensi ke beberapa makalah yang tampaknya relevan pada plot fungsi adaptif. Mengutip halaman:
Di sisi lain, di Google saya menemukan kertas
www.cs.uic.edu/~wilkinson/Publications/plotfunc.pdf
yang menjelaskan cara memilih domain dengan benar dan hal-hal lain. Semoga bermanfaat bagi Anda.
sumber
Saya menemukan topik ini dan berpikir saya harus berbagi halaman masalah pengembang untuk menambahkan ini ke perpustakaan Julia Plots.jl. Kami mencoba banyak teknik untuk melihat apa yang akan memberikan hasil yang baik, mulai dari catatan tentang implementasi Mathematica. Menambahkan beberapa pemangkasan, gangguan kecil untuk tidak memulai tepat pada titik akhir interval, batas rekursi, dan penaksir kesalahan jala ganda semua diperlukan untuk "melakukannya dengan benar". Utas juga mengarahkan Anda ke kode sumber terbuka untuk implementasi. Jadi memang butuh sedikit penyesuaian, tetapi menambahkan fitur-fitur itu membuatnya cukup kuat (menurut tes, seperti yang ditunjukkan pada utas).
sumber