Satuan 5 / 11

Perhitungan Numerik, Python dan Pembuatan Kode

Keuntungan:

  • Kemampuan untuk membedakan antara kalkulus simbolik dan numerik dan memilih alat yang tepat (SymPy atau NumPy/SciPy) untuk setiap masalah
  • Kemampuan membaca dan memahami kode numerik yang dihasilkan oleh kecerdasan buatan, menjalankannya sendiri, dan memverifikasinya dengan melakukan tes akal sehat dengan masukan yang diketahui.
  • Pahami batasan presisi bilangan floating-point, gunakan toleransi alih-alih persamaan eksak, dan kelola dampak tebakan awal pada metode numerik.

Kalkulus simbolik memberikan rumus pasti suatu integral atau persamaan; Namun sebagian besar permasalahan praktis dalam matematika tidak dapat diselesaikan dengan rumus tertutup. Di sinilah komputasi numerik berperan: menghasilkan perkiraan hasil numerik dengan presisi yang diinginkan, bukan rumus yang tepat. Menemukan nilai integral hingga presisi 0,001, menghitung akar persamaan hingga perkiraan desimal, mengekstraksi statistik dari kumpulan data — ini semua adalah penghitungan numerik. Di Python, alat untuk ini adalah perpustakaan NumPy (array numerik dan matematika) dan SciPy (komputasi ilmiah). Di unit ini, Anda akan belajar menggunakan AI sebagai asisten yang menghasilkan kode Python untuk penghitungan numerik dan memeriksa kebenaran kode.

Definisi penting: bilangan floating-point adalah format di mana komputer menyimpan bilangan desimal dengan presisi terbatas. Itu sebabnya dalam aritmatika komputer, 0,1 + 0,2 bisa berubah menjadi 0,30000000000000004, bukan persis 0,3. Ini bukanlah kesalahan, ini adalah sifat perhitungan numerik — tetapi akan memberikan hasil yang salah jika Anda tidak menyadarinya. Dalam perhitungan numerik, seseorang bekerja dengan "cukup dekat" daripada "persamaan tepat".

Simbolis atau numerik? Memilih alat yang tepat

Status

Simbolik (SymPy)

Numerik (NumPy/SciPy)

Ada rumus tertutup

disukai

tidak perlu

Tidak ada rumus/terlalu rumit

tidak bisa menyelesaikannya

disukai

Dibutuhkan ketelitian yang lengkap

Ya

Kira-kira.

Data besar / multi-pemrosesan

lambat

sangat cepat

Hasil dengan desimal sudah cukup

cocok

Seorang praktisi yang baik menggunakan keduanya: selesaikan secara simbolis jika memungkinkan, lakukan secara numerik jika tidak, dan periksa silang satu sama lain bila memungkinkan.

Langkah demi langkah: Amankan penghitungan numerik dengan AI

1. Identifikasi masalah dan sensitivitasnya. "Berapa angka desimalnya?" dan “dalam kisaran berapa?” Perjelas pertanyaan Anda.

2. Tulis kode ke AI, bukan keluaran. Ingat dari unit 4: Jangan membuat keluaran kode prediksi AI. Anda menjalankan kodenya.

3. Baca dan pahami kodenya. Pahami kode yang dihasilkan baris demi baris. Pustaka yang tepat, fungsi yang benar, parameter yang benar? Jangan jalankan kode yang tidak Anda mengerti.

4. Uji dengan situasi yang diketahui. Coba kode dengan masukan sederhana yang Anda sudah tahu jawabannya. Misalnya sin(0)=0, seperti nilai integral yang diketahui. Jika kode memberikannya dengan benar, Anda akan lebih mempercayainya.

5. Cross check secara simbolis atau manual. Jika memungkinkan, konfirmasikan hasil yang sama dengan SymPy atau pendekatan manual.

6. Waspadalah terhadap jebakan floating point. Daripada menggunakan persamaan ketat dengan ==, gunakan toleransi seperti abs(a - b) < 1e-9.

Tip: Selalu uji kode numerik "dengan jawaban yang Anda tahu". Jika Anda menulis pencari akar, terapkan terlebih dahulu pada persamaan yang akarnya diketahui (x=±2), misalnya x²−4=0. Jika kode menemukan ini benar, kemungkinan besar kode tersebut dapat diandalkan pada persamaan yang tidak Anda ketahui. "Pemeriksaan kewarasan" ini adalah verifikasi termurah.

