プロが教える店舗&オフィスのセキュリティ対策術

3次方程式には解の公式が存在していて、この公式をExcelのセルに入力して、係数を入れれば答えが出るようにしたいのですが、どうも複素数の3乗根が取り扱えないようでエラーとなってしまいます。 実数解を持つことは分かっている場合でも、計算途中で複素数の3乗根が出てくるので答えが出ません。 これを回避する方法をご存知でしたら教えてください。

A 回答 (3件)

数値解ではだめなんですか?

この回答への補足

数値解ではだめか?とのご質問ですが、これはゴールシーク機能ではだめか?ということでしょうか。
やりたいのは、係数がいろいろ変化したときの解を求めて、その結果を横軸変数、縦軸解、でグラフ化したいのです。変数ごとに計算させて結果を別のセルに貼り付けて、とやっていると非常に時間がかかるので、できれば変数の列に対して解の列が自動的に作られると便利になります。 いい方法はあるでしょうか?

補足日時:2007/12/05 10:49
    • good
    • 0

複素数 x + iy の 3乗根を求めるなら, 極座標で r e^(iθ) としてから r^(1/3) e^(iθ/3) = r^(1/3) cos (θ/3) + i r^(1/3) sin (θ/3) とするのが簡単かな.


r = (x^2 + y^2)^(1/2), θ = atan2(x, y) です.
x = y = 0 だと困りますが, まあなんとかしてください.
    • good
    • 0
この回答へのお礼

ご教授ありがとう御座いました。 あのあとExcelの関数をちゃんと調べましたら、IMPOWERが整数乗だけでなく分数乗も扱えると判明しました。 これで試してみます。 ありがとうございました。

お礼日時:2007/12/05 19:19

>変数の列に対して解の列が自動的に作られると便利になります。

 
>いい方法はあるでしょうか?

数値解でいいなら関数を作るのが一番簡単かと。。。
手抜きですが、一応動作はすると思います。
残りの解は因数分解してから解の公式で求めてください。

Function 三次式解(係数1 As Double, 係数2 As Double, 係数3 As Double, 係数4 As Double) As Double

Dim ct As Integer
Dim temp As Double, tempx As Double

For ct = 1 To 1000
temp = 係数1 * tempx ^ 3 + 係数2 * tempx ^ 2 + 係数3 * tempx + 係数4
tempx = tempx - temp / (3 * 係数1 * tempx ^ 2 + 2 * 係数2 * tempx + 係数3)
If Abs(temp) < 10 ^ -16 Then Exit For
Next
三次式解 = tempx

End Function
    • good
    • 1
この回答へのお礼

ご教授ありがとう御座いました。 あのあとExcelの関数をちゃんと調べましたら、IMPOWERが整数乗だけでなく分数乗も扱えると判明しました。 これで試してみます。 ありがとうございました。

お礼日時:2007/12/05 19:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!