gpt4 book ai didi

clojure - 如何将复杂的递归从 clojure 转换为 maxima?

转载 作者:行者123 更新时间:2023-12-02 16:51:28 26 4
gpt4 key购买 nike

我认为这个小程序:

(defn average [lst] (/ (reduce + lst) (count lst)))
(defn sqsum [lst] (reduce + (map #(* % %) lst)))


(defn tet [row col]
(cond (= [row col] [0 0]) 0
(= [row col] [1 0]) 1
(< row (inc col)) 0
(> row (inc col)) (average (for [i (range row)] (tet i col)))
(= row (inc col)) (Math/sqrt (- 1 (sqsum (for [i (range col)] (tet row i)))))))

给我不同维度的广义四面体/欧几里得单纯形的顶点坐标。

不幸的是,clojure 会以浮点形式表达 sqrt(3/4) 之类的内容,而我希望以符号形式得到答案。

Maxima 对于这类事情来说是理想的选择,但我不知道如何在 maxima 中表达这种关系。

或者,向 clojure 添加符号平方根的解决方案也不错。

最佳答案

在 Maxima 中,内存函数由 f[x, y] := ... 定义,即用方括号代替括号作为参数。

据我所知,这是 Clojure 函数的翻译:

average (lst) := apply ("+", lst) / length (lst);
sqsum (lst) := apply ("+", map (lambda ([x], x^2), lst));

tet [row, col] :=
if row < col + 1 then 0
else if row > col + 1 then average (makelist (tet [i, col], i, 0, row - 1))
else if row = col + 1 then sqrt (1 - sqsum (makelist (tet [row, i], i, 0, col - 1)));

tet [0, 0] : 0;
tet [1, 0] : 1;

例如:

radcan (tet[4, 3]);
=> sqrt(5)/2^(3/2)

radcan (tet[7, 6]);
=> 2/sqrt(7)

第一个与上面的a[4, 3]一致。不知道第二个。

关于clojure - 如何将复杂的递归从 clojure 转换为 maxima?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23793581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com