首页 > 编程知识 正文

mathematica除法,多项式除法余数

时间:2023-05-05 04:42:43 阅读:264584 作者:1329

几乎没有调用内置函数,除了求多项式最高次数时用了一下 Exponent[]

(*解析多项式*)(*将f=a0+a1*x+...+an*x^n解析成{{a0,0},{a1,1},...,{an,n}}的形式*)polyCoefficients[f_] := Module[{ rules1 = { c_*base_^power_ -> {c, power}, base_^power_ -> {1, power}, c_*x_ -> {c, 1}, c_ /; NumberQ[c] -> {c, 0}, x_ /; AtomQ[x] -> {1, 1}}, g = If[Head[f] === Plus, f, List[Expand[f]]]}, Replace[List @@ g, rules1, 1]](*把解析出来的列表还原成多项式*)toPolynomial[list_List] := Sum[list[[i, 1]]*x^list[[i, 2]], {i, Length[list]}](*两个多项式 "相除"*)divide[f_, g_] := Module[{cf = polyCoefficients[f], cg = polyCoefficients[g], lf, lg, p}, lf = cf[[-1]]; lg = cg[[-1]]; p = {{lf[[1]]/lg[[1]], lf[[2]] - lg[[2]]}}; {toPolynomial[p], Simplify[f - g*toPolynomial[p]]}](*多项式的带余除法*)(*对polyQuotient[f,g],输出{d,r}满足f=g*d+r且degree(r)<degree(g)*)polyQuotient[f_, g_] := Module[{q = 0, r = f, d = 0}, While[Exponent[r, x] >= Exponent[g, x], {q, r} = Expand[divide[r, g]]; d = d + q; ]; {d, r}]

简单验证:

[In]:=f = x^7 + 6 x^5; g = x^3 + x;{u, r} = polyQuotient[f, g]u*g + r // Expand[Out]={-5 + 5 x^2 + x^4, 5 x}6 x^5 + x^7

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。