matlab中expand 和 collect函数有什么区别

如题,matlab中expand 和 collect函数有什么区别?
我有查到说collect只能做符号表达式运算,expand 可以用于多项式展开,可是我不太明白这两种运算的具体区别

collect就是把指定符号按照多项式的次数从高到低排,打个比方

syms x
f = x*exp(x)+x^2*exp(-x)*(1+x+exp(x));
collect(f)

可以看到结果是exp(-x)*x^3 + exp(-x)*(exp(x) + 1)*x^2 + exp(x)*x即从x的3次方然后一直到x的1次方(从高到低)
而expand只是把因子展开然后形成多个项(这些项就是按照人的想法化开的),比如

syms a b c d
expand((a+b)*(c+d))

结果就是多个简单式子相加a*c + a*d + b*c + b*d