Я все еще не совсем уверен, что вы пытаетесь сделать. Если вы хотите решить алгебраическое уравнение во время написания кода, Wolfram Alpha весьма полезна, например, http://www.wolframalpha.com/input/?i=Solve%5Bq0+%2B+v0+t+%2B+a0%2F2+t%5E2+%3D%3D+q1+%2B+v1+t+%2B+a1%2F2+t%5E2%2C%7Ba1%2Ct%7D%5D.
Если вы хотите решить алгебраическое уравнение во время выполнения, это вообще очень сложная проблема. Если вы дадите мне больше информации о том, что именно вы пытаетесь сделать, я мог бы порекомендовать несколько хороших бесплатных пакетов.
РЕДАКТИРОВАТЬ: Пример проблемы, которую вы, возможно, пытаетесь решить:
В: Учитывая космический корабль с начальной позицией q0, начальной скоростью v0 и постоянным ускорением a0 и ракетой с начальной позицией q1, я хочу найти скорость ракеты v1 с магнитудой M, которая в конечном итоге приведет к столкновению ракеты с космический корабль.
A: Вы пытаетесь решить систему уравнений
q0 + v0 t + 1/2 a0 t^2 = q1 + v1 t
v1 . v1 = M^2
для вектора v1, где время удара t также неизвестно. Насколько я могу судить, эту систему очень трудно решить в закрытом виде: Wolfram Alpha задыхается, и даже Mathematica испытывает трудности. Это, однако, относительно просто атаковать его численными методами. Для этого сначала решим для t, вставив первое уравнение во второе:
(q0 - q1 + v0 t + 1/2 a0 t^2) . (q0 - q1 + v0 t + 1/2 a0 t^2) == M^2 t^2
Это квартичный многочлен от t с известными коэффициентами:
[(q0 - q1).(q0-q1)] + [2 (q0 - q1).v0] t + [v0.v0 + (q0-q1).a0 - M^2] t^2 + [v0.a0] t^3 + [1/4 a0.a0] t^4 = 0
Все в скобках - это скаляр, который вы можете вычислить по известным величинам. Чтобы найти корни этой части, используйте средство поиска корня черного ящика (я настоятельно рекомендую Jenkins-Traub: код C ++, доступный по адресу www.crbond.com/download/misc/rpoly.cpp, версии Java и Fortran также распространяются по всему «нетто).
Как только у вас появятся корни, выберите наименьший положительный (этот будет соответствовать направлению, при котором ракета попадает на космический корабль как можно раньше), и включите его в первое уравнение, и тривиально решите для v1.
EDIT2:
Q: Учитывая космический корабль с начальной позицией q0, начальной скоростью v0 и постоянным ускорением a0, и ракетой с начальной позицией q1 и начальной скоростью v1, я хочу найти ускорение ракеты a1 с величиной M, которое вызовет ракету в конечном итоге столкнуться с космическим кораблем.
A: Эта проблема очень похожа на первую; ваши уравнения сейчас
q0 + v0 t + 1/2 a0 t^2 = q1 + v1 t + 1/2 a1 t^2
a1 . a1 = M^2
Где a1 и t неизвестны. Опять же, эти уравнения могут быть объединены, чтобы получить квартику в t с известными коэффициентами:
[(q0 - q1).(q0-q1)] + [2 (q0 - q1).(v0-v1)] t + [(v0-v1).(v0-v1) + (q0-q1).a0] t^2 + [(v0-v1).a0] t^3 + [1/4 a0.a0 - 1/4 M^2] t^4 = 0
Опять же, используйте Jenkins-Traub, чтобы найти корни, затем вставьте наименьший положительный корень в первое уравнение и решите для a1.