Pon*_*dle 9 math optimization redundancy function actionscript-3
我有一个非常大的等式,我需要用它来解决给定的变量.所以我使用了一个能够根据给定变量重写方程的在线工具.它给了我一些巨大的700字符方程式.我测试了它,它确实有效.
我可以在等式中看到一些非常明显的冗余,它重新计算一个可以保存为临时变量的值.我可以通过整个方程并自己优化它,但我可能不得不用更多的方程来做这个,所以我想自动化这个过程.
什么是有助于优化数学冗余的好工具?
(这只是个人项目,所以我真的更喜欢免费的东西)
对于所有我认识的人都会问这个问题真的是必要的:这是性能关键代码,根据我的经验,AS3编译器不会对它自己做这些优化.删除冗余也会使代码更具可读性.
Dr.*_*ius 10
尝试在Wolfram Alpha或Mathematica中使用FullSimplify.
WolframAlpha FullSimplify(x ^ 2 + 2 x +1)
编辑 - >
再想一想,Mathematica不需要简化你的一个var方程来解决它...... Solve命令(或FindRoot,或FindInstance ......)会做到这一点.
试试这个例子
WolframAlpha求解(x ^ 2 + 2*x + 1 = 0,x)
编辑 - > 只是为了从ideone.com中找到无依赖关系的答案,经过一些简化后,你的700 char方程就变成了
t= -((E*A+B*F+ Sqrt(2*A*E*F*B+ A^2*(I^2-F^2) + B^2*(I^2-E^2))) /(A^2 + B^2))
Run Code Online (Sandbox Code Playgroud)
哪里
E = e - g
A = a - c
B = b - d
F = f - h
I = i + j
Run Code Online (Sandbox Code Playgroud)
请检查Sqrt论证是否是一个完美的正方形,基于其他"几何"考虑因素......它吠叫并且有一条尾巴...它是一条狗吗?
编辑 - >猜测:
我没有任何证据,但方程的对称性表明你的问题
E^2 = (I^2-F^2) => (e-g)^2 = (i+j)^2 - (f-h)^2
Run Code Online (Sandbox Code Playgroud)
如果是这样(请核实),你的等式就变成了
t= -((E*A+B*F+ Abs(E*A+B*F)) /(A^2 + B^2))
Run Code Online (Sandbox Code Playgroud)
如果A E + B F> 0(我猜是这样,因为如果不是t === 0)
+-----------------------------------+
¦ Your 700 chars equation comes to ¦
¦ ¦
¦ t= -2 * (A*E + B*F) / (A^2 + B^2) ¦
¦ ¦
+-----------------------------------+
Run Code Online (Sandbox Code Playgroud)
简短又甜蜜...... :)
Maxima 有一个有用的函数,称为optimize:
功能:优化(expr)
返回一个表达式,该表达式产生与 expr 相同的值和副作用,但通过避免重新计算公共子表达式来提高效率。Optimize 还具有“折叠”其参数的副作用,以便共享所有公共子表达式。做例子(优化)作为例子。
它会将您上传到 Ideone 的表达式简化为:
block(
[%1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12,%13,%14],
%1:a^2,
%2:b^2,
%3:c^2,
%4:d^2,
%5:-%4+2*b*d-%2,
%6:-%3+2*a*c-%1,
%7:2*a-2*c,
%8:2*c-2*a,
%9:
%8*d+b*%7,
%10:%7*d+b*%8,
%11:i^2,
%12:j^2,
%13:-2*%12-4*i*j-2*%11,
%14:%12+2*i*j+%11,(-sqrt(%4*%14+%3*%14+%2*%14+%1*%14+b*d*%13+a*c*%13+%6*h^2+ (%9*g+2*%3-4*a*c+2*%1)*f+%10*e)*h+%5*g^2+f*(%10*g+%9*e)+(2*%4-4*b*d+2*%2)*e*g+%6*f^2+%5*e^2)-(d-b)*h-(c-a)*g-(b-d)*f-(a-)*e)/(%4-2*b*d+%3-2*a*c+%2+%1))
Run Code Online (Sandbox Code Playgroud)
不一定更具可读性,但它不包含更多常见的子表达式。