การหารากของสมการ f(x) =...

54
หนวยที 2 การหารากของสมการ f(x) = 0 2.1 บทนํ เมื ่อกํ าหนดให f(x) = 0 .....(2.1) โดยที่ f(x) เปนฟงชันตอเนื่อง ( Continuous function ) และเปนฟงชันไมเปนเชิงเสน ( nonlinear function ) ตองการหาคา x ที ่สอดคลองกับสมการที (1) ตัวอยางของ (1) จะแบงออกไดเปน 2 กลุ มคือ กลุม 1 ฟงกชันผสมของฟงชันพีชคณิต ( Algebraic) กับ ฟงชันอดิศัย (transcendental) เชน e – x – x = 0 x + cos (x) = 0 sin (x) – x + 0.5 = 0 x 2 + x - 2 = 0 x 2 – ln (x) – 2 = 0 กลุม 2 ฟงชันพหุนาม ( Polynomial) เชน x 5 15.5x 4 + 77.5x 3 15.5x 2 + 124x – 32 = 0 รากของสมการคือคาตัวแปรของสมการซึ่งเมื่อนํ าไปแทนคาลงในสมการแลวไดคาสมการเทา กับศูนย เชน สมการ f(x) = x 3 – 3x + 1 สามารถเขียนกราฟไดดังรูปที่ 2.1 รูปที่ 2.1 กราฟของ f(x) = x 3 - 3x + 1 จะเห็นวากราฟของฟงชัน f(x) ในรูปที่ 2.1 ตัดผานแกน x หรือ f(x) = 0 ที่คา x = -1.8, 0.3, 1.5 เมื่อ พิจารณาในชวงคาของ x = -2 ถึง 2.5 และเมื ่อพิจารณาในชวงคาของ x = 0 ถึง 2 กราฟ f(x) จะตัดแกน x ที่คา x = 0.3, 1.5 ซึ ่งคาดังกลาวนี ้เมื ่อนํ าไปแทนในสมการแลวจะทํ าให f(x) = 0 เราเรียกคาตาง นี ้วา รากของสมการ จากการแบงสมการขางตนทั ้งสองกลุ มตางก็เปนสมการไมเปนเชิงเสนที ่มี x เปนตัวแปรเพียงตัวเดียว ในการหาคารากของสมการเหลานี ้ถาเปนสมการที ่มีกํ าลังเปน 2 หรือ 3 เราสามารถที ่จะคํ านวณไดไมยากนัก แตถา มีเทอมของลอการิทึม หรือเอกโปเนนเชียลอยูดวยอาจจะตองใชเวลามากเมื่อคํ านวณโดยไมใชเครื ่องคํ านวณชวย !" !#$% !# !&$% & &$% # #$% " "$% !" & " ( ) #& * + +,* - !-*/#

Upload: others

Post on 18-Oct-2019

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2การหารากของสมการ f(x) = 0

2.1 บทน าเมอก าหนดให f(x) = 0 .....(2.1)โดยท f(x) เปนฟงชนตอเนอง ( Continuous function ) และเปนฟงชนไมเปนเชงเสน ( nonlinear

function ) ตองการหาคา x ทสอดคลองกบสมการท (1) ตวอยางของ (1) จะแบงออกไดเปน 2 กลมคอกลม 1 ฟงกชนผสมของฟงชนพชคณต ( Algebraic) กบ ฟงชนอดศย (transcendental) เชน

e – x – x = 0x + cos (x) = 0

sin (x) – x + 0.5 = 0x2 + x - 2 = 0x2 – ln (x) – 2 = 0

กลม 2 ฟงชนพหนาม ( Polynomial) เชนx5 – 15.5x4 + 77.5x3 – 15.5x2 + 124x – 32 = 0

รากของสมการคอคาตวแปรของสมการซงเมอน าไปแทนคาลงในสมการแลวไดคาสมการเทากบศนย เชน สมการ f(x) = x3 – 3x + 1 สามารถเขยนกราฟไดดงรปท 2.1

รปท 2.1 กราฟของ f(x) = x3 - 3x + 1

จะเหนวากราฟของฟงชน f(x) ในรปท 2.1 ตดผานแกน x หรอ f(x) = 0 ทคา x = -1.8, 0.3, 1.5 เมอพจารณาในชวงคาของ x = -2 ถง 2.5 และเมอพจารณาในชวงคาของ x = 0 ถง 2 กราฟ f(x) จะตดแกน x ทคา x = 0.3, 1.5 ซงคาดงกลาวนเมอน าไปแทนในสมการแลวจะท าให f(x) = 0 เราเรยกคาตาง ๆ นวา รากของสมการ

จากการแบงสมการขางตนทงสองกลมตางกเปนสมการไมเปนเชงเสนทม x เปนตวแปรเพยงตวเดยว ในการหาคารากของสมการเหลานถาเปนสมการทมก าลงเปน 2 หรอ 3 เราสามารถทจะค านวณไดไมยากนก แตถามเทอมของลอการทม หรอเอกโปเนนเชยลอยดวยอาจจะตองใชเวลามากเมอค านวณโดยไมใชเครองค านวณชวย

!" !#$% !# !&$% & &$% # #$% " "$%!"

&

"

'

(

)

#&

*

+

+,* - !.-.*./.#

Page 2: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 27

พจารณาจากคาของ f(x) เมอเราแทนคา x ลงในสมการจะไดคา f(x) ซงแปรตามคา x สามารถใชเครองหมายของคาฟงชน f(x) คอเมอเครองหมายเปลยนจาก บวก(+) เปน ลบ(-) หรอตรงกนขามชวยใหเราสามารถประมาณไดวาคารากของสมการอยระหวางคา x ทอยใกลกนโดยพจารณาทมเครองหมายของ f(x) เปลยน จะท าใหสามารถหาคา x (รากของสมการ) ทเมอน ามาแทนลงในสมการ f(x) แลวท าให f(x) = 0 ไดเรวขนเพราะไมตองทดลองแทนดวยคา x ทกคา ซงวธการนเราจะน ามาใชเปนล าดบขนตอนวธเชงตวเลขเพอเขยนโปรแกรมหาคารากของสมการโดยน ามาใชก าหนดเงอนไขส าหรบตรวจเชคเครองหมายของคา f(x) ทค านวณออกมาได ซงมวธการหาคารากสมการหลายวธคอ วธแบงสองชวง และวธต าแหนงผดเปนการหารากสมการโดยการประมาณคาเปนชวง ๆ สวนวธนวตนราฟสน และวธเสนตดโคงจะเปนวธทใชความชนของเสนตรง และการท าซ าจนไดคารากสมากรทตองการออกมาซงจะกลาวถงตอไป2.2 วธกราฟ

จาก f(x) = 0เราจะแยก f(x) ออกเปน f(x) = f1(x) – f2(x)เขยนกราฟของ y = f1(x) , y = f2(x) โดยใชแกนและสเกลเดยวกน ตรวจดวา กราฟทงสองตดกนทใด

รปท 2.2จดตด A มพกด (x* , f(x*))นนคอ f1(x*) = f2(x*)

f1(x*) + f2(x*) = 0f(x*) = 0

แสดงวา x* เปนรากจรงของ f(x) = 0เพอความสะดวกและเขยนกราฟไดรวดเรว ควรเลอกใช f1(x), f2(x) ใหเปนฟงกชนทเขยนกราฟไดงาย

ตวอยาง 2.1 จงหาต าแหนงรากจรงอยางหยาบ ๆ ของฟงชนตอไปนคอ1. 3xex = 12. sin (x) – x + 0.5 = 03. x2 – ln(x) – 2 = 0

A (x*, f(x*))

y= f1(x)

y= f2(x)x

y=f(x)

0

Page 3: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

28 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

วธท า 1. 3xex = 1 สามารถเขยนเปน 3x = e– x แยกสมการเพอเขยนกราฟได y = 3x และ y = e– x

รปท 2.32. sin (x) – x + 0.5 = 0

sin (x) = x – 0.5เขยนกราฟของ y = sin(x) และ y = x – 0.5

รปท 2.43. x2 – ln(x) – 2 = 0

x2 – 2 = ln(x)เขยนกราฟของ y = x2 – 2 และ y = ln(x)

รปท 2.5มรากจรง 2 ตว คอ ตวท 1 x ≈ 0.2

ตวท 2 x ≈ 1.6

y= 3 xy= ex

x

y=f(x)

0 1 2-1-2x~ 0.25

y= x - 0.5

x

y=f(x)

1 2 3-3 -2 -1

1

2

y= sin(x)

-1

x~1.5

y= x2 - 2

x

y=f(x)

y=x2

- 2 y= ln( x)

1 2 3-1-2-3

1

2

3

-1

-2

x= 0.2

x= 1.6

Page 4: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 29

2.3 วธแบงสองชวง(Bisection Method) บางครงเรยกวธแบงครงชวง (Half interval method) ซงมวธหารากของสมการ f(x) = 0 ทมความตอเนองบนชวง (x1,x2) ดงนคอ

รปท 2.6 การเลอกชวง x1 x2

ขนท 1 พจารณาเลอกชวงของ (x1,x2) ท f(x) มความตอเนองในชวงของ (x1,x2) แลวมการเปลยนแปลงเครอง

หมายของ f(x) แสดงวามคารากของสมการ ทท าให f(x) = 0 อยในชวงของ (x1,x2) เชน คารากของสมการ y = x2 – 2

รปท 2.7 ประมาณคารากของสมการ y = x2 – 2 อยในชวง x = 1.2 และ x = 1.5

พจารณาจากกราฟจะเหนวากราฟตดแกน x หรอ f(x) = 0 ทคา x ประมาณมากวา 1.2 แตนอยกวา 1.5 ซงคาของ f(1.2) มคาเปนลบ และคาของ f(1.5) มคาเปนบวก นนคอ

ถาก าหนดใหพจารณาในชวง x1= 1.2 และ x2 = 1.5 แลวจะไดวา1.2 < 1.5 และ f(1.2) * f(1.5) ≤ 0

ถา f(x1)*f(x2) = 0 เมอเงอนไขนเปนจรงจะไดวา คา x1 หรอ x2 เปนรากของสมการ

ขนท 2 ถา f(x1)*f(x2) ≤ 0 ใหก าหนดคา x คาใหมเปน xm = (x1 + x2) / 2 ในทนคอ

(x1, f(x1))

(x2, f(x2))

x2xnxmx1

(x1, f(x1))

(x2, f(x2))

x2

xnxm

x1

& &$% # #$% " "$%!"

!#

&

#

"

-

'

%

Page 5: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

30 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

xm = (1.2 + 1.5 ) / 2 = 2.7 / 2 = 1.35

ซงอาจจะไดคา f(xm) = 0 หรอ f(xm)*f(x1) < 0 หรอ f(xm)*(x2) < 0 กได

กรณทถาแทนคา xm ลงในสมการแลวท าให f(xm) = 0 แสดงวา xm เปนรากของสมการ

แตจากสมการนได f(xm) = (1.35)2 – 2 = - 0.1775 นนคอ f(xm) มเครองหมายลบ คอ f(xm)<0 ดงนนเราจะใชเงอนไขดงกลาวขางตนชวยในการหาคารากของสมการในวธแบงสองชวงดงน

กรณ f(xm) = 0 จะไดวา xm คอรากของสมการ

กรณ f(x1)*f(xm) < 0 หมายความวารากของสมการอยในชวง x1 และ xm จะแทนคา x2

เดมดวยคา xm (แทน 1.5 ดวย 1.35) แลวท าซ าหาคาใหม จาก (x1+xm) / 2 แลวตรวจดวาเขาเงอนไขกรณใด

กรณ f(xm)*f(x2) < 0 หมายความวารากของสมการอยในชวง xm และ x2 จะแทนคา x1เดมดวยคา xm (แทน 1.2 ดวย 1.35) แลวท าซ าหาคาใหม จาก (xm+x2) / 2 แลวตรวจดวาเขาเงอนไขดงกลาวขางตนกรณใด

