一元三次方程(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-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