一元三次方程(IV)

程式更新日期: 2012年10月13日

程式由網友 roviury 提供,準確度亦較(III)版本有改善。

這個程式版本可以計算複數係數的一元三次方程。

程式需要在 CMPLX 模式下執行,因此在選擇新程式位置後,按 2 選用CMPLX模式。

注意: 5!o是按 5 SHIFT x! SHIFT Ans 1。

程式一(實數係數版本,119 bytes / 108 bytes,使用記憶A, B, C及D)

?→A: ?→B: ?→C: ?→D:

B3 - 9┘2A( BC - 3DA→D: B2 - 3AC→C:  √( D2 - C3:

Ans - D - 2Ans(Ans=D→D:  3√( Abs(Ans => Ans∠(3-1 arg(D) + 5!o ( πr = arg( D→D:

While 1: Abs( D => D + C┘D: (Ans - B)┘(3A◢ 1∠5!oD→D: WhileEnd

註: 程式一如有綠色的程式碼,第一個根必為實數根。如果不用第一個根一定為實根,綠色的程式碼可以不輸入,程式長度則可減短至108 bytes。

 

程式二(複數係數版本,121 bytes,使用記憶A, B, C, D及X)

?→A: ?→B: ?→C: ?→D:

B3 - 9┘2A( BC - 3DA→D: B2 - 3AC→C: 

√( Abs( D2 - C3 => Ans∠( . 5 arg(D2 - C3: Ans - D - 2Ans(Ans=D→D: 

3√( Abs(Ans => Ans∠(3-1 arg(D→D:

While 1: Abs( D => D + C┘D: (Ans - B)┘(3A◢ 1∠5!oD→D: WhileEnd

 

例題1: 解 3x3 - 5x2 + x - 4 =0

按 Prog 1 再按 3 EXE - 5 EXE 1 EXE - 4 EXE (顯示第一個根為1.86977)

EXE ( 此時計算機右上角出現R<=>I,表示為複數解)

(顯示第二個根實數部為 - 0.101554)

Shift Re<=>Im (顯示第 二個根虛數部為 0.838323 i)

EXE (顯示第三個根的實數部為 - 0.101554)

Shift Re<=>Im (顯示第 三個根虛數部為 - 0.838323 i)

計算完結後按 AC 終止程式

 

例題2: 解 x3 + ( -3 - 9i)x2 + ( -29 + 12i)x + 25 + 21i = 0

按 Prog 1 再按 1 EXE -3 - 9i EXE -29 + 12i EXE

25 + 21i EXE (顯示第一個根的實數部為 4)

Shift Re<=>Im (顯示第 一個根虛數部為 5 i)

EXE (顯示第二個根的實數部為1)

Shift Re<=>Im (顯示第二個根虛數部為  i)

EXE (顯示第三個根的實數部為 - 2)

Shift Re<=>Im (顯示第三個根虛數部為 3 i)

計算完結後按 AC 終止程式

 

例題3: 解 x2 - 7x + 12 = 0  (一元二次方程)

方程可以寫成 x3 - 7x2 + 12x = 0 (其中捨去 一個 x=0 的解)

按 Prog 1  再按 1 EXE - 7 EXE 12 EXE 0 EXE(顯示第一個實數根為4)

EXE (顯示第二個根為0 (捨去)) EXE (顯示第三個實數根為3) 

EXE (不用理會第四個答案,此時程式計算亦終止)

計算完結後按 AC 終止程式

 

返回 CASIO fx-50FH、fx-3650P II、fx-50FH II及fx-50F PLUS 程式集

 

附錄程式(121 bytes,實數係數實根版)

程式需要在 CMPLX 模式下執行,因此在選擇新程式位置後,按 2 選用CMPLX模式。

注意: 5!o是按 5 SHIFT x! SHIFT Ans 1。

?→A: ?→B: ?→C: ?→D:

B3 - 9┘2A( BC - 3DA→D: B2 - 3AC→C:  √( D2 - C3:

Ans - D - 2Ans(Ans=D→D: 

3√( Abs(Ans => Ans∠(3-1 arg( D )+5!o r=arg(D→D:

While 1: Abs( D => 3√(D + C┘D: (Ans3 - B)┘(3A◢ 1∠5!oD→D: WhileEnd

 

1, -3, 3, 3

2.8599, 0.370039475 +- 1.094i

 

1, -3, 4, -3

-0.9265877

0.9633+-1.0911i

Free Web Hosting