สัมผัสแคลคูลัสด้วยความรู้สึกในการเขียนโปรแกรมของคุณ

เผยแพร่แล้ว: 2021-07-08

ฉันเชื่อว่าคนที่เขียนโค้ดได้ — มีความสามารถในการเข้าใจแนวคิดที่ซับซ้อนกว่าแคลคูลัส เหตุผลหนึ่งที่ว่าทำไมมีโปรแกรมเมอร์ที่มีความสามารถจำนวนมากที่ยังมีปัญหากับแคลคูลัสอยู่นั้นไม่ได้ยากเลย ส่วนใหญ่เป็นเพราะเราถูกสอนมาในทางที่ผิด (พร้อมกับหัวข้ออื่นๆ อีกมากมาย)

หากคุณเคยเขียนโค้ดมาในชีวิตแล้ว แม้แต่แบบฝึกหัดของเล่น เช่น การสร้างจำนวนเฉพาะ คุณอาจเคยทำสิ่งที่คล้ายกันซึ่งเกิดขึ้นในแคลคูลัสแต่ไม่มีโอกาสได้มีส่วนร่วม

วัตถุประสงค์ของการเขียนนี้ไม่ใช่เพื่อสอนแคลคูลัสหรือการเขียนโปรแกรม แต่เพื่อช่วยให้คุณเชื่อมโยงบางจุด

ฉันจะไปที่ส่วนการเข้ารหัสในไม่กี่นาที แต่ขอเล่าเบื้องหลังคร่าวๆ ก่อนว่า

อัตราการเปลี่ยนแปลง

แคลคูลัสเชิงอนุพันธ์พูดถึง "อัตราการเปลี่ยนแปลง" ลองทำความเข้าใจว่าหมายถึงอะไร

สำหรับการเปลี่ยนแปลงในตัวแปร (x) อัตราการเปลี่ยนแปลงของฟังก์ชันเป็นเพียงการเปลี่ยนแปลงในฟังก์ชันหารด้วยการเปลี่ยนแปลงใน x ให้เห็นภาพด้วยตัวเลขจริง:

พิจารณา 2 จุด x=2 และ x=6 และฟังก์ชัน y=f(x) = x²

นอกจากนี้ ให้พิจารณา dx = ระยะห่างระหว่าง 2 จุดเหล่านี้ในแกน x และ dy คือระยะห่างระหว่างค่า y สำหรับค่า x เหล่านี้

จากนั้น อัตราการเปลี่ยนแปลงของ y จาก x=2 ถึง x=6 is

ภาพแคลคูลัส01

อนุพันธ์

ทีนี้ — อนุพันธ์ dy/dx คืออัตราการเปลี่ยนแปลงของ y สำหรับการเปลี่ยนแปลงเพียงเล็กน้อยใน x เนื่องจากระยะทางนี้ (6–2=4) ไม่ได้เล็กมาก — ไม่ใกล้เลย เราจึงเรียกสมการข้างบนนี้ว่าอนุพันธ์ไม่ได้ ลองเลือกจำนวนที่น้อยกว่า 0.1 ตอนนี้

เมื่อ x = 0, y = x² = 0² = 0

เพื่อนบ้านที่ใกล้ที่สุดกับทิศทางบวก x = 0.1 โดยที่ y กลายเป็น 0.1² = 0.01

ดังนั้น,

ภาพแคลคูลัส02

มาลองกันอีกครั้ง เพื่อนบ้านที่ใกล้ที่สุดของ 0.1 ไปยังทิศทางบวก x = 0.2 ดังนั้น y กลายเป็น 0.2² = 0.04 ดังนั้น,

ภาพแคลคูลัส03

หากเราทำซ้ำอีกสองสามครั้ง นี่คือสิ่งที่เราได้รับ:

ภาพแคลคูลัส 04

นี่คือไฟล์ excel หากคุณต้องการเล่นกับมัน

dx (ซึ่งเป็นระยะห่างเล็กน้อยในจินตนาการของเราระหว่างจุดที่อยู่ติดกัน 2 จุดบนแกน x) คือ 0.1 ในบริบทของเรา