Jebakan kalkulus numerik: konvergensi dan akumulasi kesalahan.

Kebanyakan metode numerik bekerja secara iteratif: dimulai dari tebakan awal dan secara bertahap mendekati jawaban sebenarnya. Proses mendekatkan diri ini disebut konvergensi. Namun tidak setiap metode berulang selalu menyatu; beberapa menyimpang (menjauh dari hasil) atau menyatu ke nilai yang salah. Jika kode yang dihasilkan AI tidak memeriksa apakah metode tersebut konvergen, kode tersebut mungkin secara diam-diam memberi Anda nomor yang salah. Jadi hanya karena hasil numerik "menghasilkan angka" tidak berarti itu benar; Penting juga untuk memastikan bahwa angka tersebut benar-benar konvergen dengan solusi yang dicari.

Kehalusan kedua adalah akumulasi kesalahan. Dalam rangkaian perhitungan yang panjang, kesalahan pembulatan floating-point kecil di setiap langkah dapat terakumulasi dan menjadi lebih besar; Apalagi jika Anda mengambil selisih dua angka besar yang sangat dekat (ini disebut pembatalan bencana), angka signifikan dari hasilnya bisa hilang. Kecerdasan buatan tidak selalu memprediksi masalah stabilitas numerik seperti itu. Dalam perhitungan kritis, menghitung ulang dan membandingkan hasilnya dengan metode yang berbeda atau dengan presisi yang lebih tinggi akan mengungkapkan akumulasi kesalahan yang tersembunyi.

Perhatian: "Memberikan hasil" dan "konvergensi ke hasil yang benar" dari metode numerik adalah dua hal yang berbeda. Pastikan kode menyertakan pemeriksaan konvergensi (misalnya, perbedaan antara dua langkah berturut-turut menjadi cukup kecil); Jika tidak memuatnya, mintalah kecerdasan buatan menambahkan kontrol ini.

tiga kasus mini

Kasus 1 — Pemilihan fungsi salah. Seorang siswa meminta kode kepada AI untuk menemukan akar suatu fungsi. AI menggunakan scipy.optimize.fsolve, tetapi memilih tebakan awal yang buruk dan menyatu ke akar yang salah. Siswa terlebih dahulu memeriksa fungsi tersebut dengan membuat grafiknya (lihat satuan visualisasi), memberikan tebakan awal yang benar, dan menemukan akar realnya. Pelajaran: pencari akar numerik peka terhadap titik awal.

Kasus 2 — Perangkap titik mengambang. Seorang insinyur menjalankan kode AI yang menulis jika 0,1 + 0,2 == 0,3: dan menyadari bahwa kondisi tersebut tidak pernah benar. AI telah mengabaikan presisi floating point. Kode diperbaiki dengan abs((0.1+0.2) - 0.3) < 1e-9. 1e-9 berarti "sepuluh banding minus sembilan", toleransi yang sangat kecil.

Kasus 3 - Pengujian akal sehat menemukan bug tersebut. Seorang guru menerima kode dari scipy.integrate.quad yang menghitung integral tertentu secara numerik. Dia pertama kali mengujinya dengan integral yang diketahui seperti ∫₀¹ x dx = 0,5; kode memberi 0,5. Kemudian dia menghitung integral sebenarnya dan mengkonfirmasi hasilnya dengan SymPy. Ia percaya ketika dua metode independen memberikan hasil yang sama. Total waktu: 6 menit.

Empat templat yang dapat disalin

1) Meminta kode akun numerik:

Tulis kode Python yang memecahkan masalah berikut SECARA NUMERIK: [masalah]. Gunakan NumPy/SciPy. Sensitivitas: [mis. 6 desimal]. Saya akan menjalankan kodenya; memprediksi keluarannya. Jelaskan secara singkat di baris komentar fungsi mana yang Anda pilih dan alasannya.

2) Menambahkan tes akal sehat:

Tambahkan pemeriksaan akal sehat pada kode ini untuk menguji KEBENARANnya sebelum menjalankannya: cobalah dengan input sederhana yang jawabannya sudah diketahui (misalnya root ±2 untuk x²-4=0) dan periksa apakah kode tersebut memberikan hasil yang diharapkan.Kode: [di sini]

3) Pemeriksaan silang simbolik-numerik:

Tulis kode yang menyelesaikan integral/persamaan berikut dengan KEDUA SymPy (simbolis) DAN SciPy (numerik): [masalah]. Cetak kedua hasil tersebut agar saya dapat membandingkannya. Tambahkan baris yang memeriksa perbedaan dengan abs().

