数学研发论坛

 找回密码
 欢迎注册
楼主: God→Osiris

[讨论] 这个五次方程怎么解?

[复制链接]
发表于 2011-3-11 09:52:50 | 显示全部楼层
22楼的wayne,我的Mathematica怎么没有你的图片上的TrigToRadicals函数?难道是版本问题?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-3-11 13:22:33 | 显示全部楼层
31# mathematica
看看你以前发的帖子吧:
/thread-2944-1-1.html
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-3-11 16:46:33 | 显示全部楼层
关于Map[Apply[g,s[[#]]]&,{{1,2,3,4,5},……,{1,5,3,4,2}}]:
如果s={a,b,c,d,e},那么s[[{1,5,3,4,2}]]就是{a,e,c,d,b}了。
Apply[g,{a,e,c,d,b}]就相当于g[a,e,c,d,b]了。
Map一下,就到所有的了。
关于TrigToRadicals:
它要加载库的,用Needs["Developer\`"]或者<<"Developer\`"。
关于出题:
或许大家可以试一试求解方程x^5-10x^2-10x-6=0,
在字体大小合适的情况下,它的解或许可以写在一页A4纸上。呵呵。

呵呵,那让我们继续吧。
如果我们愿意牺牲一些效率和严谨性,就可以用下面更加直白的方法来获得Galois群的信息。
在上一个帖子中提到了具有一些对称性的多项式g,或许它掩盖了一些“直白”,呵呵。
下面的方法将利用一个完全没有对称性的多项式h,这样我们要代入的置换就不是6个了,而是全部的5!=120个。我们取h=x1+2x2+3x3+4x4+5x5,可以看到120种置换后代入h得到的结果h1到h120是都不同的。我们构造一个120次多项式s使它的根是h1到h120,可以预见到s是首1整系数的,因此可以通过数值计算得到多项式s的精确表达。最后分解s就可以获得一些信息。还是用楼主的例子来演示吧。
f[x_]:=15377302441624829616294559439+73506723756638416711643x-146286378711462770x^2-742702101537x^3+209341x^4+x^5;
s0 = Permutations[Range[5]];
s1 = Table[N[Root[Evaluate[f[#]]&,i],10000],{i,5}];
s2 = Map[s1.#&,s0];
s = Round[Chop[CoefficientList[Expand[Apply[Times,x-s2]],x]]].x^(Range[121]-1);
Factor[s]
其中s0是那120种置换,s1是方程的5个根,s2是计算h1到h120,s是那个120次多项式。
可以看到s分解后是20个5次多项式的乘积,就说明f的Galois群的阶是5,所以就是循环群C5了。
通过解这20个5次方程(也可以把h1到h120分别代入方程检测),就可以把h1到h120分为20组了,也就是把120个置换分为了20组,其中包括“不变”那一组置换就是f的置换群了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-3-11 18:23:09 | 显示全部楼层
把zgg__的在16#的东西啃了一天终于明白了,不过我还是要把我啃明白的发到上面来,因为
我写的对于初学者是有帮助的,我还是喜欢有注释的程序,我总觉得我改不了这个“坏习惯”
我把我的理解做如下:
  1. Clear["Global`*"];(*Clear all variables*)
  2. (*由所有的置换找到其对于的多项式所组成的集合*)
  3. (*定义一个四次多项式*)
  4. g[x1_,x2_,x3_,x4_,x5_]:=x1^2(x2*x5+x3*x4)+x2^2(x1*x3+x4*x5)+
  5.                         x3^2(x1*x5+x2*x4)+x4^2(x1*x2+x3*x5)+
  6.                         x5^2(x1*x4+x2*x3);
  7. s={x1,x2,x3,x4,x5};
  8. p1=Permutations[{1,2,3,4,5}]; (*产生所有的排列或者置换*)
  9. p10=GatherBy[p1,Signature[#]&];(*根据置换的性质分组*)
  10. p11=p10[[1]];(*取出所有的偶置换*)
  11. p2=Map[Apply[g,s[[#]]]&,p11]; (*把偶排列都带入到g产生各种多项式*)
  12. p3=Union[p2];(*对相同多项式合并只取其中一个*)
  13. (*求解方程的100位数值根*)
  14. (*定义多项式*)
  15. eq1=15377302441624829616294559439 + 147013447513276833423286 x -
  16.     585145514845851080 x^2 - 5941616812296 x^3 + 3349456 x^4 + 32 x^5;
  17. eq2=eq1/.x->x/2; (*通过变换把最高次项的系数变成1*)
  18. eq3=NSolve[eq2==0,x,100]; (*求解200位数值解*)
  19. eq4=x/.eq3;  (*只保留数值部分*)
  20. (*把p3的每个元素作用到eq4上计算结果*)
  21. Do[
  22.     gnew[x1_,x2_,x3_,x4_,x5_]=p3[[k]]; (*每次都重新定义一下函数,这是必要的*)
  23.     result=Apply[gnew,eq4];  (*把新定义的函数作用到eq4这组数值解上去*)
  24.     Print[result],   (*把作用的结果输出来*)
  25.     {k,1,Length@p3}
  26. ]
复制代码
但是我觉得应该是偶置换,不是全部置换,我只是感觉应该这么写,不知道zgg__怎么看待我的观点.
如图1

zgg__在16楼注释如下:我把他的东西拆开了,这样更容易被人理解,当然我是
写给初学者看的,当然也是写给我自己看的
  1. (*zgg_的方法*)
  2. Clear["Global`*"];(*Clear all variables*)
  3. g[x1_,x2_,x3_,x4_,x5_]:=x1^2(x2 x5+x3 x4)+x2^2(x1 x3+x4 x5)+
  4.                         x3^2(x1 x5+x2 x4)+x4^2(x1 x2+x3 x5)+
  5.                         x5^2(x1 x4+x2 x3);
  6. p1=Permutations[{x1,x2,x3,x4,x5}]; (*产生所有置换*)
  7. p2=Map[Expand[Apply[g,#]]&,p1];   (*把所有置换对应的多项式都弄出来*)
  8. p3=Sort[p2];  (*对多项式元素排序,使得相同的处于相邻的关系*)
  9. p4=Split[p3];  (*把相同的多项式分在一组里*)
  10. p5=Map[{First@#,Length@#}&,p4] (*把上面的相同的只取一个,并计算相同个数*)
复制代码
如图2

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?欢迎注册

x
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-3-11 18:27:20 | 显示全部楼层
关于Map[Apply[g,s[[#]]]&,{{1,2,3,4,5},……,{1,5,3,4,2}}]:
如果s={a,b,c,d,e},那么s[[{1,5,3,4,2}]]就是{a,e,c,d,b}了。
Apply[g,{a,e,c,d,b}]就相当于g[a,e,c,d,b]了。
Map一下,就到所有的了。
关于TrigT ...
zgg___ 发表于 2011-3-11 16:46


zgg_的手笔使我觉得他至少应该是数学系的硕士毕业的,而且对mathematica很熟悉,
我觉得现在的中国大学的那些教授很难同时能掌握那些群论又对mathematica玩得那么好!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-3-11 18:46:47 | 显示全部楼层
关于Map[Apply[g,s[[#]]]&,{{1,2,3,4,5},……,{1,5,3,4,2}}]:
如果s={a,b,c,d,e},那么s[[{1,5,3,4,2}]]就是{a,e,c,d,b}了。
Apply[g,{a,e,c,d,b}]就相当于g[a,e,c,d,b]了。
Map一下,就到所有的了。
s = Round[Chop[CoefficientList[Expand[Apply[Times,x-s2]],x]]].x^(Range[121]-1);
zgg___ 发表于 2011-3-11 16:46

不知道为什么,你和wayne一样,写程序总是那么多层的嵌套,不怎么好理解
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-3-11 19:01:25 | 显示全部楼层
其中s0是那120种置换,s1是方程的5个根,s2是计算h1到h120,s是那个120次多项式。
可以看到s分解后是20个5次多项式的乘积,就说明f的Galois群的阶是5,所以就是循环群C5了。
通过解这20个5次方程(也可以把h1到h120分别代入方程检测),就可以把h1到h120分为20组了,也就是把120个置换分为了20组,其中包括“不变”那一组置换就是f的置换群了。

再详细一点吧,其实我对群论只是懂那么一点点,抽象的东西需要具体的来描述!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-3-14 14:20:20 | 显示全部楼层
在33层帖子的最后,我犯了一个错误,就是认为120/5=20了,所以在那个帖子最后两段话中的“20”,都应该改为“24”,呵呵。
由此可以证明,我的水平有时候不到小学2年级,呵呵。
下面再说明一下33层的帖子(基本上是33层的复述,呵呵)。
在16层的帖子中,讨论是围绕着多项式g展开的,大家或许会认为g是这个方法的核心,其实或许在某种意义上,g是理解这个问题的“障碍”。所以有了33层的帖子,在这个帖子中我们用“完全没有对称性的多项式h”替代了“具有一些对称性的多项式g”,得到了更加完整的结果(在牺牲效率的基础上)。这样做的目的之一就是更好的理解这种方法。没有对称性的多项式有很多,我们选取的是h=x1+2x2+3x3+4x4+5x5,它把x1到x5置换后代入,它的模样就变了,当然,我们也可以选取h=213123x1+522346523x2-2352x^3-97x^4+108x^5。(对h的要求其实是将f的5个根在120种置换后代入得到的120个数h1到h120都各不相同。)然后我们观察多项式s=(x-h1)*(x-h2)*……*(x-h119)*(x-h120),可以知道这个120次多项式是首1整系数的,因此,到这里,经过取整,我们的s不因为是数值计算而有误差。
接下来是实现上面的过程,输入是五次多项式f,输出是s的分解因式。
f[x_]:=15377302441624829616294559439+73506723756638416711643x-146286378711462770x^2-742702101537x^3+209341x^4+x^5;
上面一句是输入。
s0 = Permutations[Range[5]];
这个是那120种置换。
s1 = Table[N[Root[Evaluate[f[#]]&,i],10000],{i,5}];
这个是求5个根。
s2 = Map[s1.#&,s0];
这个是计算h1到h120,把它们放到s2中,注意{x1,x2,x3}.{1,2,3}=x1+2x2+3x3,所以我就偷懒了。
s = Round[Chop[CoefficientList[Expand[Apply[Times,x-s2]],x]]].x^(Range[121]-1);
这个是计算s,Apply[Times,x-s2]就是(x-h1)*(x-h2)*……*(x-h119)*(x-h120),然后展开,然后求系数,然后四舍五入,然后再形成多项式。
Factor[s]
最后是把s分解。
我想过程中如果那步不明确,是可以把分号去掉,改改参数,看看结果的。
代码短在可读性方面或许有一个优点,那就是“短”。我从不反对有层次和结构化,但要求它增加的开销是划算的。对于我这种兴奋时间长度很有限的人来说,长文档不容易找到重点,也许在判断文档有价值之前就已经退缩了,而且看了后面的就会忘记前面的内容。
因为s分解后的结果比较长,所以就不帖出来了,它是24个5次多项式的乘积,例如第1个因子是:19662576921652444608722007457321+40047843741929747640101680x-32476248486821421909x^2-13814515603361x^3+3140115x^4+x^5。
可以知道h1到h120分别属于这24个多项式(就是是它的根啦),这样,我们就把h1到h120这120个数分成了24组。还记得h1到h120这120个数是怎么来的么?是经过置换代入h得到的,所以h1到h120这120个数和那120种置换是一一对应的。这样就把那120个置换分为了24组(就是陪集coset了),其中具有{1,2,3,4,5}的那组就是那么想要的子群了,那组的5个置换就是群的所有元素,置换的乘,就是群的乘。因为只有循环群C5有5个元素,所以它就是C5了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-3-14 16:21:24 | 显示全部楼层
恩,让我们继续并且结束这个话题吧。
对于16层的g和33层的h,我们这里取一个新的多项式l=x1+w*x2+w^2*x3+w^3*x4+w^4*x5,也就是让x1到x5的系数恰好为方程x^5-1=0的5个根。然后进行33层的计算,只要将代码中的“s2=Map[s1.#&,s0];”改为“s2=Map[s1[[#]].rs&,s0];”,并且预先计算rs=Table[Root[#^5-1&,i],{i,5}];就可以了。分解s后会发现其中会有一个只有x^20、x^15、x^10、x^5和常数项的因子。因为我们可以符号求解4次方程,因此就可以得到这20个根的符号解了,然后一一对应到l中去,就可以得到原先5次方程根的符号表达了。
那个多项式l,就叫做“Lagrange预解式”,那个多项式h,就叫做“Galois预解式”。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-3-14 16:29:57 | 显示全部楼层
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2019-12-9 22:54 , Processed in 0.075246 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表