- 注册时间
- 2017-1-14
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 11099
- 在线时间
- 小时
|
本帖最后由 王守恩 于 2026-4-22 16:52 编辑
(*定义数列:Fibonacci[k+2] 给出 2,3,5,8,13,...*)A[k_] := Fibonacci[k + 2]
(*生成第 n 行的数字列表*)GenerateList[1] := {1}
GenerateList[2] := {2, 1}
GenerateList[n_] := GenerateList[n] = Module[{prev, k}, If[EvenQ[n], prev = GenerateList[n - 1];
Append[prev, Last[prev]], prev = GenerateList[n - 1]; prev = Most[prev]; k = (n - 1)/2; Join[prev, {A[k + 1], A[k]}]]]
(*构建乘积部分的字符串:返回类似 "Sqrt[2] * Sqrt[5 - 3]" 或 "Sqrt[2] * Sqrt[5 - \Sqrt[3] * Sqrt[3]]" 等*)
buildProductString[L_List] :=
Module[{x = L[[1]], y = L[[2]], rest = L[[3 ;;]]},
Which[Length[rest] == 0,
"Sqrt[" <> ToString[x] <> "] * Sqrt[" <> ToString[y] <> "]",
Length[rest] == 1,
"Sqrt[" <> ToString[x] <> "] * Sqrt[" <> ToString[y] <> " - " <>
ToString[rest[[1]]] <> "]", True,
"Sqrt[" <> ToString[x] <> "] * Sqrt[" <> ToString[y] <> " - " <>
buildProductString[rest] <> "]"]]
(*将数字列表转换为字符串表达式,然后转为带 HoldForm 的排版表达式*)
MakeExpr[L_List] := Module[{str},
str = Switch[Length[L], 1, ToString[L[[1]]], 2,
"Sqrt[" <> ToString[L[[1]]] <> " - " <> ToString[L[[2]]] <> "]",
3, "Sqrt[" <> ToString[L[[1]]] <> " - Sqrt[" <> ToString[L[[2]]] <>
" - " <> ToString[L[[3]]] <> "]]", _,
Module[{a = L[[1]], b = L[[2]], c = L[[3]], rest = L[[4 ;;]]},
"Sqrt[" <> ToString[a] <> " - Sqrt[" <> ToString <> " - " <>
buildProductString[Prepend[rest, c]] <> "]]"]];
(*关键:使用 ToExpression 并强制用 HoldForm 包裹,防止任何化简*)ToExpression[str, StandardForm, HoldForm]]
(*显示第 n 行等式*)ShowG[n_] := Row[{"G(", n, ") = ", MakeExpr[GenerateList[n]], " = 1"}]
(*竖向排列显示 G(1) 到 G(18)*)Column[Table[ShowG, {i, 1, 18}], Alignment -> Left]
|
|