|
|

楼主 |
发表于 2026-8-3 11:21
|
显示全部楼层
(* ============================================================
代数严格验证模块【修复稳定版】
目的: 排除纯数值巧合,区分【精确代数恒等】与【浮点逼近】
使用前提:xCandidate 必须是【符号根式表达式】,禁止直接使用N[]浮点数
============================================================ *)
Print["\n===== 代数严格验证模块启动 ====="];
(* ---------- 重要分界线 ----------
关键要求:不要直接用N[]浮点数送入校验!
正确:xCandidate = 完整符号根式构造式(未N[]求值)
错误:xCandidate = N[构造式, 40]
---------------------------------- *)
(* 候选根:必须传入符号根式原始表达式!不要预先数值化 *)
xCandidateSym = rootListSym[[1]]; (* rootListSym:未经N[]的符号根集合 *)
xCandidateNum = N[xCandidateSym, 60];
Print["\n[1/5] 候选根符号表达式:"];
Print[" x_sym = ", Short[xCandidateSym, 5]];
Print["[1/5] 候选根数值 (60位精度):"];
Print[" x_num = ", N[xCandidateSym, 60]];
(* ✅ 核心验证1:符号域极小多项式检测(只接受精确代数表达式) *)
Print["\n[2/5] 极小多项式检测 MinimalPolynomial[符号表达式,z]:"];
minPoly = Quiet[MinimalPolynomial[xCandidateSym, z]];
Print[" 极小多项式 = ", minPoly];
If[PolynomialQ[minPoly, z],
degPoly = Exponent[minPoly, z];
Print[" ✅ 识别成功,极小多项式次数 = ", degPoly];
(* 判断极小多项式是否等价目标多项式 z^5-z+1 *)
targetPoly = z^5 - z + 1;
If[FullSimplify[minPoly / targetPoly] === Constant,
Print[" 🎯 极小多项式与目标方程完全等价!"];,
Print[" ⚠️ 极小多项式 ≠ z^5-z+1,只是数值逼近解"];
];,
Print[" ⚠️ 无法构造有限次极小多项式,表达式含有超越成分"];
];
(* ✅ 核心验证2: RootReduce 精确归约(符号输入) *)
Print["\n[3/5] RootReduce 精确化检测(符号输入):"];
reducedSym = Quiet[RootReduce[xCandidateSym]];
Print[" 归约结果: ", reducedSym];
If[Head[reducedSym] === Root,
Print[" ✅ 成功归约为标准Root代数对象"];,
Print[" ⚠️ RootReduce无法化简为单一Root对象"];
];
(* ✅ 核心验证3:符号回代目标方程【终极判定标准】 *)
Print["\n[4/5] 符号精确回代 f(z)=z^5-z+1 == 0 验证:"];
residualSym = FullSimplify[xCandidateSym^5 - xCandidateSym + 1];
Print[" f(x_sym) = ", residualSym];
If[residualSym === 0,
Print[" 🎉【最终结论】精确恒等于零!该根式表达式是方程严格代数解"],
Print[" ❌【最终结论】残差不为0,仅高精度数值逼近,非精确代数解"];
];
(* ✅ 辅助:高浮点精度残差对照参考(仅作参考,不作为代数证明!) *)
Print["\n[5/5] 60位精度数值残差(仅辅助参考,不能作为代数证明):"];
residualNum = N[xCandidateNum^5 - xCandidateNum + 1, 30];
Print[" f(x_num) = ", residualNum];
(* ===================== 全部5根批量符号核验模板 ===================== *)
Print["\n===== 全部5根批量代数核验 ====="];
Do[
rkSym = rootListSym[[k + 1]];
rkNum = N[rkSym, 60];
mpR = Quiet[MinimalPolynomial[rkSym, z]];
rrR = Quiet[RootReduce[rkSym]];
resSymR = FullSimplify[rkSym^5 - rkSym + 1];
isExactR = (resSymR === 0);
degR = If[PolynomialQ[mpR, z], Exponent[mpR, z], "N/A"];
Print["k=", k,
" | 极小多项式次数=", degR,
" | RootReduce=", If[Head[rrR] === Root, "✅", "❌"],
" | 符号精确满足方程=", If[isExactR, "🎉精确解", "❌逼近解"]];
, {k, 0, 4}];
|
|