- 注册时间
- 2008-11-26
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 149497
- 在线时间
- 小时
|
发表于 2011-3-11 18:23:09
|
显示全部楼层
把zgg__的在16#的东西啃了一天终于明白了,不过我还是要把我啃明白的发到上面来,因为
我写的对于初学者是有帮助的,我还是喜欢有注释的程序,我总觉得我改不了这个“坏习惯”
我把我的理解做如下:- Clear["Global`*"];(*Clear all variables*)
- (*由所有的置换找到其对于的多项式所组成的集合*)
- (*定义一个四次多项式*)
- g[x1_,x2_,x3_,x4_,x5_]:=x1^2(x2*x5+x3*x4)+x2^2(x1*x3+x4*x5)+
- x3^2(x1*x5+x2*x4)+x4^2(x1*x2+x3*x5)+
- x5^2(x1*x4+x2*x3);
- s={x1,x2,x3,x4,x5};
- p1=Permutations[{1,2,3,4,5}]; (*产生所有的排列或者置换*)
- p10=GatherBy[p1,Signature[#]&];(*根据置换的性质分组*)
- p11=p10[[1]];(*取出所有的偶置换*)
- p2=Map[Apply[g,s[[#]]]&,p11]; (*把偶排列都带入到g产生各种多项式*)
- p3=Union[p2];(*对相同多项式合并只取其中一个*)
- (*求解方程的100位数值根*)
- (*定义多项式*)
- eq1=15377302441624829616294559439 + 147013447513276833423286 x -
- 585145514845851080 x^2 - 5941616812296 x^3 + 3349456 x^4 + 32 x^5;
- eq2=eq1/.x->x/2; (*通过变换把最高次项的系数变成1*)
- eq3=NSolve[eq2==0,x,100]; (*求解200位数值解*)
- eq4=x/.eq3; (*只保留数值部分*)
- (*把p3的每个元素作用到eq4上计算结果*)
- Do[
- gnew[x1_,x2_,x3_,x4_,x5_]=p3[[k]]; (*每次都重新定义一下函数,这是必要的*)
- result=Apply[gnew,eq4]; (*把新定义的函数作用到eq4这组数值解上去*)
- Print[result], (*把作用的结果输出来*)
- {k,1,Length@p3}
- ]
复制代码 但是我觉得应该是偶置换,不是全部置换,我只是感觉应该这么写,不知道zgg__怎么看待我的观点.
如图1
zgg__在16楼注释如下:我把他的东西拆开了,这样更容易被人理解,当然我是
写给初学者看的,当然也是写给我自己看的- (*zgg_的方法*)
- Clear["Global`*"];(*Clear all variables*)
- g[x1_,x2_,x3_,x4_,x5_]:=x1^2(x2 x5+x3 x4)+x2^2(x1 x3+x4 x5)+
- x3^2(x1 x5+x2 x4)+x4^2(x1 x2+x3 x5)+
- x5^2(x1 x4+x2 x3);
- p1=Permutations[{x1,x2,x3,x4,x5}]; (*产生所有置换*)
- p2=Map[Expand[Apply[g,#]]&,p1]; (*把所有置换对应的多项式都弄出来*)
- p3=Sort[p2]; (*对多项式元素排序,使得相同的处于相邻的关系*)
- p4=Split[p3]; (*把相同的多项式分在一组里*)
- p5=Map[{First@#,Length@#}&,p4] (*把上面的相同的只取一个,并计算相同个数*)
复制代码 如图2 |
-
-
|