x เพิ่มขึ้นตามลำดับ

y ก็แค่ x²

dy คือระยะห่างระหว่างค่า y 2 ค่าที่อยู่ติดกัน ตัวอย่างเช่น เมื่อ x= 0.1 ระยะห่างระหว่างกระแส y (0.01 ) และ y ถัดไป (0.04) คือ 0.03 ดังนั้น dy คือ 0.03 ที่ x=0.1

dy/dx คือ dy หารด้วย dx

dy/dx / x คือ dy/dx หารด้วย x

สังเกตว่า เมื่อ x เพิ่มขึ้น แถวสุดท้ายจะเข้าใกล้ 2 ซึ่งหมายความว่า — อัตราการเปลี่ยนแปลงของ x² เทียบกับ x กำลังเข้าใกล้สองเท่าของ x ซึ่งเท่ากับ 2x

จำอนุพันธ์ของ x² เทียบกับ x ได้ไหม 2x! กำลังหาการเชื่อมต่อ?

เวลาเข้ารหัส

มาลองทำสิ่งต่าง ๆ ในโค้ดที่เราได้พูดคุยกันถึงตอนนี้

สมมติว่าคุณติดตั้ง Python ไว้แล้วในเทอร์มินัล ให้รัน:

pip ติดตั้ง matplotlib

หลังจากนั้นให้รันโค้ด Python ต่อไปนี้:

ที่นี่:

x : มีตัวเลขตั้งแต่ 0 ถึง 9

y : อาร์เรย์อื่น แต่ละองค์ประกอบเป็นกำลังสองขององค์ประกอบ x ที่สอดคล้องกัน

dy : อาร์เรย์อื่นเริ่มต้นด้วยศูนย์ เราจะใส่ระยะ y ในอาร์เรย์นี้

dydx : อาร์เรย์อื่นเริ่มต้นด้วยศูนย์ มันจะมีค่า dy/dx ของทุกจุด

dx : ค่อนข้างชัดเจน — มันคือขนาดขั้นตอน ระยะห่างระหว่างตัวเลข 2 ตัวติดต่อกัน ซึ่งจะลดลงเมื่อ SIZE เพิ่มขึ้น ถ้าขนาด = 10 dx = 1 ถ้าขนาด = 100 dx = 0.1

อันดับแรก เราได้รับ dy ทุกจุด จากนั้นเราคำนวณ dydx จากมัน

สังเกตว่า:

ภาพแคลคูลัส 05

ที่นี่เรากำลังละเว้นค่าแรกและค่าสุดท้าย ค่าแรกของ x คือ 0 ซึ่งจะทำให้เกิดข้อผิดพลาดในการแบ่งศูนย์ และเราไม่สามารถคำนวณค่าสุดท้ายของ dy/dx ได้ เนื่องจากเราไม่มีค่าสุดท้ายของ dy — เพราะมันต้องการถัดจากค่าที่มีสุดท้ายของ y ซึ่งเราไม่มีที่นี่

หากทุกอย่างเป็นไปด้วยดี คุณจะได้กราฟนี้:

กราฟแคลคูลัส

สิ่งที่คุณเข้าใจจากโครงเรื่อง

อย่างที่คุณเห็น กราฟกำลังเข้าใกล้ 2 เพิ่มค่าของ SIZE (หมายถึงการตั้งค่าต่ำกว่า dx) และดูว่ากราฟเข้าใกล้ 2 เร็วขึ้นได้อย่างไร

อนุพันธ์อันดับสอง

ตอนนี้คุณมาไกลถึงขนาดนี้แล้ว อีกไม่กี่ขั้นตอนเพื่อทำความเข้าใจอนุพันธ์อันดับสอง ซึ่งจะทำให้คุณได้สัญชาตญาณสำหรับอนุพันธ์ของคำสั่งใดๆ

