Как получить переменную из сложного уравнения?





Я пишу программу, которая должна решать задачи на нахождение условного экстремума по методу множителей Лагранжа. На одном из этапов столкнулся с уравнением, в котором всего одна переменная, но я не знаю как её выразить, т.к. уравнение сложное. Подскажите, пожалуйста, как можно выразить переменную, которая содержится в разных дробях, находясь в них при этом и в числителях, и в знаменателях? Степеней нет.

В уравнении коэффициенты a, b и c - заранее известные числа, вводимые пользователем. Коэффициент может равняться нулю и чаще всего половина или больше половины коэффициентов (а их всего 13) равны нулю.

Обновление от 04.02.2017 в 21:03 (мск): сайт почему не даёт возможность оставить комментарий: нажимаю добавить комментарий, ввожу текст, проверочные цифры, нажимаю Enter - но комментарий не добавляется, поэтому добавлю сюда:

Аналогичный тексту ниже в удобном виде с возможностью редактирования здесь: https://docs.google.com/document/d/1iE5jklPPBhGLe3_c98c1LDatQLywaqKmG7smJo9NfL8/edit?usp=sharing

a_1-a_6  ,b_1-b_6  и c_2-это заранее известные (вводимые пользователем) числа.Нужно выразить x. L(x)=a_1 x^2+a_2 y^2+a_3 z^2+a_4 x+a_5 y+a_6 z+c_1+λ(b_1 x^2+b_2 y^2+b_3 z^2+b_4 x+b_5 y+b_6 z+c_2 ) Получим производные по х, y и z. L_x^\'=2a_1 x+a_4+2λb_1 x+λb_4 L_y^\'=2a_2 y+a_5+2λb_2 y+λb_5 L_z^\'=2a_3 z+a_6+2λb_3 z+λb_6 Построим систему уравнений, приравнях производные и то, что стоит в скобочках после лямбды, к нулю. {█(2a_1 x+a_4+2λb_1 x+λb_4=0@2a_2 y+a_5+2λb_2 y+λb_5=0@2a_3 z+a_6+2λb_3 z+λb_6=0@b_1 x^2+b_2 y^2+b_3 z^2+b_4 x+b_5 y+b_6 z+c_2=0)┤ Наша задача из системы получить значения x,y,z – это будут координаты точки, которая в дальнейшем будет определена как условный максимум или минимум. Для этого выразим x,y,z из первых трёх уравнений и подставим в 4-е уравнение. В итоге 4-е уравнение примет следующий вид: a_1 (-(a_4+b_4 λ)/(2(a_1+b_1 λ)))^2+a_2 (-(a_5+b_5 λ)/(2(a_2+b_2 λ)))^2+a_3 (-(a_6+b_6 λ)/(2(a_3+b_3 λ)))^2+a_4 (-(a_4+b_4 λ)/(2(a_1+b_1 λ)))+a_5 (-(a_5+b_5 λ)/(2(a_2+b_2 λ)))+a_6 (-(a_6+b_6 λ)/(2(a_3+b_3 λ)))+c_2=0 Когда нам известны значения коэффициентов a_1-a_6  ,b_1-b_6  и c_2, то 4-е уравнение принимает простой вид, из которого легко получить значение для лямбды. Подставляя данное значение в первые три уравнения, мы получим искомые x,y,z. Дальше через матрицу мы сможем определить тип точки (или точек). Однако при написании программы мы не знаем какими будут коэффициенты, в т.ч. мы не знаем какие из них будут нулевыми (а нулевых будет большинство), поэтому 4-е уравнение получается таким громоздким. Но я не могу понять как из него выразить лямбду. Пока только приходит на ум сделать перебор: присваивать лямбде значения от -100 до 100 и с шагом 1 подставлять значение и сравнивать выполняется равенство или нет. Т.е. беру -100 подставляю, потом -99 и так до 100. Но этот алгоритм длителен по выполнению и ограничен, т.к. вдруг лямбда будет за диапазоном [-100;100] или не будет целым числом. Можно, конечно, сделать и перебор в диапазоне [-100,99;100,99] – но это всё ограничивает возможности программы и скорость работы, т.к. в худшем случае при данном диапазоне придётся совершить 20000 переборов.

не проверено
  • Автор сообщения: Lenx

Всего: 1 комментарий.
Добавить комментарий

Александр Емелин    04.02.2017 в 14:13
Возможно, задачу будет рациональнее алгоритмизировать на более простых этапах решения (если это возможно).