จะพจารณาเหนวาชวงทครอบคลมรากของสมการจะแคบลง จนสดทายจะไดคารากสมการทท าให f(x) = 0 หรอบางครงอาจเลอกคาทท าให f(x) มคาเขาใกล 0 มาก ๆ หรอเทากบคายอมรบ คาดงกลาวถอวาเปนรากของสมการ บางครงอาจก าหนดใหเปนคาคลาดเคลอน เชน ถอวา x เปนรากของสมการเมอคาสมบรณของ สมการ f(x) < 0.0001 เมอเรายอมรบไดวา 0.0001 ≈ 0

วธการทกลาวมานเปนขนตอนวธเชงเลขส าหรบหาคารากของสมการเรยกวาวธแบงสองชวง หรอ วธแบงครงชวง น ามาเขยนเปนขนตอนการค านวณ (Algorithm) ไดดงนล าดบขนตอน 2.1 วธแบงสองชวง (Bisection Method)

1. ก าหนดคาเรมตน x1, x2 คาขอบเขต ε = n105.0 −× ( n = จ านวนหลกตวเลขทศนยม)

2. ตรวจสอบวา f(x1), f(x2) มเครองหมายตรงกนขามหรอไม ดวยการใชเงอนไข

f(x1) ⋅ f(x2) < 0 ?

ถาใชท าขนตอไป ถาไมใชกหยดการกระท าแสดงวาไมมรากในชวง (x1, x2)

3. ค านวณ xm = 2xx 21 + ....( 2.2 )

4. แทนคา xm ในฟงชน ถา |f(xm)| < ε หยดเพราะพบคารากแลว มฉะนนท าขนตอนตอไป

5. ตรวจสอบวา ชวงยอยใด มรากของ f(xm) = 0 โดยการใชเงอนไข

ถา f(x1) ⋅ f(xm) < 0 แทน x2 ดวย xm แลวยอนกลบไปท าขน 3

มฉะนนแทน x1 ดวย xm แลวยอนกลบไปท าขน 3

Page 6: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 31

โฟวลชารท 2.1 (Bisection Method)

รปท 2.8 โฟลวชารทของวธแบงสองชวง

ตวอยาง 2.2 จงหารากของสมการ 3xex = 1 ตองการค าตอบมทศนยมถกตอง 4 ต าแหนงวธคด 3xex = 1

คณดวย e – x จะได 3x = e – x หรอ 3x – e – x = 01. check ; x = 0.25 ; f(x) = -0.028801 < 0

x = 0.26 ; f(x) = 0.008948 > 9แสดงวามรากจรงในชวง (0.25, 0.26)จะได x1 = 0.25 และ x2 = 0.26

แสดงผลทไดจากการท าซ าโดยวธแบงสองชวงดงตารางท 2.1

START

read data : x1, x2, εdefine function : f(x)

f(x1)f(x2) < 0 exitNo

STOPYes

n = 0

xm= (x1 + x2) / 2

n = n + 1

|f(xm)| < ε Yesprint : n, x1, x2, xm, f(x1),f(x2),f(xm)

STOPNo

print : n, x1, x2, xm, f(x1),f(x2),f(xm)

f(x1)f(xm) < 0Yes

No

x2:= x

x1:= x

Page 7: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

32 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

ตารางท 2.1 ผลการท าซ าดวยวธแบงสองชวง ( ตวอยางท 2.2 )n x1 x2 xm = 2

xx 21 + f(x1) f(xm)1 0.25 0.26 0.255 –0.028801 –0 .0099162 0.255 0.26 0.2575 –0.009916 –0.0004823 0.2575 0.26 0.25875 –0.000482 –0.0042344 0.2575 0.25875 0.257125 –0.000482 –0.0018765 0.2575 0.258125 0.257813 –0.000482 –0.0006896 0.2575 0.257813 0.257657 –0.000482 –0.0001097 0.2575 0.257657 0.257579 –0.000482 –0.0001858 0.257579 0.257657 0.257618 –0.000185 –0.0000369 0.257618 0.257657 0.257638 –0.000036 –0.000039

ค าตอบ x = 0.2576

ความมประสทธภาพ วธแบงสองชวงนสะดวกทจะน าไปใชเขยนโปแกรมใหคอมพวเตอรค านวณ เพราะเปนวธทงาย และลเขาหาค าตอบแนนอน ถาเงอนไขเปนจรงคอ f(x) มความตอเนองในชวง [x1,x2 ] และถา f(x1) f(x2) < 0 แสดงวา

f(x1) และ f(x2) มเครองหมายตรงกนขาม ดงนนสมการ f(x) = 0 จะมรากอยางนอยหนงคาในชวง [x1,x2 ]ความผดพลาดกอาจเกดขนได เนองจากการสะสมคาคลาดเคลอนในการค านวณแตละรอบ อาจท าให

f(x) ณ จดแบงครงชวง xn เปนคาลบทมขนาดเลกมาก แตในความเปนจรง xn อาจเปนคาบวกทชนดเลกมาก

(และในทางกลบกน) จงเปนเหตใหการเลอกชวงยอยตอไปผดพลาดได เพอใหไดคา xn ทมความแมนย าเพยงพอ

ระเบยบวธนเหมาะจะใชในกรณท f(x) มเครองหมายเปลยนไปแตละ xn แตระเบยบวธนใชไมไดกบรากซ าพจารณารปท 2.9 ทต าแหนง x = 2 อกประการหนง ถาสมการ f(x) = 0 มราก 2 คาทอยใกลเคยงกนมาก กไมเหมาะจะใชระเบยบวธน เพราะอาจค านวณขามไปไดหรออาจขามไมได เชน ทต าแหนง x = 1 และ x = 2 ถาทงสองจดแทนทจะหางกนเทากบ 1 แตหางกนเปน 0.1 หรอ 0.01 เปนตน

& &$% # #$% " "$% - -$%!'

!-

!"

!#

&

#

"

-

'

%

(

รปท 2.9 รากสองคาใกลเคยงกนมาก และท x = 2 มรากซ า

Page 8: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 33

ระเบยบวธนลเขาหาค าตอบคอนขางชา ทงนเพราะหลงการกระท าซ า n ครง ชวงทมรากอยจะกวาง

= 1n21

2xx

++

ซงหมายความวา ตองใชจ านวนการท าซ าคอนขางมาก จงไมเหมาะจะค านวณดวยมอ แตควรใช

คอมพวเตอรชวยค านวณสามารถใชโปรแกรม MATLAB เพอวาดกราฟดงรปท 2.2 ของสมการ y = x2 – 2 ขางตนและหาราก

ของสมการไดโดยพมพล าดบค าสงลงในหนาตางค าสงของ MATLAB ดงน

>> %This is plot of y = x^2 – 2>> x=0:0.1:2.5;>> y=x.^2-2;>> plot(x,y),...>> title('plot of y = x^2 - 2'); grid

และเขยนค าสงเพอหาคารากไดดงน

>> a=[1 0 -2]; >> r=roots(a) >> r = 1.4142, -1.4142 จะไดคารากสมการสองคา คอ 1.4142 , –1.4142หมายเหต เครองหมาย >> เปนเครองหมายทเครองแสดงวาพรอมรบค าสงจะเหนในหนาคางค าสงไมตองพมพอก

เขยนโปรแกรมภาษา ซ ไดดงน#include "stdio.h"#include "conio.h"#include "iostream.h"#include "stdlib.h"#include "math.h"float fxn(float);main(){ int n,max; float x1,x2,xm,fx1,fx2,fxm; clrscr(); cout<<"Enter lower limit x1 = ";cin>>x1; cout<<"Enter upper limit x2 = ";cin>>x2; cout<<"Enter max iteration = ";cin>>max; fx1 = fxn(x1);

Page 9: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

34 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

fx2 = fxn(x2); if (fx1*fx2 >=0)

{printf("\n not have root in range x1 and x2\n");getch();return 0;}cout<<"\n n\t x1\t x2\t xm\tfx1\t fx2\t fxm\n"<<endl;for (n=1;n<=max;n++){ xm=(x1+x2)/2; fxm=fxn(xm); fx2=fxn(x2); if (fxm*fx2 >0)

x2=xm; else x1=xm; printf("%2d %8.4f %10.4f %10.4f %10.4f %10.4f %10.4f\n",n,x1,x2,xm,fx1,fx2,fxm); n+1; }

cout<<"\nRoot of equation is "<<xm;endl; getch(); return 0; }

float fxn(float x) { float fx; //fx = pow(x,3) -3*x + 1; //fx=0.1 + (0.51*x) - (sin(x)); //fx=2.5 + 1.7*x - 0.9*pow(x,2); fx=-2.0 +6.2*x - 4.0*pow(x,2)+0.7*pow(x,3); return fx; }

Page 10: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 35

เขยนโปรแกรม Matlab ( แกไขคา n ปรบตาม error) ไดคอx1 = input(' input lower limits :');x2 = input(' input upper limits :');sec = input(' input function :');fx1 = fxn(x1,sec);fx2 = fxn(x2,sec);xm = (x1+x2)/2;fxm= fxn(xm,sec);if fx1*fx2 >= 0 fprintf('\n not have root in range x1 and x2 \n'); pause(10);

elsefprintf(' \n n x1 x2 xm fx1 fx2 fxm\n');n=1;while abs(fxm) > 0.000001 xm = (x1+x2)/2; fxm= fxn(xm,sec); fx1= fxn(x1,sec); fx2= fxn(x2,sec); if fxm*fx2 > 0 x2 = xm; else x1 = xm; end fprintf('%2d %8.4f %10.4f %10.4f %10.4f %10.4f %10.4f \n ',n,x1,x2,xm,fx1,fx2,fxm); n = n+1;endend %if

แฟมของ ฟงชนส าหรบใชเลอกโจทย f(x) ตองจดเกบในชอเดยวกบชอฟงชน กรณนคอ fxn.m% function [fx] = fxn(x,sel); function [fx] = fxn(x,sel);

if sel ==1 fx =x^3-3*x+1;elseif sel == 2 fx = 0.1+0.51*x-sin(x);

Page 11: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

36 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

elseif sel == 3 fx=2.5+1.7*x-0.9*x^2;else fx=-2.0+6.2*x-4*x^2+0.7*x^3;end

2.4 วธต าแหนงผด (False Position Method or Regula-falsi Method)

เปนวธเกาแกส าหรบหาคารากของสมการ f(x) = 0 และมความคลายคลงกบวธแบงสองสวนมขนตอนคอ

ขนท 1 วธนเราจะเลอก จด x1 และ x2 ซง f(x1) และ f(x2) มเครองหมายตรงกนขาม พจารณาจากรปกราฟของ y=f

(x) ตดแกน x ซงอยระหวางจดตด AB น แสดงวารากของสมการอยระหวาง x1 และ x2 ซงท าใหไดผลคณของฟง

ชน f(x1) * f(x2) < 0

x2x3x4x1

A[x1,f(x1)]

B[x2,f(x2)]

x5P(x)

y = f(x)]

0

รปท 2.10 การหารากโดยวธต าแหนงผด

สมการของเสนคอรดทตอผานจด A[x1,f(x1)] และ B[x2,f(x2)] คอ

[y-f(x1)] / [x-x1] = [f(x2) - f(x1)] / [x2-x1]

วธนจะใชเสนคอรด AB สมการ f(x) โดยประมาณ และใชจดตดบนแกน x เปนคารากโดยประมาณเมอท าการแปลงสมการจะไดจดตดบนแกน x ซงเปนคารากในทน คอ xm จากสมการ ( 3 )

xm = x2-[(x2-x1)*f(x1) ] / [f(x2) -f(x1)] …..( 2.3 )

ขนท 2 ถา f(x1) และ f(xm) มเครองหมายตรงกนขาม แสดงใหเหนวาคารากของสมการจะอยระหวาง x1 และ xm

