บทความนี้ไม่มีจาก |
บทความนี้หรือส่วนนี้ของบทความต้องการปรับรูปแบบ ซึ่งอาจหมายถึง ต้องการจัดรูปแบบข้อความ จัดหน้า แบ่งหัวข้อ และ/หรือการจัดระเบียบอื่น ๆ คุณสามารถช่วยแก้ไขปัญหานี้ได้โดยการกดที่ปุ่ม แก้ไข ด้านบน จากนั้นปรับปรุงหรือจัดรูปแบบอื่น ๆ ในบทความให้เหมาะสม |
การแบ่งครึ่งช่วง (อังกฤษ: Bisection method) คือการแบ่งออกเป็นสองส่วนเท่ากันในคณิตศาสตร์เป็นวิธีการหารากที่ซ้ำ ๆ การแบ่งออกเป็นสองส่วนเท่ากันช่วงเวลาและจากนั้นเลือกช่วงย่อยซึ่งรากต้องอยู่ในแนวแกน X สำหรับการประมวลผลต่อไป เป็นวิธีที่ง่ายและมีประสิทธิภาพ แต่ยังค่อนข้างช้า ด้วยเหตุนี้มันจึงมักใช้เพื่อหาแนวทางในการแก้ปัญหาโดยประมาณซึ่งใช้เป็นจุดเริ่มต้นของวิธีการบรรจบกันอย่างรวดเร็วมากขึ้น วิธีการนี้เรียกว่าวิธีการลดช่วงเวลา วิธีการค้นหาแบบไบนารี
กระบวนการ
การเตรียมฟังก์ชัน : จัดรูปให้ฟังก์ชันอยู่ในรูป f(x) = 0
ลำดับที่ 1: ทำการเดาจุดสองจุดคือค่า Xl และค่า Xuสมมุติว่าค่า Xl เป็นค่าที่ต่ำกว่าจากนั้นทดสอบว่า f(Xl) f(Xu) < 0 ถ้าไม่ใช้ให้หาจุดใหม่ซึ่งจากขั้นตอนนี้ เรารู้ว่ารากจะต้องอยู่ในช่วงนี้
ลำดับที่ 2: ทําการประมาณค่า Root ที่ต้องการที่จุดกึ่งกลางระหว่างสองค่าใน Step 1 โดยคํานวณ
ลำดับที่ 3: หาว่าตอนนี้ Root ที่ต้องการอยู่ในครึ่งไหนดังนี้
3.1) ถ้า f(Xl) f(Xr) < 0 แสดงว่า Root ที่ต้องการอยู่ในครึ่งล่าง ให้ตั้ง Xu= Xr และกลับไปทํา ลำดับที่ 2
3.2) ถ้า f(Xl) f(Xr) > 0 แสดงว่า Root ที่ต้องการอยู่ในครึ่งบน ให้ตั้ง Xl = Xr และกลับไปทํา ลำดับที่ 2
3.3) ถ้า f(Xl) f(Xr) = 0 แสดงว่าคําตอบที่ต้องการเท่ากับ X
อัลกอริทึม
จากกระบวนการ จะสามารถเขียนเป็นภาษาโปรแกรมไพทอนได้ดังนี้
# มีรากเดียว def fn(x): return x**3 + 5*x - 9 # กำหนดวิธีการแบ่งช่วง def bisection( eq, segment, app = 0.3 ): a, b = segment['a'], segment['b'] Fa, Fb = eq(a), eq(b) if Fa * Fb > 0: raise Exception('No change of sign - bisection not possible') while( b - a > app ): x = ( a + b ) / 2.0 f = eq(x) if f * Fa > 0: a = x else: b = x return x #test print(bisection(fn, {'a':0,'b':5}, 0.00003)) # => 1.32974624634
ตัวอย่าง: การหารากของพหุนาม
สมมติว่ามีการใช้วิธีการแบ่งครึ่งช่วง เพื่อหารากของพหุนาม
ประการแรกต้องใช้ตัวเลขสองตัว a และ b เพื่อให้ f(a) และ f(b) มีสัญญาณตรงกันข้าม สำหรับฟังก์ชันข้างต้น a = 1 และ b = 2
เป็นไปตามเกณฑ์นี้เช่น
และ
เนื่องจากฟังก์ชันเป็นแบบต่อเนื่องต้องมีรากภายในช่วง [1, 2] ในจุดเริ่มต้นจุดสิ้นสุดของช่วงที่วงเล็บรากเป็น a1 = 1 และ b1 = 2 ดังนั้นจุดกึ่งกลางคือ
ค่าฟังก์ชันที่จุดกึ่งกลางคือ f(c1) = (1.5)3 - (1.5) - 2 = -0.125 เนื่องจาก f(c1) เป็นค่าลบ a = 1 จะถูกแทนที่ด้วย a = 1.5 สำหรับการทำซ้ำถัดไปเพื่อให้แน่ใจว่า f(a) และ f(b) มีสัญญาณที่ตรงกันข้าม เช่นนี้ยังคงช่วงระหว่าง a และ b จะกลายเป็นเล็กมากขึ้นบรรจบกับรากของฟังก์ชัน ดูสิ่งนี้เกิดขึ้นในตารางด้านล่าง
wikipedia, แบบไทย, วิกิพีเดีย, วิกิ หนังสือ, หนังสือ, ห้องสมุด, บทความ, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม, มือถือ, โทรศัพท์, Android, iOS, Apple, โทรศัพท์โมบิล, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, พีซี, web, เว็บ, คอมพิวเตอร์
bthkhwamniimmikarxangxingcakaehlngthimaidkrunachwyprbprungbthkhwamni odyephimkarxangxingaehlngthimathinaechuxthux enuxkhwamthiimmiaehlngthimaxacthukkhdkhanhruxlbxxk eriynruwacanasaraemaebbnixxkidxyangiraelaemuxir bthkhwamnihruxswnnikhxngbthkhwamtxngkarprbrupaebb sungxachmaythung txngkarcdrupaebbkhxkhwam cdhna aebnghwkhx cdlingkphayin aela hruxkarcdraebiybxun khunsamarthchwyaekikhpyhaniidodykarkdthipum aekikh danbn caknnprbprunghruxcdrupaebbxun inbthkhwamihehmaasm karaebngkhrungchwng xngkvs Bisection method khuxkaraebngxxkepnsxngswnethakninkhnitsastrepnwithikarharakthisa karaebngxxkepnsxngswnethaknchwngewlaaelacaknneluxkchwngyxysungraktxngxyuinaenwaekn X sahrbkarpramwlphltxip epnwithithingayaelamiprasiththiphaph aetyngkhxnkhangcha dwyehtunimncungmkichephuxhaaenwthanginkaraekpyhaodypramansungichepncuderimtnkhxngwithikarbrrcbknxyangrwderwmakkhun withikarnieriykwawithikarldchwngewla withikarkhnhaaebbibnarikrabwnkarkaretriymfngkchn cdrupihfngkchnxyuinrup f x 0 ladbthi 1 thakaredacudsxngcudkhuxkha Xl aelakha Xusmmutiwakha Xl epnkhathitakwacaknnthdsxbwa f Xl f Xu lt 0 thaimichihhacudihmsungcakkhntxnni eraruwarakcatxngxyuinchwngni ladbthi 2 thakarpramankha Root thitxngkarthicudkungklangrahwangsxngkhain Step 1 odykhanwn ladbthi 3 hawatxnni Root thitxngkarxyuinkhrungihndngni krafaesdngkha F an ekhaikl 0 3 1 tha f Xl f Xr lt 0 aesdngwa Root thitxngkarxyuinkhrunglang ihtng Xu Xr aelaklbiptha ladbthi 2 3 2 tha f Xl f Xr gt 0 aesdngwa Root thitxngkarxyuinkhrungbn ihtng Xl Xr aelaklbiptha ladbthi 2 3 3 tha f Xl f Xr 0 aesdngwakhatxbthitxngkarethakb X xlkxrithum cakkrabwnkar casamarthekhiynepnphasaopraekrmiphthxniddngni mirakediyw def fn x return x 3 5 x 9 kahndwithikaraebngchwng def bisection eq segment app 0 3 a b segment a segment b Fa Fb eq a eq b if Fa Fb gt 0 raise Exception No change of sign bisection not possible while b a gt app x a b 2 0 f eq x if f Fa gt 0 a x else b x return x test print bisection fn a 0 b 5 0 00003 gt 1 32974624634 twxyang karharakkhxngphhunam smmtiwamikarichwithikaraebngkhrungchwng ephuxharakkhxngphhunam f x x3 x 2 displaystyle f x x 3 x 2 prakaraerktxngichtwelkhsxngtw a aela b ephuxih f a aela f b misyyantrngknkham sahrbfngkchnkhangtn a 1 aela b 2 epniptameknthniechn f 1 1 3 1 2 displaystyle f 1 1 3 1 2 aela f 2 2 3 2 4 displaystyle f 2 2 3 2 4 enuxngcakfngkchnepnaebbtxenuxngtxngmirakphayinchwng 1 2 incuderimtncudsinsudkhxngchwngthiwngelbrakepn a1 1 aela b1 2 dngnncudkungklangkhux c1 2 12 1 5 displaystyle c 1 frac 2 1 2 1 5 khafngkchnthicudkungklangkhux f c1 1 5 3 1 5 2 0 125 enuxngcak f c1 epnkhalb a 1 cathukaethnthidwy a 1 5 sahrbkarthasathdipephuxihaenicwa f a aela f b misyyanthitrngknkham echnniyngkhngchwngrahwang a aela b caklayepnelkmakkhunbrrcbkbrakkhxngfngkchn dusingniekidkhunintarangdanlang