สมการเชิงอนุพันธ์ในภาษา C++

Jan 03 2023
บทความต่อไปนี้อธิบายวิธีที่มีประสิทธิภาพที่สุดวิธีหนึ่งในการแก้สมการเชิงอนุพันธ์ ฉันจะแก้สมการเชิงอนุพันธ์อันดับที่หนึ่งและอันดับสองแบบง่ายๆ โดยใช้วิธี Runge Kutta ซึ่งฉันได้กล่าวถึงที่นี่ด้วย
กูเกิลดอทคอม

บทความต่อไปนี้อธิบายวิธี การที่มีประสิทธิภาพที่สุดวิธีหนึ่งในการแก้สมการเชิงอนุพันธ์ ฉันจะแก้สมการเชิงอนุพันธ์ อันดับ
ที่หนึ่งและอันดับสองแบบง่ายๆ โดยใช้วิธี Runge Kuttaซึ่งฉันได้กล่าวถึงที่นี่ ด้วย

ซอร์สโค้ดสำหรับบทความนี้คุณจะพบในGitHub ของ ฉัน

วิธีรังเง-คุตตะ

วิธีต่อไปนี้เป็นวิธีที่ใช้บ่อยที่สุดในการแก้สมการเชิงอนุพันธ์สามัญ วิธี Runge-Kutta มีประสิทธิภาพดีกว่าวิธีเชิงตัวเลขอื่นๆ เนื่องจากนำไปใช้ได้ง่าย แม่นยำ และมักจะมีความเสถียร และสามารถแก้ไขได้ด้วยการระบุค่าเริ่มต้นหนึ่งค่า

มีเมธอดลำดับ n ซึ่งระบุจำนวนครั้งที่เราคำนวณฟังก์ชัน f (t, x(t)) อย่างไรก็ตาม วิธีที่นิยมมาก ที่สุดและอธิบายไว้ด้านล่างคือวิธีลำดับที่สี่

อย่างที่คุณเห็น ในแต่ละขั้นตอนของเวลา เราต้องหาค่าสัมประสิทธิ์ k1, k2, k3 และ k4

ส่วนที่สำคัญที่สุดในการแก้สมการเชิงอนุพันธ์โดยใช้วิธี Runge-Kutta คือการเข้าใจวิธีการปรับใช้สมการ
ฉันสามารถแสดงตัวอย่างรหัสจำลองซึ่งฉันหวังว่าจะให้สัญชาตญาณแก่คุณ
อย่างที่คุณเห็น มีสมการเชิงอนุพันธ์สองสมการของลำดับที่หนึ่ง ตอนนี้คุณต้องสร้างสองฟังก์ชันที่คืนค่าด้านซ้ายของสมการเชิงอนุพันธ์

ที่นี่เราแก้ปัญหาออสซิลเลเตอร์ของ Van der Pol

ภาพประกอบการแก้สมการเชิงอนุพันธ์ (โดยผู้เขียน)

สามารถอธิบายวิธีแก้ปัญหาได้ดังนี้

วิธีแก้ปัญหาของ Van der Pol oscillator (โดยผู้เขียน)

สำหรับสมการเชิงอนุพันธ์อันดับสองคุณต้องเพิ่มสมการด้วย โดยที่คุณแก้อนุพันธ์อันดับหนึ่ง

ภาพประกอบการแก้สมการเชิงอนุพันธ์ (โดยผู้เขียน)

สามารถอธิบายวิธีแก้ปัญหาได้ดังนี้

คำตอบของสมการเชิงอนุพันธ์อันดับสอง (โดยผู้เขียน)

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

//compile
g++ my_prog.cpp -o my_prog -I/usr/include/python3.8 -lpython3.8//

 //run
./my_prog

//folder tree

├── my_prog
├── my_prog.cpp
├── matplotlibcpp.h