4) Keamanan titik mengambang:

Tinjau perbandingan angka floating point dalam kode ini. Jika terdapat persamaan '==' yang tegas, ganti persamaan tersebut dengan toleransi yang sesuai (abs(a-b) < 1e-9) dan jelaskan alasannya. Kode: [di sini]

Perintah lemah / Perintah kuat

Lemah: "Temukan akar persamaan ini: x³ − 2x − 5 = 0. Tuliskan jawabannya."
Hasil: AI cocok dengan angka desimal (misalnya "2.0946..."). Ini mungkin benar atau mungkin tidak; Belum terverifikasi karena belum dijalankan.
Ampuh: "Tulis kode yang menemukan akar real dari persamaan x³ − 2x − 5 = 0 dengan SciPy. Untuk tebakan awal, tentukan terlebih dahulu interval di mana fungsi berubah tanda. Tambahkan baris yang menggantikan akar dan periksa apakah hasilnya adalah ~0. Saya akan melihat hasilnya."
Hasil: Kode yang dapat dieksekusi, tebakan awal yang akurat, hash bawaan. Keabsahan root sudah terbukti.

Kesalahan umum

  • Mempercayai hasil tanpa menjalankan kode. Output numerik yang “diprediksi” oleh AI bukanlah validasi.
  • Menguji kesetaraan floating point dengan `==`. Hal ini hampir selalu salah; Gunakan toleransi.
  • Ramalan awal yang buruk. Metode root/optimasi numerik sensitif terhadap titik awal; Ini mungkin menyatu ke akar yang salah.
  • Tidak mengungkapkan kepekaan. “Berapa langkah?” Kalau tidak ditanya, hasilnya mungkin tidak sesuai kebutuhan.
  • Tidak mengikuti tes akal sehat. Menerapkan kode ke masalah nyata tanpa mengujinya dengan masukan yang diketahui adalah berisiko.
  • Menjalankan kode tanpa memahaminya. Kode yang tidak Anda pahami mungkin menggunakan fungsi yang salah; memahami setiap barisnya.
Perhatian: Hasil numerik selalu merupakan perkiraan. Daripada mengatakan "hasilnya persis seperti ini", katakan "ini persis seperti itu". Dalam suatu laporan teknik atau ilmiah, menyatakan metode dan presisi yang digunakan merupakan bagian dari akurasi. Adalah menyesatkan untuk menyajikan hasil perkiraan sebagai sesuatu yang pasti.

Singkatnya

Kalkulus numerik memberikan hasil perkiraan namun praktis untuk masalah yang tidak dapat diselesaikan dengan rumus tertutup; Di Python, alatnya adalah NumPy dan SciPy. AI dengan cepat menghasilkan kode untuk perpustakaan ini, tetapi Anda harus menjalankan kode tersebut, membaca dan memahaminya, dan mengujinya dengan masukan yang diketahui. Hati-hati dengan presisi floating point: gunakan toleransi daripada persamaan eksak. Periksa silang metode simbolik dan numerik jika memungkinkan. Pengujian dan substitusi akal sehat adalah verifikasi termurah dan paling efektif.

Tugas aplikasi

Pilihlah soal yang sulit diselesaikan dengan rumus tertutup (misalnya, akar x³ − 2x − 5 = 0, atau nilai pasti integral non-elemen). Minta AI untuk mencetak kode numerik dan, jika memungkinkan, kode pemeriksaan silang simbolis-numerik dengan templat 1 dan 3. Jalankan kode tersebut di lingkungan Python yang sebenarnya. Pertama-tama lakukan tes akal sehat dengan masukan yang diketahui, lalu selesaikan masalah sebenarnya. Pastikan untuk menggunakan toleransi jika ada perbandingan floating point. Perhatikan hasilnya beserta sensitivitasnya.

daftar periksa

  • [ ] Saya mengidentifikasi masalahnya dan sensitivitas yang diperlukan.
  • [ ] Saya membaca dan memahami kode yang dihasilkan oleh AI baris demi baris.
  • [] Saya menjalankan kode di lingkungan Python nyata.
  • [ ] Saya melakukan tes akal sehat dengan masukan yang diketahui.
  • [ ] Saya telah menambahkan pemeriksaan silang simbolis/manual jika memungkinkan.
  • [] Saya menggunakan toleransi dalam perbandingan floating point.