mathematica多项式降幂排列问题
有人问这么一个问题,把 x^8-1 进行分解因式,得到结果 (-1 + x) (1 + x) (1 + x^2) (1 + x^4)那么有没有办法使结果降幂排列呢? 1# guocong89我最初的想法和他是一致的,就是降幂排列是Factor的一个选项,但看一下帮助就知道并不是这么回事。
我觉得这是由Times本身的Orderless属性决定的。
通过以下函数我们可以得到降序排列的因子序列
res = Factor;
res = Sort,
Exponent[#1, x] > Exponent[#2, x] &]
{1 + x^4, 1 + x^2, 1 + x, -1 + x}
但是把Times Apply 到上述结果后,结果又还原为(-1 + x) (1 + x) (1 + x^2) (1 + x^4)
为了解决这个问题,我只能想到一个曲线救国的方针,
Unprotect;
oldAtt = Attributes;
ClearAttributes;
Times@@res
Attributes = oldAtt;
Protect;
但是感觉这么做好山寨,请问有没有更好的方式呢? 我不认为有什么其他办法了。 个人认为还有好方法,用Unprotect肯定不是最好方法!
晚上我来试试•••••••• 4# esetlzn
期待 :) [*]Clear["Global`*"][*]res = Factor;[*]antires = Sort, Exponent [#1, x] > Exponent [#2, x] &];[*]wow] = HoldForm;[*]wow 我的答案还不够完美,有点定制的感觉!
对了大家教教我如何才能像2楼一样以代码的方式回复或发表主题? lz问的问题咋这么怪呢?
这个问题不实用哦! 7# esetlzn
在回复时用 把语句段包起来就行了,工具栏里那个 <> 符号就是快捷键 8# esetlzn
这个问题是QQ群里别人问的,不过多项式降幂排列问题确实是挺常见的,而且没有完美解决方案. 6# esetlzn
但是HoldForm并不好,因为这仅仅是强制mathematica不进行表达式化简,而且产生的结果不能够再参与运算了,比如
Expand] 在我看来这问题只是最终结果表达格式的改变而已,结果不会再被用到了! 11# guocong89
如果你实在要再用结果,把我的HoldForm改成Defer! 恩,要用结果也可以ReleaseHold一下,另外我也常遇到排版的问题,经常花大力气弄成想要的样式,然后复制到别的地方,或输出或截图。
"(-1+x) (1+x) (1+x^2) (1+x^4)" // StringSplit[#, " "] & //
Reverse // StringJoin
只是输出或显示用字符串也方便,另外也可以用HoldForm等写个小函数使得不用手动输入两个双引号。
也可以通过输入输出实现。
当然其他Print,Do,Table等等等来实现表面的降幂排列也有许多吧
本帖最后由 chungyuandye 于 2011-8-31 22:24 编辑
可把1+x^4也改成x^4+1嗎?
自問自答
ClearAttributes;
Apply > Exponent[#2, x] &] /.
Plus :> HoldForm]
高手啊都是。。。开眼界。。。。。。服了,谢谢啦
页:
[1]