MATLAB中的因式分解符号表达式(和的平方)

MATLAB中的因式分解符号表达式(和的平方),matlab,symbolic-math,Matlab,Symbolic Math,如果我从以下符号表达式开始: a^2 + 2*a*b + b^2 然后运行simplify(或factor),我会得到预期的结果: >> simplify(a^2 + 2*a*b + b^2) (a + b)^2 现在,当我运行相同的示例,但添加另一个术语时,不会发生因子分解: >> simplify(a^2 + 2*a*b + b^2 + 1) a^2 + 2*a*b + b^2 + 1 如何让这些函数返回此表达式的更实用版本((a+b)^2+1)?我用这些函

如果我从以下符号表达式开始:

a^2 + 2*a*b + b^2
然后运行
simplify
(或
factor
),我会得到预期的结果:

>> simplify(a^2 + 2*a*b + b^2)

(a + b)^2
现在,当我运行相同的示例,但添加另一个术语时,不会发生因子分解:

>> simplify(a^2 + 2*a*b + b^2 + 1)

a^2 + 2*a*b + b^2 + 1
如何让这些函数返回此表达式的更实用版本(
(a+b)^2+1
)?我用这些函数尝试了所有明显的选项(如
'Steps'
'IgnoreAnalyticConstraints'
,等等),但都没有用


Context:我有一个表达式
ax^2-2*ax*bx+bx^2+ay^2-2*ay*by+by^2
,我需要将它转换回
(ax-bx)^2+(ay-by)^2
,这样它就可以被正确地视为
r^2
。我知道我可以使用一些直截了当的替换规则,但对于如此简单的事情,我觉得我缺少了一个明显的“非黑客”解决方案。

您可以分别对这两个术语运行
simplify

simplify(ax^2 - 2*ax*bx + bx^2) + simplify(ay^2 - 2*ay*by + by^2)
看来你已经知道该如何简化了


此外,您最终希望将其编写为
r^2
。这通常不可能适用于所有二阶表达式,因此不要费心寻找一般解。

您使用mathematica……我认为Matlab符号库有点有限。符号计算不是Matlab最强大的功能。请切换到
R
并使用
Ryacas
。我还没有从Matlab找到任何工具来调用yacas,谢谢大家的建议。我已经在Mathematica中完成了这个问题,但我希望将MATLAB用于更广泛的应用(我所做的工作范围比问题中的要大得多,需要MATLAB来完成其他部分)。如果这已经达到了MATLAB符号数学工具箱的极限,我将不得不研究一种不同的方法。如果你真的需要使用MATLAB来做符号数学,请研究。这是几年前TMW出于成本考虑转向MuPad之前MATLAB中的符号引擎。比穆帕德高得多。