creasson 发表于 2012-7-29 19:45:45

谢谢各位了!

wayne 发表于 2012-7-29 23:27:54

19# creasson
但是在不知道具体是哪两个根相加的情况下这样做是不行的
不管哪两个相加,结果都是一样的.
都是同一多项式的根,
可以证明一下.

hujunhua 发表于 2012-7-30 10:35:24

就本例而言,不管哪两个相加,结果都是一样的,都是同一多项式的根。因为复合前的两个多项式都是不可约的。
特情证明也“简单”,检查确认得到的复合多项式不可约就行了。In=fx=-53-116x+191x^2+1393x^3-7677x^4+10429x^5-20034x^6+34395x^7-36887x^8-32235x^9-11257x^10+77061x^11+51163x^12-19040x^13-46835x^14-27874x^15-13792x^16-12785x^17-29225x^18-29750x^19-12152x^20-1820x^21-85x^22-2300x^23-2030x^24-448x^25+42x^26+21x^27-5x^28-5x^29-7x^30-7x^31+x^35;
In=IrreduciblePolynomialQ
Out=True

hujunhua 发表于 2012-7-30 10:44:29

已知:x是多项式f(x)的根,y是多项式g(x)的根,求:z=h(x,y)的最小多项式。

对于这个问题,18楼的方法既具有理论意义,也是实际计算的一般性方法,并且几乎是唯一可行的一般性方法。Mathematica的MinimalPolynomial[]的内核应该就是这种方法。

hujunhua 发表于 2012-7-30 10:47:38

h(x,y)是二元多项式

wayne 发表于 2012-7-30 20:59:57

24# hujunhua
我花了点时间google了下, 找Mathematica关于 代数数 root reduce 的算法,其实也即是MinimalPolynomial 的 算法.
无果.
现在想想,的确是不用找了! 算法就在这!!!

mathe 发表于 2012-7-30 22:34:30

已知:x是多项式f(x)的根,y是多项式g(x)的根,求:z=h(x,y)的最小多项式。

对于这个问题,18楼的方法既具有理论意义,也是实际计算的一般性方法,并且几乎是唯一可行的一般性方法。Mathematica的MinimalPolynomi ...
hujunhua 发表于 2012-7-30 10:44 http://bbs.emath.ac.cn/images/common/back.gif
14楼方法也可很一般,设f(x)=0,g(y)=0,h(x,y,z)=0都是多项式。取a不是f的根,那么h*(x-a)^k mod f(x)得出若干式子后用14楼方法消去x,然后类似再消去y即可

hujunhua 发表于 2012-7-31 18:00:04

《代数数和代数函数》

建议楼主看看《代数数和代数函数》这本书。你的问题是代数数论中的基本问题:代数数构成域的证明。
所谓构成域,就是对四则运算(加、减、乘、除)封闭,我写的z=h(x,y)不过是四则运算的复合。解决了基本运算,复合叠加自然不成问题。
mathe更进一步,写成了h(x,y,z)=0, 这就不仅是四则运算的叠加了,但是z仍然是代数数。即以代数数为系数的代数方程(区别于超越方程)的根仍是代数数。在代数数论中,这个结论谓之“代数数域是一个代数闭包”。

xiaoshuchong 发表于 2022-3-28 11:47:29

hujunhua 发表于 2012-7-30 10:44
已知:x是多项式f(x)的根,y是多项式g(x)的根,求:z=h(x,y)的最小多项式。

对于这个问题,18楼的方法既 ...
对于本题而言,还有一种数值方法是可行的,而且操作上更简单。

我们知道复合后的多项式是35次的,其35个根可以由原来的5次和7次方程组合得到,

然后将所有35个$z-z_i$乘起来就可以得到多项式,最后将系数取整即可。

这个方法同样是一般性的,但由于数值精度的问题,可能并不能保证所有情况下都能得到

准确的结果。


gp代码
getPoly() = {
    X = polroots(x^5-x-1);
    Y = polroots(y^7-y-1);
    res = 1;
    for(i = 1,5,
      for(j = 1,7,
            res *= (z-X<i>-Y);
      );
      
    );
    Z = 0;
    for(i = 0,35,
      an = polcoef(res,i,v=z);
      print();
      Z += round(an)*z^i;
    );
    print(Z);
   
};</i>

页: 1 2 [3]
查看完整版本: 怎么求复合后的方程?