Как факторизовать этот многочлен 3-го порядка с помощью клена

Есть какое-то поведение клена, которое я не понимаю. Скажем, я хочу разложить полином 1-z-z^3 на множители, поэтому я вычисляю его корни, используя

z0 := solve(1-z-z^3=0,z);

что дает (только для полноты...)

z0 := 1/6*(108+12*93^(1/2))^(1/3)-2/(108+12*93^(1/2))^(1/3), -1/12*(108+12*93^(1/2))^(1/3)+1/(108+12*93^(1/2))^(1/3)+1/2*I*3^(1/2)*(1/6*(108+12*93^(1/2))^(1/3)+2/(108+12*93^(1/2))^(1/3)), -1/12*(108+12*93^(1/2))^(1/3)+1/(108+12*93^(1/2))^(1/3)-1/2*I*3^(1/2)*(1/6*(108+12*93^(1/2))^(1/3)+2/(108+12*93^(1/2))^(1/3))

Теперь, если я попытаюсь выделить первый корень,

factor(1-z-z^3,z0[1]);

я получил

Error, (in factor) 2nd argument, 1/6*(108+12*93^(1/2))^(1/3)-2/(108+12*93^(1/2))^(1/3), 
is not a valid algebraic extension

Что это значит? Это ошибка или выражение для z0[1] слишком сложное? Если верно второе, то как лучше разложить на множители многочлены порядка, скажем, от 3 до 4?


person flonk    schedule 18.09.2015    source источник
comment
После того, как я написал ответ ниже, друг упомянул, что вы, возможно, просто хотите увидеть результат деления. Так ли это? Если да, попробуйте: evala((1-z-z^3)/z0[1]).   -  person Erik P.    schedule 18.09.2015
comment
Интересно, имеет ли он в виду факторизируя первый корень, что он хочет выкачать коэффициент z-z0[1], учитывая, что 1-z-z^3=(z-z0[1])*(z-z0[2])*(z-z0[3]) при полном расширении и упрощении (скажем, с помощью radnormal или evala/Normal). Таким образом, вместо того, чтобы делить на z0[1], он может захотеть разделить на z-z0[1]. Или используйте evala(Divide(1-z-z^3,z-z0[1],'q')), где q таким образом присваивается побочным эффектом частное, которое должно равняться (z-z0[2])*(z-z0[3]) при нормализации.   -  person acer    schedule 19.09.2015


Ответы (1)


Проблема в том, что Maple хочет, в частности, RootOf или выражение с рациональной степенью, или их набор, в качестве второго аргумента. Так, например,

factor(x^2-2, 1+sqrt(2))

не будет работать, тогда как

factor(x^2-2, sqrt(2))

делает. Точно так же в вашем примере вы захотите извлечь рациональные степени из выражения, для которого вы решили. Вы можете сделать это следующим образом:

factor(1-z-z^3, indets(z0[1], anything^And(rational, Non(integer))))

или, может быть, немного менее надуманным:

with_rootof := convert(z0[1], RootOf);
factor(1-z-z^3, indets(with_rootof, specfunc(RootOf)));
person Erik P.    schedule 18.09.2015
comment
Ответ, полученный вашим кодом, интересен, но кажется более запутанным (с вложенными RootOf), чем должен быть. У вас есть какие-либо проблемы с более простым (и более простым для получения) ответом, предоставленным factor(1-zz^3, RootOf(1-zz^3)), предполагая, что мы уже знаем, что многочлен неприводимо над Q? Комментарий, не относящийся к теме: Синтаксис specfunc(RootOf) является недавним (и долгожданным) нововведением. Старому Maple потребуется specfunc(что-нибудь, RootOf). - person Carl Love; 18.09.2015
comment
Никаких проблем с этим, @CarlLove. Я каким-то образом понял, что пользователь хотел, чтобы ответ выражался в терминах корней, которые он получил от solve, но это вообще не упоминается в вопросе. - person Erik P.; 18.09.2015