Расчет, в котором выход представляет собой квадратный полином плюс остаток

Мой сын учится вычислять формулу параболы с помощью директрисы и точки фокусировки на своем курсе Академии Хана. (a,b) — точка фокусировки, k — параметр направляющей при y=k. Я хотел показать ему простой способ проверки результатов с помощью Sympy; программирование очень помогает в укреплении внутренних алгоритмов. Шаг 1, очевидно, состоит в том, чтобы установить уравнение.

Parabola = Eq(sqrt((y-k)**2),sqrt((x-a)**2+(y-b)**2))

Сначала я решил это для y, намереваясь затем показать, как подставить значения и вывести уравнение, таким образом:

Y = solve(Parabola,y)

Это было в разумной форме, собрав 1/(2b-2k) наружу. Затем я подставил значение фокуса и директрисы в уравнение, получив уравнение y= 1/6*(x**2+16*x+49), что верно.

Затем ему нужно было решить это в форме (x + c1) (x + c2) + остаток. Похоже, что нет прямого способа преобразовать приведенное выше уравнение в эту форму, по крайней мере, не после часа поиска в документах.

Answer = Y[0].subs({a:-8,b:-1,k:-4})
factor(Answer,deep=True)

Конечно, я понимаю, как свести к квадратной факторизации плюс остаток; мой вопрос заключается исключительно в том, возможно ли это в sympy, и если да, то как?

Второй, возможно тривиальный вопрос: почему Sympy возвращает некоторые факторизации как (константа - x), где предпочтительнее (x -константа): есть ли способ указать форму?

Спасибо за любую помощь от имени моего сына, которому я показываю чудеса Симпи.


person Time Lord    schedule 29.05.2016    source источник
comment
Кстати, (x+c1)(x+c2)+remainder вообще не является уникальной формой: (x-1)(x+1) +1 совпадает с (x-2)(x+2) + 4 и т. д. Вам нужно (x+c)^2 + remainder.   -  person    schedule 30.05.2016


Ответы (1)


Процесс обычно называют «заполнением квадрата». Он не реализован как отдельный метод SymPy, но можно использовать решатель уравнений SymPy, чтобы найти коэффициенты такой формы многочлена:

>>> var('A B C')
>>> solve(Eq(Answer, A*(x-B)**2 + C), [A, B, C])
[(1/6, -8, -5/2)]

Таким образом, вершина параболы находится в точке (8, -5/2), и полином можно записать как 1/6*(x+8)**2 - 5/2

person Community    schedule 30.05.2016
comment
Спасибо - очень элегантный ответ. Не думал об использовании только коэффициентов. Ваш пример будет полезен в документации!!! - person Time Lord; 31.05.2016