gpt4 book ai didi

python - 将 Mathematica 函数转换为 Java 形式

转载 作者:行者123 更新时间:2023-12-01 09:15:41 24 4
gpt4 key购买 nike

我们正在开展一个大型数学项目,其中包含许多由 Wolfram Mathematica 制作的长方程和导数。我们有超过 1000 个很长的方程。

主程序是用Java编写的,Mathematica仅用于生成方程。我们的目标是将“Mathematica”形式的方程转换为“Java”形式。然后我们可以将生成的代码直接复制/粘贴到“Java”代码。

例如,我们有 Mathematica 形式的简短方程:

Sqrt[((Cos[R]*X1 - X2)^2 + (Sin[R]*Y1 - Y2)^2)/S^2]/S

我们希望以 Java 形式获得它,所以这是预期的结果:

Math.sqrt((Math.pow(Math.cos(R) * X1 - X2, 2) + Math.pow(Math.sin(R) * Y1 - Y2, 2)) / Math.pow(S, 2)) / S

这是一个简短的 python 脚本,它管理一些功能:

E = "Sqrt[((Cos[R]*X1 - X2)^2 + (Sin[R]*Y1 - Y2)^2)/S^2]/S"

E = E.replace("[", "(") # Replaces Square brackets with normal brackets
E = E.replace("]", ")") # Replaces Square brackets with normal brackets

E = E.replace("*", " * ") # Add some spaces for easier reading
E = E.replace("/", " / ") # Add some spaces for easier reading

E = E.replace("Cos", "Math.cos") # Change "Mathematica" cos to "Java" cos
E = E.replace("Sin", "Math.sin") # Change "Mathematica" sin to "Java" sin

E = E.replace("Sqrt", "Math.sqrt") # Change "Mathematica" SQRT to "Java" SQRT

# Converting Power function is missing here... This is a must :)

print(E)

以上代码产生:

Math.sqrt(((Math.cos(R) * X1 - X2)^2 + (Math.sin(R) * Y1 - Y2)^2) / S^2) / S

问题是我们没有找到幂函数的任何解。我们想使用 python 正则表达式,但找不到任何合适的解决方案。问题是幂函数必须采用括号内的所有内容,例如:

(Math.cos(R) * X1 - X2)^2     >>>>    Math.pow(Math.cos(R) * X1 - X2, 2)

我希望有人有一个快速而奇特的解决方案。否则我将需要花一些时间编写一个又长又“脏”的​​脚本来解决这个问题。

感谢您的帮助:)

最佳答案

您的正则表达式搜索可能是这样的:

import re

E = "(Math.cos(R) * X1 - X2)^2"

regex = re.compile(r'\((.*)\)\^(\d)')
match = regex.match(E)

new_E = "Math.pow(%s, %s)" % (match.group(1), match.group(2))

print(new_E) # Math.pow(Math.cos(R) * X1 - X2, 2)

它的工作方式是搜索括号内的任何内容,后跟 ^n,即 n 0 到 9 之间的数字。

我希望您可以根据您的需要对其进行调整。

关于python - 将 Mathematica 函数转换为 Java 形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51285909/

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