อย่างที่คุณจำได้ อนุพันธ์อันดับสองคืออัตราการเปลี่ยนแปลงของอนุพันธ์อันดับหนึ่งเทียบกับ x พูดง่ายๆ — dy/dx ในอนุพันธ์อันดับสองก็เหมือน y ในอนุพันธ์อันดับหนึ่ง

มาทำการแก้ไขต่อไปนี้กับโค้ดด้านบน:

ประกาศ 2 อาร์เรย์เพิ่มเติม:

d2ydx2 : ซึ่งจะเป็นตัวแทนของอนุพันธ์อันดับสอง:

ภาพแคลคูลัส 06

Distance_dydx: เพื่อแสดงระยะห่างระหว่างค่า dy/dx ระหว่าง 2 จุดที่อยู่ติดกัน

นี่คือรหัสเต็มสำหรับอนุพันธ์อันดับสอง:

หลังจากคำนวณ dydx ในลูป for แล้ว เราจะรันลูปอื่นเพื่อคำนวณอนุพันธ์อันดับสอง ด้วยการเข้ารหัสที่ชาญฉลาด เราสามารถคำนวณอนุพันธ์อันดับสองในวงเดียวกัน (ลองทำแบบฝึกหัด) — แต่ฉันแยกมันไว้ที่นี่เพื่อความชัดเจน

นอกจากนี้ ให้สังเกตว่า:

ภาพแคลคูลัส 07

อย่างที่เราทำในอนุพันธ์อันดับ 1 เรากำลังละเว้นค่าบางค่าที่นี่ด้วย ค่า 2 ค่าสุดท้ายจะถูกละเว้นเนื่องจากค่าที่สองจากค่าสุดท้ายจะต้องใช้ค่า "อนุพันธ์อันดับแรก" ล่าสุด ซึ่งเราไม่สามารถคำนวณได้ (เนื่องจากเราไม่มีค่า y ที่จำเป็นสำหรับค่าดังกล่าว — ตามที่อธิบายข้างต้น) หมายความว่าเราต้องละเว้น 3 ค่าสุดท้ายในกรณีของอนุพันธ์อันดับ 3 หรือไม่🤔 — นั่นคือให้คุณค้นหา

นี่คือกราฟผลลัพธ์:

กราฟแคลคูลัส 02

เราเห็นอะไรที่นี่?

อย่างที่คุณรู้จากโรงเรียนมัธยม:

ภาพแคลคูลัส 08

อย่างที่คุณเห็นจากโค้ดด้านบน อนุพันธ์อันดับสองส่วนใหญ่คงที่ และถ้าคุณเพิ่ม SIZE ไปเรื่อย ๆ มันจะเข้าใกล้ 2!

ทำไมอัตราการเปลี่ยนแปลงจึงสำคัญ

คุณอาจสงสัยว่า:

— ทำไมเราถึงผ่านปัญหาที่น่ารังเกียจเหล่านี้ทั้งหมด? เราได้ข้อมูลที่เป็นประโยชน์อะไรบ้างจากอัตราการเปลี่ยนแปลงหรืออนุพันธ์?

— ทำไมเราไม่สามารถไปกับอัตราการเปลี่ยนแปลงสำหรับจำนวนเท่าใดก็ได้? ทำไมจึงเล็กนิดเดียว? เราได้รับข้อมูลอะไรบ้างจากอัตราการเปลี่ยนแปลงเมื่อเทียบกับ ค่าขนาดเล็กที่ไม่สิ้นสุด ซึ่งไม่สามารถหาได้จากอัตราการเปลี่ยนแปลงเมื่อเทียบกับค่าที่มากกว่า

— สิ่ง เล็ก ๆ น้อย ๆ นี้ดูเหมือนแฮ็ค? เราทำงานกับตัวเลขเล็กๆ ด้านบนนี้ แต่แน่นอนว่าไม่ใช่จำนวนที่น้อยมาก

ถ้าฉันยอมให้ไปต่อ เธอคงเดินจากไปเห็นความยาวของบทความนี้ และคงไม่มาไกลถึงขนาดนี้ บางทีเราจะตอบคำถามเหล่านั้นในวันอื่น😀