我们正在进行一个大型的数学项目,其中有许多由Wolfram Mathematica制作的长方程和导数。我们有1000多个很长的方程。在
主程序用Java编写,Mathematica只用于生成方程。我们的目标是将“Mathematica”形式转换为“Java”形式的方程。然后我们可以直接将生成的代码复制/粘贴到“Java”代码中。在
例如,我们有一个Mathematica形式的短方程:Sqrt[((Cos[R]*X1 - X2)^2 + (Sin[R]*Y1 - Y2)^2)/S^2]/S
我们希望它是Java格式的,所以这是预期的结果:
^{pr2}$
下面是简短的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 regex,但找不到合适的解决方案。问题是幂函数必须将括号内的所有内容都取出来,例如:(Math.cos(R) * X1 - X2)^2 >>>> Math.pow(Math.cos(R) * X1 - X2, 2)
我希望有人能有一个快速而奇特的解决办法。否则我需要花点时间写一个长而“脏”的脚本,这将解决这个问题。在
感谢您的帮助:)