我正在使用 Modelica 解决传热问题的方程组,其中一个是辐射,写为
Ta^4-Tb^4
有人可以说它是否在计算上更快地解决了一个方程,方程写为:
(Ta-Tb)(Ta+Tb)(Ta^2+Tb^2)
?
我正在使用 Modelica 解决传热问题的方程组,其中一个是辐射,写为
Ta^4-Tb^4
有人可以说它是否在计算上更快地解决了一个方程,方程写为:
(Ta-Tb)(Ta+Tb)(Ta^2+Tb^2)
?
这个问题不可能有一个确定的答案。这是因为 Modelica 规范用于正式定义问题陈述,但它没有说明工具如何解决此类方程。此外,由于大多数 Modelica 工具无论如何都会进行符号操作,因此很难预测它们可能对这样的方程采取什么步骤。例如,一个工具可以很好地自行将其转换为霍纳多项式(无需您的手动干预)。
如果要在非线性系统等方程中求解温度,请注意负温度解。当这些温度是非线性问题中的迭代变量时,您应该调查“开始”属性以指定初始(正)猜测。
我会说有两个原因将其拆分为 (Ta-Tb)(Ta+Tb)(Ta^2+Tb^2) 是慢而不是快。
(Ta^2+Tb^2) 需要 2 次乘法和 1 次加法,这意味着 (Ta-Tb)(Ta+Tb)(Ta^2+Tb^2) 需要 4 次乘法和 3 次加法。另一方面,我猜 Ta^4-Tb^4 是这样完成的: ((Ta^2)^2 - (Tb^2)^2) 这意味着 1 次加法和 4 次乘法。
Mathematica 就像一个更通用的编译器,大概知道如何优化这些非常简单的表达式。这意味着使用简单的模式在计算时间方面通常更安全,这些模式很容易被捕获并翻译成超高效的机器代码。
我可能显然错了,但我看不出 (Ta-Tb)(Ta+Tb)(Ta^2+Tb^2) 可能更快的任何原因。希望能帮助到你。
奥斯卡