[過去ログ] 高校数学の質問スレ Part441 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
477
(1): 05/11(日)08:45 ID:2CgV4g4d(2/2) AAS
>>475
Rで作ったコードをAIでMathematicaに移植してもらった。
慣れた言語で作って移植はAIに依頼するのが便利。翻訳ソフトみたいなものだな。
(Rだと小数解しかだせないが、分数解を出せる言語に移植させれば( ・∀・)イイ!!
Rで分数解を出そうとしたらバグ修正に辟易した。)

(* カルダノ法により,3次方程式の解を求める関数 *)
cubicSolve[a_, b_, c_, d_] := Module[{bNorm, cNorm, dNorm, p, q, delta, u, v, phi},
(* 3次の項の係数 a がゼロの場合、3次方程式ではない *)
If[a == 0, Return["3次の項の係数がゼロです"]];

(* 係数を規格化して x^3 + bNorm x^2 + cNorm x + dNorm = 0 の形にする *)
bNorm = b / a;
cNorm = c / a;
dNorm = d / a;

(* カルダノの公式で使用するパラメータ p と q を計算 *)
p = cNorm - bNorm^2 / 3;
q = 2 bNorm^3 / 27 - bNorm cNorm / 3 + dNorm;

(* 判別式 delta を計算 *)
delta = q^2 + 4 p^3 / 27;

(* 判別式 delta の値によって解のパターンを分岐 *)
Which[
delta > 0, (* 異なる3つの実数解 *)
u = (-q / 2 + Sqrt[delta / 4])^(1/3);
v = (-q / 2 - Sqrt[delta / 4])^(1/3);
Return[{u + v - bNorm / 3,
-(u + v) / 2 - bNorm / 3 + I (u - v) Sqrt[3] / 2,
-(u + v) / 2 - bNorm / 3 - I (u - v) Sqrt[3] / 2}],

delta == 0, (* 重解を持つ実数解 *)
u = (-q / 2)^(1/3);
Return[{2 u - bNorm / 3, -u - bNorm / 3, -u - bNorm / 3}],

delta < 0, (* 3つの異なる実数解(三角関数を用いる) *)
phi = ArcCos[(-q / 2) / Sqrt[-(p^3) / 27]];
Return[{2 Sqrt[-p / 3] Cos[phi / 3] - bNorm / 3,
2 Sqrt[-p / 3] Cos[(phi + 2 Pi) / 3] - bNorm / 3,
2 Sqrt[-p / 3] Cos[(phi + 4 Pi) / 3] - bNorm / 3}]
]
];

cubicSolve[1,-4,-5,1]
% // N

{4.96625, -1.1425, 0.176245}

正しく移植されている。
1-
あと 525 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.011s