Страница 1 из 1

Сложная/простая система из 3х уравнений.

Добавлено: Вс июн 08, 2014 9:29 am
AlexxZ2
Здравствуйте.
При решении вот этой системы относительно x,y0 и k математические пакеты уходят в глубокую задумчивость и не возвращаются даже на быстрых компьютерах. Я понимаю, что решать ее придется численно. Можно ли как либо решить аналитически? В жизни эта система (а точнее это даже упрощенная система с допущениями) будет описывать процесс происходящий в реальном времени. На числовые приближения времени может не хватить. Спасибо.
Изображение

Re: Сложная/простая система из 3х уравнений.

Добавлено: Вс июн 08, 2014 8:27 pm
алексей_алексей
AlexxZ2 писал(а):...При решении вот этой системы относительно x,y0 и k математические пакеты уходят в глубокую задумчивость и не возвращаются даже на быстрых компьютерах...Можно ли как либо решить аналитически?

Можно, только на форуме dxdy, правда, результат будет тот же...

Плохо видно условие

Добавлено: Вс июн 08, 2014 8:44 pm
Markiyan Hirnyk
AlexxZ2 писал(а):Здравствуйте.
При решении вот этой системы относительно x,y0 и k математические пакеты уходят в глубокую задумчивость и не возвращаются даже на быстрых компьютерах. Я понимаю, что решать ее придется численно. Можно ли как либо решить аналитически?
Изображение
Условие плохо видно. Пожалуйста, наберите систему в виде копируемого текста (пример:{x+y)/(z-x0)=5,...}) и представьте ее на форум.

Комплексные корни

Добавлено: Пн июн 09, 2014 7:01 am
Markiyan Hirnyk
Команда solve математической системы Maple выражает решения системы
restart; sys := [(2*x+2*k*(k*x+y0))/(2*sqrt(x^2+(k*x+y0)^2)) = a, (2*(-1+x)+2*k*(k*x+y0))/(2*sqrt((-1+x)^2+(k*x+y0)^2)) = b, (2*(-1+x)+2*k*(k*x+y0-1))/(2*sqrt((-1+x)^2+(k*x+y0)^2)) = c];
solve(sys, {k, x, y0});
через корни многочленов высоких степений (>=6)с полиномиальными коэффициентами от a, b, c. Решение для конкретных значений параметров a = .2, b = .3, c = 1.1
solve(eval(sys, [a = .2, b = .3, c = 1.1]), {k, x, y0});
{k = -0.1583151702e-1+.9830280421*I, x = 12.20496979-9.246284038*I, y0 = .3158709532-.9001841541*I}, {k = -0.1583151702e-1-.9830280421*I, x = 12.20496979+9.246284038*I, y0 = .3158709532+.9001841541*I}.
Оба решения получаются достаточно быстро, за время порядка десятых долей секунды на моем компе.

Добавлено: Пн июн 09, 2014 10:50 am
Markiyan Hirnyk
На самом деле система такова:
restart; sys := [(2*x+2*k*(k*x+y0))/(2*sqrt(x^2+(k*x+y0)^2)) = a, (2*(-1+x)+2*k*(k*x+y0))/(2*sqrt((-1+x)^2+(k*x+y0)^2)) = b, (2*(-1+x)+2*k*(k*x+y0-1))/(2*sqrt((-1+x)^2+(k*x+y0-1)^2)) = c];
Разница в знаменателе третьего уравнения. Ее символьное решение (если его удастся найти) неминуемо очень громоздко и поэтому бесполезно. Надо обвеличинивать параметры. Этот вопрос неоднократно обсуждался на MaplePrimes и таково единодушное мнение специалистов.
Maple без проблем решает систему для конкретных значений параметров. Пример:
st := time(); solve(eval(sys, [a = 1, b = .3, c = 1.1]), {k, x, y0}); time()-st;

{k = -2.731630794, x = -1.367137203, y0 = -4.890387107}
0.281

Замечу, что "как-либо" пишется через дефис.

Добавлено: Вт июн 10, 2014 8:15 pm
AlexxZ2
Ее символьное решение (если его удастся найти) неминуемо очень громоздко и поэтому бесполезно.
В любом ведь случае, даже для подставленных a,b и c Mapple выработал алгоритм действия и выполнил его. Любое выражение в общем случае это тоже алгоритм заданный в виде дерева вычислений. Он может быть очень сложным (в том числе и из-за требования древовидной структуры). В то же самое время алгоритм передающий вычисленные промежуточные величины в виде направленного графа (да и еще с циклами) может быть не очень сложным. У меня вопрос: может ли Mapple сгенерировать алгоритм (и выдать его в каком-либо виде), по поторому он решил систему с подставленными величинами a,b и с? В этом же виде, думаю, можно и представить решение через а,b и с. То есть не в виде выражения, а в виде алгоритма (с передачей промежуточных вычислений в виде значений в переменных), который выполнил сам Mapple. В конце концов интересует именно алгоритм на каком-нибудь языке программирования (для реализации в устройстве), а не выражение. Можно, конечно, и бесплатный Mapple player использовать. Но, мне кажется, это будет слишком громоздко.

Интересный вопрос о безответной любви

Добавлено: Вт июн 10, 2014 9:23 pm
Markiyan Hirnyk
Вы задали интересный вопрос, на который трудно ответить. Дело в том, что применяемые командой solve алгоритмы (и их реализация) являются собственностью Maplesoft, которой компания не делится с широкой общественностью. Результат выполнения команд
printlevel := 15;
solve(eval(sys, [a = 1, b = .3, c = 1.1]), {k, x, y0});

дает основания предположить, что Maple преобразует коэффиценты к рациональным дробям и затем приводит Вашу систему к системе полиномиальных уравнений с целочисленными коэффициентами. Эта система решается последовательным исключением неизвестных с применением базиса Гребнера http://ru.wikipedia.org/wiki/%C1%E0%E7% ... D%E5%F0%E0 . Получаются уравнения высоких степеней
(например,k = RootOf(11830000*_Z^8-9360000*_Z^7-163208600*_Z^6+93051200*_Z^5+337534703*_Z^4-603893576*_Z^3+424077654*_Z^2-138562424*_Z+17320303, index = 6)), которые решаются численно. Уверен, что самостоятельная реализация этих преобразований и вычислений одним лицом или небольшой группой не реальна.

Добавлено: Вт июн 10, 2014 10:50 pm
AlexxZ2
Я использую Mathematica. Если просто использовать Reduce[], то время 1.3 сек, с предупреждением, что точно решить не удается. Если сразу сказать, что решать численно NSolve[], то время 0.09сек. Попытки решить точно заканчиваются уходом пакета "в себя". Вообще, кончно, излишняя самоуверенность со стороны Maple тихонько подменить метод решения на численный. Видимо, придется численное решение и мне городить. Спасибо.