ดงนนเราจะแทน x2 ดวย xm ทค านวณไดจากสมการ (3) ซงกคอคา x ล าดบตอไป เมอไดคาแลวกน าไปแทนในสมการ f(x) = 0 ถาไดคาเทากบศนยหรอใกลเคยงกบความถกตองทตองการ แสดงวาคา x ทหาไดเปนค าตอบ (ราก) ของสมการ

Page 12: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 37

ถายงไมเปนไปตามทก าหนด กจะท าซ ากระบวนการเดมโดยใชสมการ ( 3 ) ตอไปจนกระทงไดค าตอบ กระบวนการนเราเรยกวา วธต าแหนงผด น ามาเขยนเปนขนตอนการค านวณ ไดดงน

ล าดบขนตอน 2.2 วธต าแหนงผด1. ก าหนดคาเรมตน x1, x2, ε , f(x)

2. ตรวจสอบ f(x1) ⋅ f(x2) < 0 หรอไม ถาใชท าขอ 3 ถาไมใช แสดงวาไมมคารากอยในชวง

(x1, x2) ทเลอก จะหยดท าตอไป ถามคาเปนไปตามเงอนไขกหาคาใหมตามสมการในขอ 3

3. ค านวณ xm = )x(f)x(f)xx)(x(fx12122

2 −−−

4. ตรวจสอบวา |f(xm)| < ε ใชหรอไม ถาใชหยด มฉะนนท าขอ 5 ตอไป

5. เงอนไข f(x1) ⋅ f(xm) < 0 ใชหรอไม

ถาใช แทน x2 ดวย xm แลวยอนไปท าขอ 3

ถาไมใช แทน x1 ดวย xm แลวยอนไปท าขอ 3

หรอ สามารถแทนไดดวยล าดบขนคลายกนดงน

1.. อานคาเรมตนของขดจ ากดลางและขดจ ากดบนของชวงทคาดวาจะมคารากอย เชน x1= 0 และ x2 =

1 แทนคา x1, x2 ลงในสมการ f (x)

2.. หาคาระหวางกลางของขดจ ากดในขอ 1 จากสมการ

xm = [x1*f(x2) - x2*f(x1)] / [f(x2) -f(x1)]

3.. หาคา f(x) = 0 โดยใชคา x1, x2 และ xm แทนคาลงในสมการทจะหาคาราก

4.. ตรวจสอบเงอนไข ถา f(xm) = 0 บอกใหทราบวารากของสมการ คอ xm จบการท างาน ถาไมใช ท าขอ 5

5.. ตรวจสอบเงอนไข ถา f (xm)*f (x2) < 0 แสดงวารากอยในชวง xm และ x2 ก าหนดให x1 = xm แลวท าตงแตขอท 2 ซ า ถาไมเปนตามเงอนไข ท าขอ 6 ตอไป

6. ตรวจสอบเงอนไข ถา f (xm)*f (x2) > 0 แสดงวารากอยในชวง x1 และ xm ก าหนดให x2 = xmแลวท าตงแตขอท 2 ซ า

7. ท าตงแตขอ 2 จนพบค าตอบ(รากของสมการ) แลว พมพคารากของสมการ (ค าตอบ)

8. จบ

Page 13: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

38 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

โฟวลชารท 2.2 วธต าแหนงผด ( ε= (0. )105 n−× เมอ n = จ านวนตวเลขหลงจดทศนยม )

รปท 2.10 โฟวลชารทการหารากของสมการดวยวธต าแหนงผด

ตวอยาง 2.3 หารากของ 3xex = 1 โดยวธ Method of False Position ตองการทศนยมถกตอง 4 ต าแหนงจาก 3xex = 1เอา e – x คณตลอด ; 3x = e – x หรอ 3x – e – x = 0

f(x) = 3x – e – x

ใชจดเรมตน x1 = 0.25 และ x2 = 0.26

dx = )x(f)x(f)xx()x(f

12122

−−⋅

ตารางท 2.2 ผลการท าซ าดวยวธต าแหนงผด ( ตวอยางท 2.3 )x1 x2 f(x1) f(x2) dx xm = x2 – dx f(xm)

0.25 0.26 -0.028801 0.008948 0.002370 0.25763 (0.88549)10-5

START

read data : x1, x2, εdefine function : f(x)

f(x1)f(x2) < 0 exitNo

STOPYes

n = 0

xm = x2 - dx

n = n + 1

|f(xm)| < ε Yes print n, x1,x2,f(x1),f(x2),f(xm)

STOP

No

print n, x1,x2,f(x1),f(x2),f(xm)

Yes

)1x(f)2x(f)1x2x()2x(fdx −⋅=

f(x1) f(xm) < 0No

x1 = xmx2 = xm

Page 14: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 39

ค าตอบ x = 0.2576

ตวอยางท 2.4 จงหารากของสมการ x3- 2x- 5 = 0 โดยใชวธต าแหนงผด และก าหนดใหคดความถกตองททศนยม 3 ต าแหนง

วธท า ทดลองน าคาตวเลขแทน x ในสมการ x3- 2x- 5 = 0 ไดคาของสมการดงน

x 0 1 2 3 4

f(x) -5 -6 -1 16 51

ครงท 1 พจารณาคา f (2) = -1 และ f (3) = 16 มเครองหมายตางกน แสดงวารากของสมการอยระหวาง 2 กบ 3

ดงนนเลอกให x1 = 2 และ x2 = 3 โดยใชสมการ ( 3 ) ในวธต าแหนงผด เราจะได

xm = x1-[(x2-x1)*f(x1) ] / [f(x2) - f(x1)]

= 2 - [(3 - 2)*(-1)] / [16 -(-1)]

= 2 + 1/17 = 2.0588

จะไดคา f (xm) = f(2.0588) = (2.0588)3 - 2(2.0588) - 5 = -0.3908

เลอกให x1 = 2.0588, x2 = 3 จะได f (x1) = f (2.0588) = -0.3908 และ f (x2) = f (3) = 16 และใชสมการ( 3 )

หาคาราก (xm) ตอไป ท าซ าจนกระทงไดคาของสมการ f(x) =0.00X (ความถกตองเปนทศนยม 3 หลก)

ครงท 2, 3, 4, 5, 6 และ 7 ไดคาดงน

x4 = 2.0813 x5 = 2.0862 x6 = 2.0915

x7 = 2.0934 x8 = 2.0941 x9 = 2.0943

ดงนนรากของสมการทถกตองททศนยม 3 หลก คอ 2.094สามารถเขยนโปรแกรมภาษา ซ ไดคอ#include "stdio.h"#include "conio.h"#include "iostream.h"#include "stdlib.h"#include "math.h"float fxn(float);main(){ int n,max;

Page 15: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

40 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

float x1,x2,xm,fx1,fx2,fxm; clrscr(); cout<<"Enter lower limit x1 = ";cin>>x1; cout<<"Enter upper limit x2 = ";cin>>x2; cout<<"Enter max iteration = ";cin>>max; fx1 = fxn(x1); fx2 = fxn(x2); if (fx1*fx2 >=0)

{printf("\n not have root in range x1 and x2\n");getch();return 0;}cout<<"\n n\t x1\t x2\t xm\tfx1\t fx2\t fxm\n"<<endl;for (n=1;n<=max;n++) { fx1=fxn(x1); fx2=fxn(x2); xm=((x1*fx2)-(x2*fx1))/(fx2 - fx1);

fxm =fxn(xm);if (fxm*fx2 <0)

x1=xm; else x2=xm; printf("%2d %8.4f %10.4f %10.4f %10.4f %10.4f %10.4f\n",n,x1,x2,xm,fx1,fx2,fxm); n+1; }

cout<<"\nRoot of equation is "<<xm;endl; getch(); return 0; }

float fxn(float x) { float fx; fx = pow(x,2) +(x*sin(x)) - 4;

Page 16: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 41

//fx=0.1 + (0.51*x) - (sin(x)); //fx=2.5 + 1.7*x - 0.9*pow(x,2); //fx=-2.0 +6.2*x - 4.0*pow(x,2)+0.7*pow(x,3); return fx;

}สามารถเขยนโปรแกรม Matlab ไดคลายกบวธแบงสองชวง ตางกนทสมการหาคารากตวใหมเปลยนจาก

สมการท ( 2 ) เปนสมการท ( 3 ) และแกไขเงอนไขใหเปนไปตามวธต าแหนงผด นอกจากนในวธนวตน-ราฟสนและวธตดเสนโคงจะเขยนโปรแกรมไดคลายกนและตางกนทสมการส าหรบหาคารากตวใหมและเงอนไขของ แตละวธเชนกน ดงนนจะไมแสดงโปรแกรม Matlab2.5 วธนวตน-ราฟสน (Newton-Rhapson Method)

เปนวธทใชส าหรบหาคารากสมการทก าหนดหรอเดาคาเรมตนเพยงจดเดยว หากเลอกคาเรมตนทเหมาะสมคอมคาใกลกบคารากแทจรงพอสมควรจะท าใหไดค าตอบเรวมากเมอเทยบกบวธแบงสองชวงและวธต าแหนงผดในหวขอทกลาวขางตน

สมมตฟงชน f(x) เปนฟงชนทมความตอเนอง (continuous function ) และมความตอเนองของอนพนธ ( continuous derivative )

รปท 2.11 การหารากสมการดวยวธนวตนราฟสน

เรมตนดวย x0 อนเปนคาประมาณของราก x ของ f(x) = 0 (x0 ไดมาโดยวธกราฟหรอการเดาคา)

จาก x0 หาจดบนเสนโคง y = f(x) นนคอจด (x0, f(x0)) ณ จดน ลากเสนสมผสตดแกน x ทจด x1, x1 จะเปนคาประมาณตวถดไปของราก x จากนน กด าเนนการดวยวธเดยวกน

สมการของเสนสมผสเสนโคงทจด (x0, f(x0)) คอ

y – f(x0) = f'(x0) ⋅ (x – x0)

เสนสมผสตดแกน x ท (x1, 0) จะได

–f (x0) = f'(x0) ⋅ (x – x0) หรอ x1 = )x(f)x(fx

00

0 ′−

ดวยวธเดยวกน จะได x2 ;

x0

f(x0)y=f(x)

0 x1x2

x

Page 17: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

42 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

x2 = )x(f)x(fx11

1 ′−

ท าเชนนเรอยไปจะไดสตรทวไป คอ

xn+1 = )x(f)x(fx

nn

n ′− ; nกคาดบถดไปจาการทาซาลา1n...2,1,0n

=+=

.....(2.4)

วธหาค าตอบของวธนสามารถแทนไดดวยล าดบขนดงน

1. เลอกคารากโดยประมาณ ( เชน x0 = 2 ) แทนลงในสมการ f(x) ถาไดคา f(x0) = 0 แสดงวา x0 คอรากของสมการ ถาไมเปนตามเงอนไขนกตองท าล าดบขนท 2 ตอไป

2. หาคาอนพนธของสมการ f(x) และหาคารากทมคาใกลคาทแทจรงตอไปจากสมการ

x1 = x0 - [f(x0) / f’(x0)]

หรอ xn+1 = xn - [f(xn) / f’(xn)]

3. หาคา f (xn+1) ถา f (xn+1) = 0 แสดงวา xn+1 เปนคารากของสมการ

4. ท าตงแตขอ 2 จนพบค าตอบ(รากของสมการ) แลว พมพคารากของสมการ (ค าตอบ) 5. หยดหรอจบโปรแกรมหรอล าดบขนตอน 2.3 วธนวตน-ราฟสน (Newton's Method)

1. ก าหนด f (x), f '(x), คาเรมตน x0, คาขอบเขต ε

2. ค านวณคา x = )x(f)x(fx

00

0 ′−

3. หยดค านวณ ถา |x – x0| < ε มฉะนนแทน x0 ดวย x แลวยอนกลบไปท าขอ 2 ซ า

เพอความสะดวกในการค านวณดวยมอ สามารถสรางตารางไดดงนx f(x) f ' (x) dx = f(x)/ f '(x)x0 f(x0) f'(x0) dx0 = f(x0) / f '(x0)

x1 = x0 – dx0 f(x1) f'(x1) dx1 = f(x1) / f '(x1)

x2 = x1 – dx1 : : :

Page 18: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 43

โฟวลชารท 2.3 วธนวตน-ราฟสน (Newton's Method)

รปท 2.12 โฟวลชารทการหารากของสมการดวยวธนวตนราฟสน

ตวอยางท 2.5 จงหารากของสมการ 3x + sin (x) – ex = 0 โดยใชวธของนวตน ตองการค าตอบทมความถกตองททศนยม 6 ต าแหนง

f(x) = 3x + sin (x) – ex

f ' (x) = 3 + cos (x) – ex

START

read data : x0, εdefine fn. : f(x), f'(x)

n = 0

x = x0 -dx

n = n + 1

|x - x0| < ε

Yesprint n, x, f(x)

STOP

)x(f)x(fdx

00

′=

x0 = xNo

Page 19: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

44 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

เรมตนดวย x0 = 0

n x f(x) f'(x) dx = f(x)/f'(x)0 0 -1.0 3.0 -0.3333331 0.333333 -0.068418 2.549345 -0.0268372 0.360170 (-6.2977)10 – 4 2.502264 (-2.5168)10 – 4

3 0.3604217 (-7.00)10 –9

ค าตอบ x = 0.3604217 ; |f(x)| = 7.00 × 10 – 9 < 5 × 10 – 7

เขยนโปรแกรมภาษา ซ ไดดงน#include "stdio.h"#include "conio.h"#include "iostream.h"#include "stdlib.h"#include "math.h"float fxn(float);float dfxn(float);main(){ int n,max; float e,re,x,x0,x1,fx,fx0,dfx; clrscr(); cout<<"Enter initial x0 = ";cin>>x0; cout<<"Enter tolerance e = ";cin>>e; cout<<"Enter max iteration = ";cin>>max; cout<<" n\tx0\t x\t fx0\t fx\t f'x0\n"<<endl;

fx0 =fxn(x0);dfx =dfxn(x0);x = x0 - fx0/dfx;

for (n=1;n<=max;n++){fx0 =fxn(x0);dfx =dfxn(x0);

Page 20: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 45

x = x0 – fx0/dfx; fx = fxn(x); printf("%2d %8.4f %10.4f %10.4f %10.4f %10.4f\n",n,x0,x,fx0,fx,dfx);x0=x;

re=((-fx0/dfx)*100)/x;if (abs(re<e)){

cout<<"\nRoot of equation is "<<x0; getch(); return 0;}}

return 0; } float fxn(float x)

{ float fx; fx = pow(x,2) -2; return fx; } float dfxn(float x) { float df; df = 2*x; return df;

}2.6 วธเสนตดโคง (Secant Method)

วธนตองใชจดเรมตน 2 จด เหมอนกบวธแบงสองชวง และวธต าแหนงผดแตมขอแตกตางคอไมจ าเปนทจดเรมตน 2 จดนนจะตองอยคนละดานของรากของสมการ f(x) = 0 นนคอ คาของ f(x) ทจดเรมตน 2 จด ไมจ าเปนตองมเครองหมายตางกนนนเอง

0

y=f(x)

x2 x0 x1x3

x x

รปท 2.13 การลเขาหาค าตอบของวธเสนตดโคง

Page 21: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

46 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

สมมตให x0, x1 เปนคาประมาณเรมตนของราก x ของสมการ f(x) = 0 สามารถประมาณกราฟ

ของ y = f(x) ดวยเสนตรงทผานจด (x0, f(x0)) และจด (x1, f(x1)) เสนตรงนตดแกน x ท (x2, 0) x2 เปนคาประมาณถดไปของ x

เราหาสมการเสนตรงไดจาก )x(f)x(fxx

0101

−− = )x(fy

xx11

−−

จด (x2, 0) อบยบนเสนตรง นนคอ x2 = 0, y = 0

จะได )x(f)x(fxx

0101

−− = )x(f

xx112

−−

x2 = )0x(f)1x(f)0x1x()1x(f

1x −−⋅−

จาก x1, x2 หาคาประมาณ x3 ไดโดยวธการเชนเดยวกน จะได

x3 = )x(f)x(f)xx()x(fx

12122

2 −−⋅−

ท าเชนนเรอยไป จะไดสดรการท าซ า

xn+1 = )x(f)x(f)xx()x(fx

1nn1nnn

n −−

−−⋅− ....(2.5)

สตรของวธเสนตดโคง คลายคลงกบสตรการท าซ าในวธต าแหนงผด แตวธเสนตดโคงไมตองพจารณาวา f(x) จะมเครองหมายเปลยนไปหรอไม

ล าดบขนตอน 2.4 วธเสนตดโคง (Secant Method)1. ก าหนดคาเรมตน x0, x1, คาชอบเขต ε, ฟงกชน f(x)

2. ค านวณคา x = )x(f)x(f)xx()x(fx

01011

1 −−⋅−

3. หยดการค านวณ ถา |x –x1| < ε มฉะนน แทนคา x0 ดวย x1, x1 ดวย x แลวยอนไปท าขอ 2

Page 22: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 47

โฟลวชารท 2.4 วธเสนตดโคง (Secant Method)

รปท 2.14 โฟลวชารทของวธเสนตดโคง

ส าหรบการค านวณดวยมอ เพอความสะดวก รวดเรว เราสรางตารางส าหรบการค านวณดงนx y = f(x) ∆∆∆∆x ∆∆∆∆y

yx

∆∆ dx = y

xy ∆∆⋅

x0 y0

x1 y1 ∆x1 = x1 – x0 ∆y1 = y1 – y0 Z1 dx1 = y1 ⋅ Z0

x2 = x1 – dx1 y2 ∆x2 = x2 – x1 ∆y2 = y2 – y1 Z2 dx2 = y2 ⋅ Z1x3 = x2 – dx2 y3 ∆x3 = x3 – x2 ∆y3 = y3 – y2 Z3 dx3 = y3 ⋅ Z2

x4 = x3 – dx3 y4 ∆x4 = x4 – x3 ∆y4 = y4 – y3 Z4 dx4 = y4 ⋅ Z3

: : : : : :

START

read data : x0, x1, ε definefunction : f(x)

n = 0

x =x1 - dx

n = n + 1

|x - x1| < ε

Yes

print n, x, f(x)

STOP

)0x(f)1x(f)0x1x()1x(fdx −

−⋅=

x0 = x1f(x0) = f(x1)

x1 = xf(x1) = f(x)

No

Page 23: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

48 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

ตวอยางท 2.6 จงหารากของสมการ 3x+ sin (x) – ex = 0 ตองการค าตอบถกตองททศนยม 6 ต าแหนงf(x) = 3x + sin x – ex ใชคาเรมตน x0 = 0 , x1 = 1

n x y = f(x) ∆x ∆yyx

∆∆ dx = y

xy ∆∆⋅

0 -10 1 1.123189 1 2.123189 0.470990 0.5290101 0.470900 0.265160 -0.529010 -0.858029 0.616541 0.1634822 0.307508 -0.134823 -0.163482 -0.399983 0.408722 -0.0551053 0.362613 0.005478 0.055105 0.140301 0.392763 0.0021524 0.360416 (9.83)10 – 5 -0.002152 -0.005380 0.400000 (3.93)10-5

5 0.3604217 (-7.00)10 – 9

ค าตอบคอ x = 0.3604217 ; |f(x)| = 7.00 × 10– 9 < 5 × 10– 8 < 5 × 10– 7

หมายเหต วธเสนตดโคงบางครงไมลเขา แตในกรณทลเขาจะลเขาดวยอนดบสงกวาก าลงหนง คอ ≈ 1.618ขอดของวธเสนตดโคง คอ ไมตองเรมตนดวยจดทอยคนละดานของราก บางครงถารากเปนจดสมผส

ภายนอก x กสามารถใชวธนหารากได ในขณะทวธแบงสองชวงใชไมได

ตวอยางท 2.7 การไมลเขาเมอใชวธเสนตดโคง แมวาจะเลอก x0 ใกลต าแหนงของรากกตาม

f(x) = (x3 – 3x2 – x + 9) ex = 0 คาเรมตน x0 = - 1 , x1 = -2

รปท 2.15 กรณไมลเขาสค าตอบของวธเสนตดโคง

0

y=f(x)

x2

x0

x1x3

x

Page 24: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 49

เขยนโปรแกรมภาษา ซ ไดดงน#include <stdio.h>#include <conio.h>#include <iostream.h>#include <stdlib.h>#include <math.h>#define DEFAULT_LOOP 100#define DEFAULT_TOL 1.0E-07#define ZERO_APPROACH 1.0E-07double TF(double); /* Function -- for finding roots */void InputValue(double*,double*,int*,double*);int Secant(double,double,double*,int*,double* );void DisplayOutput(int,int,double,double );/* Global Variable *//* keeping the results in array for display */double first[1000],second[1000],xx[1000],yy[1000];void main(){double guess1, /* first initial guess */

guess2, /* second guess */root,tolerance;

int loop_limit, /* Maximum of Iteration */ error; /* Flag for printing output */ guess1 = guess2 = root = tolerance=0; loop_limit = 0; error = 0; clrscr(); printf("\n\t\tFind Root of equation by Secant method\n"); printf("\t\t===========================================\n"); InputValue(&guess1,&guess2,&loop_limit,&tolerance); error = Secant(guess1,guess2,&root,&loop_limit,&tolerance); DisplayOutput(error,loop_limit,root,tolerance);}

Page 25: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

50 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

void InputValue( double* lower, double* upper, int* maxloop, double* tol){char buffer[81]; printf("\nInput First initial estimated root : ");gets(buffer); *lower=atof(buffer); printf("Input Second initial estimated root : " );gets(buffer); *upper=atof(buffer); printf("Input Limit of iteration : ");gets(buffer); *maxloop = atoi(buffer); printf("Tolerence (default = 1E-7): ");gets(buffer); *tol = atof(buffer);}void DisplayOutput(int printflag,int iter,double root,double tolerance){int i;

switch(printflag) {case 0 : {if (iter) {

printf("\n Iter Guess 1 Guess 2 x y(x) \n"); printf( "===== ======= ========= ======= ========");

}; for ( i =1; i <= iter; i++) { printf("\n%3d %10.5f %10.5f %10.5f %10.5f ",

i,first[i],second[i],xx[i],yy[i]); if (i%15==0){

getch(); clrscr();

printf("\n Iter Guess 1 Guess 2 x y(x) \n"); printf( "===== ======= ========= ======= ========");

} } printf("\n\n Approximate root of eqn = % 12.8f", root); printf("\n tolerence of f(x) = %e",tolerance); break; } /* case 0 */

Page 26: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 51

case 1 : { printf ("\n The slope is nearly zero. Choose a new Guess!!.\n"); break; case 2:{ printf("\nIt must exceed the limit of iteration.\n"); break; } } } /* switch */}/*======================================================================*/int Secant(double x1, double x2, double* root,int* maxloop,double *tol){double x3,y1,y2,y3;int found=0,i=0;

if (*maxloop <= 0 ) *maxloop = DEFAULT_LOOP;if (*tol <= 0) *tol = DEFAULT_TOL;y1 = TF(x1);y2 = TF(x2);if (fabs(y1) <= ZERO_APPROACH) {

found = 1;}else{

if (fabs(y2) <= ZERO_APPROACH) { found = 1;}else{if (fabs(y2-y1) <= ZERO_APPROACH) return(1);}

} while (!found && (i < *maxloop)){

i+=1; first[i] =x1; second[i]=x2; /* for display */ x3 = x2-y2*(x2-x1)/(y2-y1); /* secant formula */ xx[i] = x3; /* for display */ y3 = TF(x3);

Page 27: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

52 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

yy[i] = y3; /* for display */ if (fabs(x2-x1) < *tol) { found = 1; break; } y1 = y2; x1 = x2; x2 = x3; y2 = y3;

} /* while loop */ *root = x2; if (i >= *maxloop && !found)

return 2; else

*maxloop = i;return 0;}double TF(double h){

/*y=.........*/return(3.284*exp(-(h-36089)/20806) - 7.35);

}/*======================================================================*/2.7 การหารากของสมการพหนาม

ก าหนดให สมการพหนามดกร n (Polynomial Equation Degree n)p(x) = an + 1x

n + anxn – 1 + ... + a3x2 + a2x + a1 = 0 .....(2.6)

โดยทสมประสทธ ai (i = 0, 1, 2, ..., n) เปนจ านวนจรงตองการหา รากคาตาง ๆ ของ (6) กอนแกสมการ (6) ควรจะดองมความรพนฐานเกยวกบสมการ

พหนาม เชน ทฤษฎพนฐานทางพชคณต (Fundamental Theorem of Algebra) ทสามารถจะสรปไดวา1. สมการพหนาม (6) จะมรากทงหมด n ราก โดยทรากทงหมดน ไมจ าเปนตองมคาแตกตางกน

หมด และอาจจะเปนรากจรง หรอรากเชงซอนกได และถาม a + bi เปนรากเชงซอน 1 คา ดงนน คสงยค

(Coujugate) a – bi จะเปนคารากของ p(x) = 0 ดวย

2. ถาดกรของพหนามเปนเลขค และสมประสทธ ai เปนจ านวนจรง ดงนน p(x) = 0 จะตองมรากจรงอยางนอย 1 ราก ทงนเพราะวา ถามรากเชงซอนจะตองมดกรเปนจ านวนคเสมอ

นอกจากนแลว ยงมแนวทางพจารณาไดอกวา p(x) = 0 จะมรากจรงหรอเปลา

Page 28: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 53

กฎแหงเครองหมายของเดสการตส (Descrates' rule of sign)สมการพหนาม ทมสมประสทธเปนจ านวนจรงบวก จะมจ านวนรากจรงทเปนคาบวก ไมเกนจ านวน

ครงของการเปลยนเครองหมายของสมประสทธตวอยางท 2.8

1. p(x) = x5 – x4 + 3x3 – 9x2 + 10x – 10มรากเชงซอน 4 ราก รากจรง 1 ราก คอx1 = –1 + 2i, x2 = –1 – 2i, x3 = 1 + i, x4 = 1 – i, x5 = 1

2. p(x) = x4 + 5x2 + 4 = 0ไมมการเปลยนเครองหมายของสมประสทธ ฉะนนจงไมมรากจรง

(x2 + 1) (x2 + 4) = 0(x + i) (x – i) (x + 2i) (x – 2i) = 0

x = –i , i , –2i , 2iซงเปนรากเชงซอนทงหมด

การหารากจรงของ an+1xn + anxn – 1 + ... + a3x2 + a2x + a1 = 0 กระท าโดยใชวธของนวตน

xn + 1 = )nx(p)nx(p

nx ′− .....(2.7)

n = จ านวนการท าซ า และ n = 0, 1, 2, .....p(xn) คอ คาของพหนาม p(x) ท xn

p'(xn) คอ คาของอนพนธของ p'(x) ท xn

เรมตนดวย x0 อนเปนคาประมาณเรมตนของรากจรง และแตละรากหาไดจากวธการคนหาต าแหนงทของราก

การค านวณคาของ p(xn) จะไมใชการแทนคา xn ลงใน p(x) โดยตรง เพราะใชจ านวนครงของการบวก การคณคอนขางมาก อาจท าใหผลลพธมคาคลาดเคลอนมากดวย

พจารณา p(x) = a4x3 + a3x2 + a2x + a1แทนคา xi โดยตรง p(xi) = a4(xi)

3 + a3(xi)2 + a2xi + a1

ใชเครองหมายคณ = 3 + 2 + 1 = 6 ครงใชเครองหมายบวก = 3 ครงแตถาเขยน p(xn) ในแบบการคณซอน (Nested Multiplication)

p(xn) = ((a4xn + a3)xn) + a2)xn + a1 .....(2.8)จะเหนวาใชการคณเพยง 3 ครง และใชการบวกเพยง 3 ครงเทานน

Page 29: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

54 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

การหาคาของพหนามโดยวธของฮอรเนอร (Horner's Method)การหาคาของ p(x) หนงสอบางเลมจะเรยกวธการหารสงเคราะห (Syntetic division) แทนทจะเรยก

วธของฮอรเนอรจาก (8) น ามาเขยนเปนตารางการค านวณไดดงน

a4 a3 a2 a1x = xi - a4xi (a4xi + a3)xi ((a4xi + a3) xi + a2) xi

a4 a4xi + a3 (a4xi + a3)xi + a2 ((a4xi + a3) xi + a2) xi + a1 = p(xi)

ส าหรบการหาคาของพหนาม p(x) ดกร n เมอ x = z เรมตนดวยการเขยน ส.ป.ส. ของ xn เรยงตามล าดบ ถา ส.ป.ส. ตวใดมคาเปนศนย กใสคา 0 ดวย ดงตารางขางลางน

p(x) : an + 1 an an – 1 ... ak ... a2 a1x = z : - zbn + 1 zbn ... zbk + 1 ... Zb3 zb2

bn + 1 bn bn – 1 ... bk ... b2 b1 = p(z)

โดยท 1,...,1n,nk;zbab ab

1kkk

1n1n−=+=

=

+

++ .....(2.9)

ล าดบขนตอน 2.5 Horner's Method or Nested Multiplication or Synthetic Division1. ก าหนดให : ส.ป.ส. ak เมอ k = 1, 2, 3, n + 1 ; คา z

2. bn + 1 = an + 1

3. ส าหรบ k = n ถง 1 ทละ -1 ท า bk = ak + zbk + 1

4. p(z) = b1

Page 30: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 55

โฟวลชารท 2.5 Horner's Method or Nested Multiplication or synthetic Division

รปท 2.16 โฟวลชารทวธของ Horner's หรอ การคณซอน หรอ Synthetic divisionตวอยางท 2.9 จงหาคาของ p(x) = 3x5 – 2x4 + x2 – 7x – 4 เมอ x = 2

a6 a5 a4 a3 a2 a13 -2 0 1 -7 -4

x = 2 - 6 8 16 34 543 4 8 17 27 50 = p(2)

b6 b5 b4 b3 B2 b1

ตรวจสอบp(2) = 3(2)5 – 2(2)4 + (2)2 - 7(2) – 4

= 3(32) –2(16) +4 – 14 – 4= 96 – 32 + 4 – 14 – 4= 50

การหาคาอนพนธ p'(x)ก าหนดพหนาม p(x) ดกร n : p(x) = an + 1x

n + anxn – 1 + ... + a3x2 + a2x + a1 = 0

โดยการหารดวย x – z จะไดผลลพธเปนพหนามดกร n - 1 และเศษ r1

START

input : a(k) ; k = 1, 2, n + 1

b(n+1) = a(n+1)

b(k) = a(k) + z . b(k + 1)

output : print p(z)

k = n (-1) 1

p(z) = b(1)

STOP

Page 31: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

56 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

zx)x(p

− = zxr)x(q 1−+ .....(2.10)

q(x) เปนพหนามดกร n – 1 ซงเขยนในรปq(x) = bn + 1x

n – 1 + bnxn – 2 + ... + b4x2 + b3x + b2 .....(2.11)แทน q(x) ใน (2.10)

p(x) = (x – z)(bn + 1xn – 1 + bnxn – 2 +... + b4x2 + b3x + b2) + r1

= bn + 1xn + bnxn – 1 + ... + b4x3 + b3x2 + b2x + r1 - zbn + 1 x

n – 1 - ... - zb4x2 - zb3x - zb2

p(x) = bn + 1xn + (bn – zbn + 1) x

n – 1 + ... + (b3 – zb4)x2 + (b2 – zb3)x + (r1 – zb2) .....(2.12)

เปรยบเทยบสมการ (2.12) กบ p(x) = an + 1xn + anxn – 1 + ... + a3x2 + a2x + a1

จะพบวา bn + 1 = an + 1

bk = ak + zbk +1 ; k = n, n – 1, ..., 1

โดยท b1 = r1 = a1 + zb2

จาก (2.10) zx)x(p

− = zxr)x(q 1−+

ถา (x – z) หาร p(x) ลงตว ดงนนเศษ r1 = 0

กรณท (x – z) หาร p(x) ไมลงตว ดงนนเศษ r1 = a1 +zb2

q(x) เปนพหนามดกร (n –1) ซง ส.ป.ส. bk : k = n + 1, n, ... , 2 ซงหาไดจาก

an + 1 an an – 1 ... ak ... a2 A

x = z - zbn + 1 zbn ... zbk + 1 ... zb3 zb2

bn + 1 bn bn – 1 -- bk -- b2 b1 = a1 + zb2 = เศษ r1bn + 1 = an + 1

bk = ak + zbk + 1 ; k = n, n – 1, ...1

จาก (10) p(x) = (x – z) q(x) + r1แทน x = z : p(z) = r1

อนพนธของสมการ (10) เทยบกบ x : p' (x) = (x – z) q'(x) + q(x) ⋅ 1เมอ x = z p' (z) = (z – z) q'(z) + q(z)จะไดวา p' (z) = q(z)นนหมายความวา การหาคาของ p' (x) เมอ x = z คอ การหาคาของ q(z) นนเอง เราท าการหาแบบ

Horner ดงเชนทผานมาดงน

Page 32: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 57

q(x) bn + 1 bn bn – 1 ... bk ... b3 b2x = z - zcn + 1 zcn ... zck + 1 ... zc4 zc3

cn + 1 cn cn – 1 --- ck --- c3 c2 = q(z) = p'(z)

โดยท cn + 1 = bn + 1

ck = bk + zck + 1 ; k = n, n – 1, ..., 3, 2 ....(2.13)น าตารางทงสองมาเขยนตอกนไดดงน

p(x) : an + 1 an an – 1 ... ak ... a2 a1x = z - zbn + 1 zbn ... zbk + 1 ... zb3 zb2

q(x) : bn + 1 bn bn – 1 --- bk --- b2 b1 = p(z)- zcn + 1 zcn ... zck + 1 ... zc3

cn + 1 cn cn – 1 --- ck --- c2 = p'(z)เขยนเปนสตรไดดงน

bn + 1 = an + 1

cn + 1 = bn + 1 .....(2.14)

bk = ak + zbk + 1 ; k = n, n – 1, ...1

ck = bk + zck + 1 ; k = n, n – 1, ..., 2ล าดบขนตอน 2.6 การค านวณ (Compute) p(x), p'(x) for x = z

1. ก าหนดให ส.ป.ส. ak , k = 1, 2, ..., n + 1 คา z

2. bn + 1 = an + 1

cn + 1 = bn + 13. ส าหรบ k = n ถง 2 ทละ -1 ท า

bk = ak + z ⋅ bk + 1

ck = bk + z⋅ ck + 1

4. b1 = a1 + z ⋅ b2

5. p(z) = b1p'(z) = c2

Page 33: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

58 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

โฟวลชารท 2.6 การค านวณ p(x) , p'(x) for x = z

รปท 2.17 โฟวลชารทค านวณ p(x) และ p ' (x)

START

input : a(k) ; k = 1, 2, n + 1input z

b(n+1) = a(n+1)c(n+1) = b(n+1)

b(k) = a(k) + z . b(k + 1)c(k) = b(k) + z . c(k + 1)

output : print p(z), dp(z)

k = n (-1) 2

b(1) = a(1) + z . b(2)

STOP

p(z) = b(1)dp(z) = c(2)

Page 34: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 59

ตวอยางท 2.10 จงหาคา p(2) และ p'(2) ชอง p(x) = 3x5 – 2x4 + x2 – 7x – 4

3 -2 0 1 -7 -4x = 2 - 6 8 16 34 54

3 4 8 17 27 50 = p(2)- 6 20 56 1463 10 28 73 173 = p'(2)

p(2) = 50p'(2) = 173

ตรวจสอบp'(x) = 15x4 – 8x3 + 2x – 7

p'(2) = 15(2)4 – 8(2)3 + 2(2) – 7= 15(16) – 8(8) + 4 – 7= 240 – 64 + 4 – 7= 173

การหาคาอนพนธอนดบสงของพหนาม p(x)เพองายตอการเขาใจ จะยกตวอยาง p(x) ดกร 4

p(x) = a5x4 + a4x3 + a3x2 + a2x + a1ให z เปนจ านวนจรงใด ๆ

หาร p(x) ดวย (x – z)

−+=−

−+=−

−+=−

−+=−

zxrazx

)x(qzx

r)x(qzx)x(q

zxr)x(qzx

)x(qzx

r)x(qzx)x(p

45

3

33

2

22

1

11

.....(2.15)

โดยท r1, r2, r3, r4 เปน เศษหาไดจาก Complete Horner Table ดงน

Page 35: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

60 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

Complete Horner Tablep(x) : a5 a4 a3 a2 a1

x = z zb5 zb4 zb3 zb2

q1(x) : b5 b4 b3 b2 b1 = p(z) ⇒ เศษ r1- zc5 zc4 zc3

q2(x) : c5 c4 c3 c2 = q1(z) ⇒ เศษ r2- zd3 zd4

q3(x) : d5 d4 d3 = q2(z) ⇒ เศษ r3- zc5

c5 c4 = q3(z) ⇒ เศษ r4

โดยท c5 = d5 = c5 = b5 = a5

ในทน p(x) = a5x4 + a4x3 + a3x2 + a2x+ a1q1(x) = b5x3 + b4x2 + b3x + b2

q2(x) = c5x2 + c4x + c3

q3(x) = d5x + d4จาก (2.15) แทนคายอนกลบจากบรรทดลางไปสบรรทดบน

q3(x) = a5(x – z) + r4

q2(x) = (x – z) q3(x) + r3

= (x – z) (a5(x – z) + r4) + r3

= a5(x – z)2 + r4(x – z) + r3

q1(x) = (x – z) q2(x) + r2

= (x – z) [a5(x – z)2 + r4(x – z) + r3] + r2

= a5(x – z)3 + r4(x – z)2 + r3(x – z) + r2

p(x) = (x – z) q1(x) + r1= (x – z)[a5(x – z)3 + r4(x – z)2 + r3(x – z) + r2] + r1= a5(x – z)4 + r4(x – z)3 + r3(x – z)2 + r2 (x – z) + r1

ซงเปนพหนามในเทอมดกรของ (x – z) ซง ส.ป.ส. a5, r4, r3, r2, r1 หาไดจาก Complete Horner Table

Page 36: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 61

ถา p(x) เปนพหนามดกร n ใด ๆ เราดดแปลง p(x) เปนพหนามดกรของ (x – z) ไดดงนp(x) = r1 + r2(x – z) + r3(x – z)2 + r4(x – z)3 + ...+rn + 1(x – z)n .....(2.16)

เรากระจาย p(x) รอบจด x = z โดยใชอนกรมเทเลอร จะไดวา

p(x) = p(z) + p'(z) (x – z) + p"(z) !2)zx( 2− +p'"(z) !3

)zx( 3− +...+p(n)(z) !n)zx( )n(− .....(2.17)

เทยบ ส.ป.ส. เทอมดานขวาในสมการ (2.16), (2.17) จะไดp(z) = r1 p(z) = r1p'(z) = r2 p'(z) = r2

!21 p"(z) = r3 หรอ p"(x) = 2!r3

Μ Μ

!n1 p(n)(z) = rn + 1 p(n)(z) = n!rn + 1

โดยท r1, r2, r3, ..., rn +1 หาไดจาก Complete Horner Table

ตวอยางท 2.11 จงแปลงพหนาม p(x) = 2x3 – x2 + 3x – 5 ใหเปนพหนามในเทอม (x – 2) และจงหาคา p(2) ,p'(2), p"(2), p'"(2)

2 -1 3 -5x = 2 - 4 6 18

2 3 9 13 = r1- 4 142 7 23 = r2

- 42 11 = r3

p(x) = 2(x – 2)3 + 11(x – 2)2 + 23(x – 2) + 13p(2) = 13p'(2) = 23p"(2) = 2!(11) = 22p'"(2) = 3!(2) = 12

ตรวจสอบ

=′′′=−=−=′′

=+−=+−=′

12)x(p22224)2("p,2x12)x(p

233424)2('p,3x22x6)x(p

Page 37: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

62 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

2.7.1 การหารากจรงของพหนาม โดยวธของนวตนเราไดรการหาคาของ p(x) และ p'(x) แลว ในทนตองการหารากของพหนาม

p(x) = 0เราจะผนวกวธของ Horner กบวธของ Newton เขาดวยกนจะไดสมการ (2.18)

xn + 1 = )nx(p)nx(p

nx ′− ; n = 0, 1, 2, ... .....(2.18)

โดยเรมตนท x0 ซงเปนคาประมาณเรมตนของรากจรงตวใดตวหนงของ p(x) = 0 ค านวณหาคาของ p(x0), p ' (x0) โดยใชวธ Horner แลวปรบปรงคา x0 ใหดขนโดยใชสตรนวตน (2.18)

x1 = )x(p)x(px

00

0 ′−

จากนนค านวณคา p(x1), p'(x1) โดยใชวธ Horner แลวปรบปรงคา x1 ใหดขนโดยใชสตร (2.18)

x2 = )x(p)x(px11

1 ′−

ท าเชนนเรอยไปจนกวาจะได p(xn) = 0 หรอ xn มคาแมนย า ( ทศนยมถกตองตามทตองการ )เขยนเปนล าดบขนตอนการหารากจรงไดดงล าดบขนตอน 2.7ล าดบขนตอน 2.7 หารากจรง 1 คาของ p(x)

1. ก าหนด ส.ป.ส. ak , k = 1, 2, ..., n + 1

คาขอบเขต ε, δ, คาเรมตน x0 = z

2. bn + 1 = an + 1

cn + 1 = bn + 13. Iteration i = 04. ส าหรบ k = n ถง 2 ทละ -1 ท า

bk = al + z ⋅ bk + 1

ck = bk + z ⋅ ck + 1

5. b1 = a1 + z ⋅ b2

6. dx = 21

cb

7. x = z – dx8. Iteration i = i + 19. หยด ถา | dx | < ε และ | b1 | < δมฉะนน แทน z ดวย x แลวยอนไปท าขอ 4

Page 38: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 63

การหาคาเรมตนของรากจรงแตละราก1. พจารณาจากเครองหมาย p(x) เชน p(xn) ⋅ p(xn + 1) < 0 แสดงวารากจรงอยระหวา (xn, xn + 1)

2. กรณทเปนรากซ า p(xn) ⋅ p(xn + 1) > 0 กรณนตองดเครองหมายของอนพนธ ถาเครองหมายของ

p'(xn – 1) แตกตางกบของ p'(xn + 1) และ |P(x)| < δ , δ = 10 – 2 แสดงวามรากท xn

รปท 2.18โฟวลชารท 2.7 หารากจรง 1 คา (Find one Real of p(x)

START

input : read a(k), k = 1,2, n +1, ε, δ, z

b(n+1) = a(n+1)c(n+1) = b(n+1)

i = 0

i = i + 1

| dx | < εYes

output : print i, x

STOP

z = x

k = n(-1)2

b(k) = a(k) + z . b(k+1)c(k) = b(k) + z . c(k+1)

b(1) = a(1) + z . b(2)dx = b(1) / c(2)

x = z - dx

| b(1) < δNo

0

y=f(x)

xnxn-1

x x

p(x)

xn+1

รปท 2.19 โฟวลชารทการหารากจรงของนวตน 1 ราก

Page 39: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

64 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

ตวอยางท 2.12 จงหารากจรงทงหมดของ p(x) = 3x5 – 2x4 + x2 – 7x – 4 ตองการค าตอบถกตองททศนยม4 ต าแหนง ( หารากจรงวามกคากอน )

ส.ป.ส. ของ p(x) มเครองหมาย + - + - - เปลยนไป 3 ครง นนคอมรากจรงไมเกน 3 คาx p(x) p'(x)

-1.5 -24.16 92.94-1.2 -5.77 35.53-0.9 0.03 6.87-0.6 0.06 -4.53-0.3 -1.83 -7.43

0 -4 -70.3 -6.02 -6.490.6 -7.87 -5.580.9 -9.03 -1.191.2 -7.64 12.681.5 0.41 44.941.8 22.33 107.41

มรากจรงอยใกล ๆ x = -0.9 , x = -0.6, x = 1.5 และรากอก 2 รากเปนรากเชงซอนการหารากจรงตวทหนง ใชคาเรมตน x 0 = -0.9

3 -2 0 1 -7 -4x = -0.9 - -2.7 4.23 -3.807 2.5263 4.02633

3 -4.7 4.23 -2.807 -4.4737 0.02633- -2.7 6.66 -9.801 11.34723 -7.4 10.89 -12.608 6.8735

x1 =

−− 8735.602633.09.0 = -0.90383

3 -2 0 1 -7 -4x = -0.90383 - -2.71149 4.25839 -3.84886 2.57489 3.99955

3 -4.71149 4.25839 -2.84886 -4.42511 -0.00045- -2.71147 6.70911 -9.91276 11.534343 -7.42298 10.9675 -12.76162 7.10923

x2 =

−−− 10923.700045.090383.0 = -0.90377

Page 40: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 65

3 -2 0 1 -7 -4x = -0.90377 - -2.71131 4.25794 -3.84820 2.57489 3.99955q1(x) 3 -4.71131 4.25794 -2.84820 -4.42588 -0.00002

- -2.71131 6.70834 -9.91100 11.531383 -7.42262 10.96628 -12.75920 7.10550

x3 =

−−− 10550.700002.090377.0 = -0.90377

รากจรงตวทหนง คอ x = -0.90377การหารากจรงตวทสอง ใชคาเรมตน x0 = -0.6

p(x) = ( x + 0.90377 ) ( 3x4 – 4.71131x3 + 4.25794x2 – 2.84820x – 4.42588 )

q1(x) : 3 -4.71131 4.25794 -2.84820 -4.42588x = -0.6 - -1.8 3.90670 -4.89884 4.64822

3 -6.51131 8.16473 -7.74704 0.22234- -1.8 4.98679 -7.890913 -8.31131 13.15152 -15.63795

x1 =

−−− 63795.15

22234.06.0 = -0.58578

3 -4.71131 4.25794 -2.84820 -4.42588x = -0.58578 - -1.75734 3.78921 -4.71386 4.42970

3 -6.46865 8.04715 -7.56206 0.00382- -1.75734 4.81862 -7.536513 -8.31131 12.86577 -15.09857

x2 =

−−− 09857.15

00382.058578.0 = -0.58553

3 -4.71131 4.25794 -2.84820 -4.42588x = -0.58553 - -1.75659 3.78715 -4.71064 4.42593

3 -6.46790 8.04509 -7.55884 0.00005- -1.75659 4.81569 -7.530373 -8.22449 12.86078 -15.08921

x3 =

−−− 08921.15

00005.058553.0 = -0.58553

รากจรงตวทสอง คอ x = - 0.58553p(x) = (x + 0.90377) (x + 0.58553) (3x3 – 6.46790 x2 + 8.04509x – 7.55884)

Page 41: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

66 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

การหารากจรงตวทสาม ใชคาเรมตน x0 = 1.5

3 -6.46790 8.04509 -7.55884x = 1.5 - 4.5 -2.95185 7.63986

3 -1.9679 5.09324 0.08102- 4.5 3.798153 2.5321 8.89139

x1 =

− 89139.808102.05.1 = 1.49089

3 -6.46790 8.04509 -7.55884x = 1.49089 - 4.47267 -2.974668 7.559441

3 -1.99523 5.070422 0.000601- 4.47267 3.6935913 2.47744 8.764013

x2 =

− 764013.8000601.049089.1 = 1.49082

3 -6.46790 8.04509 -7.55884x = 1.49082 - 4.47246 -2.974841 7.558824

3 -1.99544 5.070249 -0.000012- 4.47246 3.6927913 2.47702 8.76304

x3 =

−− 76304.8000012.049082.1 = 1.49082

รากจรงตวท 3 คอ x = 1.49082p(x) = (x + 0.90377) (x + 0.58553)(x – 1.49082)(3x2 – 1.99544x + 5.070249)

Page 42: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 67

รากทเหลออก 2 รากเปนรากเชงซอนหาไดจากสตร

x = )3(2)070249.5)(3(42)99544.1(99544.1 −−±

= 6861207.5699544.1 −±

= 0.33257 + 1.25677iรากตวท 1 = -0.90377รากตวท 2 = -0.58553รากตวท 3 = 1.49082รากตวท 4 = 0.33257 + 1.25677iรากตวท 5 = 0.33257 – 1.25677i

2.7.2 วธของแบรสโตว (Bairstow's Method) วธของแบรสโตว มไวส าหรบใชหารากเชงซอนของพหนาม

p(x) = an + 1 xn + anxn – 1 + ... + a3x2 + a2x + a1 = 0 .....(2.19)

ถา p(x) มรากเชงซอน คสงยค กเปนรากเชงซอนดวย นนคอ z1, z2 = α ± iβ เปนรากของ p(x) = 0ดงนน h(x) = (x – (α + iβ)) (x – (α – i β))

= x2 – 2αx + (α2 + β2)หรอจะเขยน

h(x) = x2 – rx – s โดยท

β+α=⋅=α=+=

2221

21zzs

2zzr

ฟงกชน h(x) จะเปนตวประกอบก าลงสองของ p(x) เมอเอา h(x) = x2 – rx – s หาร p(x) จะได

p(x) = (x2 – rx – s) q(x)+b2(x – r) + b1 .....(2.20)โดยท q(x) เปนพหนามก าลง (n – 2) และพจน b2(x – r) + b2 เปนเศษ q(x) เขยนไดในแบบ

q(x) = bn + 1xn – 2 + bnxn – 3 + bn – 1x

n – 4 + ...+ b5x2 + b4x + b3) .....(2.21)จากสมการ (20)จะไดวา

p(x) = (x2 – rx – s)(bn + 1xn – 2 + bnxn – 3 + bn – 1x

n – 4 + ...+ b5x2 + b4x + b3)+ b2(x – r) + b1= bn + 1x

n + (bn – rbn + 1)xn – 1 + (bn – 1 – rbn – sbn + 1)x

n + 2 +....+ (bk – rbn + 1 - sbk + 2)xk – 1

+ ...+ (b2 – rb3 – sb4) x + b1 – rb2 – sb3 .....(2.22)

Page 43: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

68 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

เปรยบเทยบ ส.ป.ส. ของ x ก าลงตางๆ ใน (2.22) กบ (2.19)p(x) = an + 1 x

n + anxn – 1 + an – 1xn – 2 + ... + akxk – 1 + ... + a3x2 + a2x + a1

จะพบวาbn + 1 = an + 1

bn – rbn + 1 = an

bn – 1 – rbn – sbn + 1 = an – 1

bk – rbk + 1 –sbk + 2 = ak

b1 – rb2 – sb3 = a1

หรอbn + 1 = an + 1

bn = an + rbn + 1

bk = ak + rbk + 1 +s bk + 2 , k = n – 1, n – 2, ..., 2, 1

สรางเปนตารางการหารสงเคราะห ของตวประกอบก าลงสอง ดงน

p(x) : an + 1 an an – 1 ... ak .... a3 a2 a1r - rbn + 1 rbn ... rbk + 1 .... rb4 rb3 rb2s - - sbn + 1 ... sbk + 2 ... sb5 sb4 sb3

q(x) : bn + 1 bn bn - 1 ... bk ... b3 b2 b1u v

ถา b2 = 0, b1 = 0 จะไดวา p(x) = (x2 – rx – s) q(x)

ตวอยางท 2.131. จงหาร p(x) = x5 + 6x4 – 20x2 + 22x – 8 ดวย (x2 + 2x – 3) โดยวธการหารสงเคราะหของ

ตวประกอบก าลงสองในทน r = -2 , x = 3

Page 44: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 69

a6 a5 a4 a3 a2 a11 6 0 -20 22 8

r = -2 -2 -8 10 -4 -6s = 3 3 12 -15 6

1 4 -5 2 3 8b2 b1

p(x) = (x2 + 2x – 3) (x3 + 4x2 –5x + 2) + 3(x + 2) + 8

(x2 – rx – s) ( q(x) ) + b2(x – r) + b1

2. จงหาร p(x) = x4 + 5x2 + 4 ดวย x2 + 1 ในทน r = 0, s = -1

a5 a4 a3 a2 a11 0 5 0 4

r = 0 0 0 0 0s = -1 -1 0 -4

1 0 4 0 0b2 b1

p(x) = (x2 – rx – s) q(x) +b2(x – r) + b1(x4 + 5x2 + 4) = (x2 +1)(x2 + 4)

แสดงวา x2 + 1 เปนตวประกอบก าลงสองของ x4 + 5x2 + 4

จดมงหมายของเรา คอ จะหาวธของ Bairstowแนวคดของ Bairstow กคอ การหาร quadratic factor ของ p(x) นนเอง

p(x) = (x2 – rx – s) q(x)

คอ ตองการหา x2 – rx – s คอ จะหาคา r, s ทท าให b2 = 0, b1 = 0

เราจะสงเกตเหนวา คาของ b2, b1 ขนอยคา s* ของ r, s ดวยเหตนเราจงเขยน b2, b1 เปนฟงกชนของตวแปร r, s ดงน

b2 = b2(r, s) , b1 = b1(r, s)และตองหาคา r = r* , s = s*ทท าให

Page 45: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

70 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

====

0*)s*,r(bb0*)s*,r(bb

11

22 .....(2.23)

เรากระจายฟงกชน b2 = b2(r, s), b1 = b1(r, s) รอบจด (r0, s0) โดยใชอนกรมเทเลอรของ 2 ตวแปร

b2(r, s) = b2(r0, s0) + (r – r0) r)s,r(b 002

∂∂ + (s – s0) s

)s,r(b 002∂

∂ +...

b1(r, s) = b2(r0, s0) + (r – r0) r)s,r(b 001

∂∂ + (s – s0) s

)s,r(b 001∂

∂ +...

โดยท s)s,r(b 002

∂∂ หมายถงอนพนธยอย ( partial derivative ) ของ b2 = b2(r, s) เทยบกบตวแปร

r แลวแทนคา r = r0, s = s0ถา r = r*, s = s* และจาก (2.23) จะได

0 = b2(r*, s*) ≈ b2(r0, s0) + (r* – r0) r)s,r(b 002

∂∂ + (s* – s0) s

)s,r(b 002∂

0 = b1(r*, s*) ≈ b1(r0, s0) + (r* – r0) r)s,r(b 001

∂∂ + (s* – s0) s

)s,r(b 001∂

−=∂∂−+∂

∂−

−=∂∂−+∂

∂−

)s,r(bs)s,r(b)s*s(r

)s,r(b)r*r(

)s,r(bs)s,r(b)s*s(r

)s,r(b)r*r(

001001

0001

0

002002

0002

0 .....(2.24)

ในทางปฏบตในการหาคา r = r* , s = s* เราจะไดเพยงคาประมาณ r1, s1 แทนคา r* = r1, s* =

s1 ใน (2.24) จะได

)s,r(bs)s,r(b)ss(r

)s,r(b)rr(

)s,r(bs)s,r(b)ss(r

)s,r(b)rr(

001001

01001

01

002002

01002

01

−=∂∂−+∂

∂−

−=∂∂−+∂

∂−

เขยนยอ ๆ เปน

01011

112

22sss,rrr;

bsbrr

br

bsbrr

br−=∆−=∆

−=∂∂∆+∂

∂∆

−=∂∂∆+∂

∂∆.....(2.25)

ถาเราทราบ rb2∂∂ , s

b2∂∂ , r

b1∂∂ , s

b1∂∂ ทจด (r0, s0) กแกสมการ (25) หาคา ∆r , ∆s ซงกจะได

คา r1, s1 ตวใหมตอไป

Page 46: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 71

แนวทางการหา rb2∂∂ , s

b2∂∂ , r

b1∂∂ , s

b1∂∂

เนองจากbn+1 = an + 1 bn = an + rbn + 1

r1nb

∂+∂ = 0 s

nb∂

∂ = 0

bn = an + rbn + 1 bn – 1 = an – 1 + rbn + sbn + 1

rnb

∂∂ = bn + 1 + r r

1nb∂+∂

s1nb

∂−∂ = r s

nb∂

∂ + bn + 1

rnb

∂∂ = bn + 1 s

1nb∂

−∂ = bn + 1

bn – 1 = an – 1 + rbn + sbn + 1 bn – 2 = an – 2 + rbn – 1 + sbn

r1nb

∂−∂ = r

nbrnb ∂∂+ s

2nb∂−∂ = nbs

1nbr +∂−∂

r1nb

∂−∂ = bn + rbn + 1 s

2nb∂−∂ = bn + rbn + 1

bn – 2 = an – 2 + rbn – 1 + sbn bn – 3 = an – 3 + rbn – 2 + sbn – 1

r2nb

∂−∂ = bn – 1 + r

1nb∂−∂ +s r

nb∂

∂s

3nb∂−∂ = r s

2nb∂−∂ +bn – 1 +s s

1nb∂

−∂

= bn – 1 + r s2nb

∂−∂ + s s

1nb∂

−∂

s3nb

∂−∂ = bn – 1 +r r

1nb∂−∂ + s s

nb∂

bk = ak + rbk +1 + sbk + 2

tkb

∂∂ = bk + 1 + r r

2kbsr1kb

∂+∂+∂

+∂ ; k = n – 1, n – 2, ..., 2, 1จะสงเกตเหนวา

r1nb

∂+∂ = s

nb∂

∂ = 0

rnb

∂∂ = s

1nb∂

−∂

r1nb

∂−∂ = s

2nb∂−∂

r2nb

∂−∂ = s

3nb∂−∂

หรอจะเขยนทวไป rkb

∂∂ = s

1kb∂

−∂ , k = n + 1, n ,..., 2

ถาให ck + 1 = rkb

∂∂ = s

1kb∂

−∂ , k = n, n – 1, ..., 2 .....(2.26)

Page 47: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

72 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

ผลทไดคอ

3cs1b;2cr

1b4cs

2b;3cr2b

=∂∂=∂

∂=∂

∂=∂∂

.....(2.27)

แทน (2.27) ลงใน (2.25) :1b3sc2rc2b4sc3rc

−=∆+∆−=∆+∆

.....(2.28)

เมอทราบคา c2, c3, c4 กแกสมการหา ∆r, ∆s ไดท าใหหาคา r1 = r0 + ∆r , s1 = s0 + ∆s ได

การหาคา c2, c3, c4

จาก (2.26) ck + 1 = rkb

∂∂

k = n ; cn + 1 = rnb

∂∂ = bn + 1

k = n – 1 ; cn = r1nb

∂−∂ = bn + r⋅bn + 1 = bn + r⋅cn + 1

ck + 1 = rkb

∂∂ = bk + 1 + r. r

1kb∂+∂ + s⋅ r

2kb∂+∂

k = k – 1 ; ck = bk + r⋅ rkb

∂∂ + s⋅ r

1kb∂+∂

ck = bk + r ⋅ ck + 1 + s ⋅ ck + 2

เขยนสรปคา bk, ck ตาง ๆ ไดดงน

bn + 1 = an + 1

bn = an + r ⋅ bn + 1

bk = ak + r ⋅ bk + 1 + s ⋅ bk + 2k = n – 1, n – 2, ..., 1

cn + 1= bn + 1

cn = bn + r ⋅ cn + 1

ck = bk + r ⋅ ck + 1 + s ⋅ ck + 2 k = n – 1, n – 2, ..., 2

เพอความสะดวกในการค านวณคา bk, ck ตาง ๆ เราสรางตาราง Quadratic synthetic divisionp(x) : an + 1 an an - 1 ... ak ... a4 a3 a2 a1

r rbn + 1 rbn ... rbk + 1 ... rb5 rb4 rb3 rb2s sbn1 ... sbk + 2 ... sb6 sb5 sb4 sb3

q(x) : bn + 1 bn bn – 1 ... bk ... b4 b3 b2 b1r rcn + 1 rcn ... rck + 1 ... rc5 rc4 rc3 rc2s scn + 1 ... sck + 2 ... sc6 sc5 sc4

cn + 1 cn cn - 1 ... ck ... c4 c3 c2

...(2.29)

Page 48: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 73

ยอนกลบไปทระบบสมการ (2.28)

132

243bscrcbscrc

−=∆+∆−=∆+∆

.....(2.28)

D = 32

43cccc

= 4223 ccc − ตอง ≠ 0

D1 = 31

42cbcb

−−

= b1c4 – b2c3 , D2 = 12

23bcbc

−−

= b2c2 – b1c3

∆r = DD1 , ∆s = D

D2

r1 = r0 + ∆ r , s1 = s0 + ∆s

จากนนใชคา r1, s1 เปนคาเรมตนค านวณดวยวธการแบบเดยวกน จนกวาจะไดคา b2 = 0, b1 = 0 หรอไดคา r, s ถกตองตามทตองการ จะได

p(x) = (x2 – rx – s) q(x)

การหารากเชงซอนของ x2 – rx – s = 0 ใชสตรส าเรจ x1, 2 = 2s4rr 2 +±

ตวอยางท 2.14 จงหารากเชงซอนของ p(x) = x4 + x3 + 3x2 + 4x + 6 ใชคาเรมตน r0 = -2.1, s0 = -1.9 เพอหา

quadratic factor ของ (x2 – rx – s) ของ p(x) ตองการความถกตองททศนยม 4 ต าแหนงครงท 1

1.0000 1.0000 3.0000 4.0000 6.0000r = -2.1 -2.1000 2.3100 -7.1610 2.2419s = -1.9 -1.9000 2.0900 -6.4790

1.0000 -1.1000 3.4100 -1.0710 1.7701-2.1000 6.7200 -17.2830 b2 b1

-1.9000 6.08001.0000 -3.2000 8.2300 -12.2740

c4 c3 c2

แทนลงใน 7701.1s2300.8r2740.120710.1s2000.3r2300.8

bscrcbscrc

132

243−=∆+∆−

=∆−∆⇒−=∆+∆

−=∆+∆

Page 49: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

74 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

D = 2300.82740.122000.32300.8

−−

= 28.4561000

D1 = 2300.87701.12000.30710.1

−−

= 3.1500100

D2 = 7701.12740.120710.12300.8

−− = - 1.4224690

r1 =

+− 4561000.281500100.31.2 = –1 .9893028

s1 =

−+− 4561000.284224690.19.1 = –1.9499881

ครงท 21.0000 1.0000 3.0000 4.0000 6.0000

r = – 1.9893028 -1.9893028 1.9680228 -6.0037848 0.1485138s = – 1.9499881 -1.9499881 1.9291286 -5.8851317

1.0000 -0.9893028 3.0180347 -0.0746562 0.2633821-1.9893028 5.9253484 -13.9119800

-1.9499881 5.80824541.0000 -2.9786056 6.9933950 -8.1783707

6.9933950∆r – 2.9786056∆s = 0.0746562-8.1783904∆r + 6.9933950∆s = - 0.2633821

D = 9933950.61783907.89786056.29933950.6

−−

= 24.547373

D1 = 9933950.62633821.09786056.20746562.0

−−

= -0.2624111

D2 = 2633821.01783907.80746562.09933950.6

−− = -1.2313674

r1 = D1D

1r + =

−+− 547373.242624111.09893028.1

= –1 .9999927

s2 = DDs 2

1+ =

−+− 547373.242313674.19499881.1

= –2.0001509จะเหนวา r2 → r* = -2

s2 → s* = -2 ∴ quadratic factor ของ p(x) คอ x2 – 2x + 2

Page 50: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 75

p(x) = (x2 + 2x + 2) q(x)

1.0000 1.0000 3.0000 4.0000 6.0000r* = – 2 -2.0000 2.0000 -6.0000 0.0000s* = – 2 -2.0000 2.0000 -6.0000

1.0000 -1.0000 3.0000 0.0000 0.0000

q(x) = x2 – x + 3

p(x) = (x2 + 2x + 2) (x2 – x + 3 ) = 0

หารากของ x2 + 2x + 2 = 0

x = 2)2)(1(442 −±−

= 2i22 ±− = -1 + i

หารากของ x2 – x + 3 = 0

x = 21211 −±−

= i2115.0 ± = 0.5 + 1.6583123i

p(x) มรากเชงซอน 4 รากคอ –1 + i , –1 – i , 0.5 + 1.6583123 i , 0.5 – 1.6583123 i

ล าดบขนตอน 2.8 Bairstow's Methodส าหรบหา quadratic factor x2 – rx – s ของ p(x) = an +1 xn + anxn – 1 + ... + a2x + a11. ก าหนด ส.ป.ส. ของ p(x), ak, k = 1, 2, ..., n + 1คาขอบเขต ε, คาเรมตน r, s

2. ให bn + 1 = an + 1 ; cn + 1 = bn + 1i = 0

3. bn = an + r ⋅ bn + 1 , cn = bn + r ⋅ cn + 14. ค านวณ

bk = ak + r ⋅ bk + 1 + s ⋅ bk + 2

ck = bk + r ⋅ ck + 1 + s ⋅ ck + 2 k = n – 1, n – 2, ..., 2

5. b1 = a1 + r ⋅ b2 + s ⋅ b3

6. det = 23c = c2 ⋅ c4

Page 51: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

76 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

det 1 = b1 ⋅ c4 – b2 ⋅ c3

det 2 = b2 ⋅ c2 – b1 ⋅ c37. ถา det = 0 แลว แทน dr = (0.05)r , ds = (0.05)s

มฉะนน dr = det1 / det , ds = det 2 / det8. r = r + dr , s = s + ds

i = i + 19. ถา | dr | < ε และ | ds | < ε แลว แสดง quadratic factor = x2 – rx – sมฉะนนยอนกลบไปท าขอ 3.

Page 52: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 77

โฟวลชารท 2.8 Bairstow's Method

รปท 2.20 โฟวลชารทของการหารากของสมการพหนามดวยวธของแบรสโตว

START

input : a(k), k = 1, 2,n +1, ε, r, s

b(n+1) = a(n+1)c(n+1) = b(n+1)

i = 0

det = c(3) * c(3) - c(2) * c(4)det1 = b(1) .c(4) - b(2) *c(3)

det2 = b(2) * c(2) - b(1) * c(3)

det = 0Yes

output : print quadraticfactor = x2 - rx - s

STOP

k = n-1(-1)2

b(k) = a(k) + r . b(k+1) + s . b (k+2)c(k) = b(k) + r . c(k+1) + s . c (k+2)

b(1) = a(1) + r * b(2) + s * b(3)

| ds | < εNo

b(n) = a(n) + r . b(n+1)c(n) = b(n) + r . c(n+1)

r = r + drs = s + ds

dr = det1 / detds = dets / det

No

| dr | < εNo

dr = 0.05*rds = 0.05*s

YesYes

Page 53: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

78 ระเบยบวธเชงเลขส าหรบงานวศวกรรม

2.8 สรปในหนวยนกลาวถงวธการหารากสมการไมเปนเชงเสนคอ วธแบงสองชวง วธต าแหนงผด วธนวตน

ราฟสน วธเสนตดโคง นอกจากนยงมวธหาคารากของสมการพหนามทน าเสนอในหนวยนคอวธของฮอรเนอรทใชรวมกบวธของนวตน และวธของแบรสโตว ซงสามารถใชส าหรบหาคารากเชงซอนไดดวย แตอยางไรกตามไมมวธใดดทสดและแกปญหาไดทกปญหา ซงแตละวธกมขอดขอเสยตางกน

วธแบงสองชวงและวธต าแหนงผดจะสามารถลเขาหาค าตอบอยางแนนอน โดยตองเลอกคาเรมตนใหคาฟงชนมเครองหมายตางกนแตความเรวในการเขาหาค าตอบจะชา

วธนวตนราฟสนจะลเขาหาค าตอบเรวกวาวธอน แตตองหาอนพนธของฟงชนท าใหไมสะดวก สามารถใชวธเสนตดโคงแทนไดแตความเรวในการลเขาหาค าตอบจะชากวาของวธนวตนราฟสน นอกจากนถาเลอกคาเรมตนไมเหมาะสมอาจท าใหไมลเขาหาค าตอบได

วธฮอรเนอรและแบรสโตวชวยใหสามารถหาคารากของฟงชนทเปนรากเชงซอนไดโดยไมตองหาอนพนธของสมการ

Page 54: การหารากของสมการ f(x) = 0rmuti.ac.th/user/kittiwut/company_files/numerical_pdf/num_U2.pdf · กลุ ม 2 ฟ งชันพหุนาม ( Polynomial)

หนวยท 2 การหารากของสมการ f(x) = 0 79

แบบฝกหดท 2

1. ใชวธกราฟหาต าแหนงของรากสมการตอไปน1

1.1 x + cos (x) = 01.2 ex + 2x – 2 = 0

2. หารากของสมการโดยวธแบงสองชวง ตองการความถกตองทจดทศนยม 4 ต าแหนงของสมการ 3xex = 1

ก าหนดใหคารากอยระหวาง x1 = 0.25 และ x2 = 0.263. หารากของสมโดยวธต าแหนงผด ใหมความถกตองททศนยม 3 ต าแหนง2

3.1 x3 - 4x -9 = 03.2 x6 - x4 - x3 - 1 = 0

4. แสดงลกษณะการลเขาหาค าตอบของวธนวตนราฟสน พรอมทงเขยนสมการทใชหาคารากของวธน5. ใชวธต าแหนงผดค านวณหารากของสมการตอไปน โดยใหมความถกตองททศนยม 4 ต าแหนง

5.1 xex = 2 5.2 cos x = 3x - 1 5.3 xex = cos x 5.4 x log10x = 1.2

6. หารากเชงซอนของ p(x) ตอไปน โดยมการท าซ า ( Iteration ) เพยง 2 ครง 5.1 p(x) = 3x4 – 2 x3 + 4 x2 – x + 6 = 0 ใชคาเรมตน r = 1 และ s = 1

5.2 p(x) = 5x4 + 7 x2 + x + 3 = 0 และควอดราตคแฟคเตอรโดยประมาณของ p(x) คอ x2 - 0.5 x + 1

5.3 p(x) = 2x4 – 3 x3 + 5 x2 + x + 9 = 0 มคาประมาณของรากรากหนงเปน -0.5 + i

******

1 ปรงจนทร วงศวเศษ เอกสารค าสอนระเบยบวธเชงตวเลข I. สถาบนเทคโนโลยพระจอมเกลาธนบร หนา 3-42 B.S. Grewal Numerical Methods in Engineering & Science :KHANNA PUBLISHERS, 1996 , p35.