F(X)=0, метод решения систем нелинейных уравнений

Форум для обсуждения вопросов математики

Модератор: Admin

алексей_алексей
Сообщения: 1776
Зарегистрирован: Вс май 01, 2005 9:02 pm

Сообщение алексей_алексей » Пн окт 08, 2012 2:54 pm

l
Последний раз редактировалось алексей_алексей Пт июн 17, 2016 9:33 am, всего редактировалось 1 раз.

Korobov V I
Сообщения: 1609
Зарегистрирован: Вт янв 21, 2003 5:12 pm

Сообщение Korobov V I » Пн окт 08, 2012 3:01 pm

алексей_алексей писал(а):
Korobov V I писал(а):Вы определитесь, господа,...

Господа, это кто?

Извините, если обращение "господа" Вам показалось оскорбительным. :oops:

алексей_алексей
Сообщения: 1776
Зарегистрирован: Вс май 01, 2005 9:02 pm

Сообщение алексей_алексей » Пн окт 08, 2012 3:09 pm

d
Последний раз редактировалось алексей_алексей Пт июн 17, 2016 9:33 am, всего редактировалось 1 раз.

Korobov V I
Сообщения: 1609
Зарегистрирован: Вт янв 21, 2003 5:12 pm

Сообщение Korobov V I » Пн окт 08, 2012 3:24 pm

По поводу точности.

uni
Сообщения: 1817
Зарегистрирован: Сб ноя 13, 2004 3:06 pm
Откуда: п.г.т. Излучинск
Контактная информация:

Сообщение uni » Пн окт 08, 2012 3:27 pm

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

Изображение

Точка b[1] - это минимум. Там вектор производных обращается в ноль. В точке b[2] вектор производных совсем в ноль не обращается, но сумма квадратов относительно небольшая. Остальные две точки я не понял что такое.

Я где-то на картинке ошибся?

В данной теме мы рассматриваем только точные решения в том смысле, кривая, по которой мы движемся - одна, это не трубка с доверительным интервалом, типа как с электроном - он либо волна, либо частица. У нас тут - "частица".

Korobov V I
Сообщения: 1609
Зарегистрирован: Вт янв 21, 2003 5:12 pm

Сообщение Korobov V I » Пн окт 08, 2012 3:46 pm

Ну, если строго говорить, Вы движетесь здесь не по кривой, а по поверхности (функции трех переменных), и проблема в том, "куда кривая вывезет". Почти как у Высоцкого.
Во-вторых, если эксперимент воспроизвести еще раз, Вы будете двигаться по той же поверхности (или кривой, если Вам так угодно)? Это к вопросу о доверительных интервалах.
А вообще-то мне кажется, что это рядовая задача по описанию зависимости давления насыщенного пара вещества от температуры. Это описание ведется с помощью уравнения Антуана (или его вариации). Так что я не совсем понял, при чем тут корпускулярно-волновой дуализм...

uni
Сообщения: 1817
Зарегистрирован: Сб ноя 13, 2004 3:06 pm
Откуда: п.г.т. Излучинск
Контактная информация:

Сообщение uni » Пн окт 08, 2012 4:50 pm

Доверительный интервал - это статистическая мера, насколько я помню, а я описал задачу аналитически. Вот причём тут дуализм.

И мы движемся по кривой, если используем метод Драгилева. В данном примере из 4-х мерного пространства. У нас 4 параметра: b1, b2, b3, v.

Если повторить эксперимент ещё раз, то данные определят другую кривую и двигаться мы будет по другой кривой. По характеру она будет та же, но по параметрам немного другая. Из той же начальной точки мы придем уже к совершенно другому решению, т.к. минимума критерий будет достигать уже другим способом. Аналитика укажет каким именно.

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

алексей_алексей
Сообщения: 1776
Зарегистрирован: Вс май 01, 2005 9:02 pm

Сообщение алексей_алексей » Пн окт 08, 2012 5:12 pm

s
Последний раз редактировалось алексей_алексей Пт июн 17, 2016 9:34 am, всего редактировалось 1 раз.

алексей_алексей
Сообщения: 1776
Зарегистрирован: Вс май 01, 2005 9:02 pm

ещё один пример

Сообщение алексей_алексей » Ср окт 10, 2012 6:06 pm

w
Последний раз редактировалось алексей_алексей Пт июн 17, 2016 9:34 am, всего редактировалось 1 раз.

uni
Сообщения: 1817
Зарегистрирован: Сб ноя 13, 2004 3:06 pm
Откуда: п.г.т. Излучинск
Контактная информация:

Сообщение uni » Чт окт 11, 2012 3:28 pm

Я, кстати, модератором там стал случайно и это не входило в мои пожелания. Т.е. я только по желанию могу просматривать панель модератора и редко вообще туда заглядываю. Поэтому мне нужно напоминать, если вдруг опять движок форума тормозит сообщение в тему.

П.С. Кстати, ваш мэпловский решатель стоило бы "причесать", он уж слишком "лохматый" для такого символьного движка. Я уже как 4 года не пересчитываю систему диффуров, если мне нужны картинки с другой начальной точкой, т.к. начальная точка у меня входит параметром в систему как нули после n+1 переменной. После интегрирования это будут константы, на которые можно ссылаться прямо в системе. При этом, вычислив символьно систему один раз, больше этого делать не нужно, подставляя любые начальные условия и любуясь результатом.
Странно, что никто до сих пор этого не поправил в коде мэпловского решателя. Да и вообще, страшно его кому показывать. Всё то же самое можно было бы написать раза в 2 - 3 попроще, без всяких там DeleteColumn() и прочего. У меня аж голова заболела, когда я попытался понять что же там всё-таки написано.

Если в Mathcad'е решатель укладывается в небольшой программный блок, то в Maple это всё должно быть в 2 раза короче (здесь нахождение системы для численного решателя):

Изображение

алексей_алексей
Сообщения: 1776
Зарегистрирован: Вс май 01, 2005 9:02 pm

Сообщение алексей_алексей » Чт окт 11, 2012 5:18 pm

s
Последний раз редактировалось алексей_алексей Пт июн 17, 2016 9:35 am, всего редактировалось 1 раз.

uni
Сообщения: 1817
Зарегистрирован: Сб ноя 13, 2004 3:06 pm
Откуда: п.г.т. Излучинск
Контактная информация:

Сообщение uni » Чт окт 11, 2012 6:09 pm

Если вам всё равно, что при каждом изменении начальной точки нужно всё полностью считать заново, то это одно. Другой же подход, который я использую, делит все вычисления на две логические части: символьные преобразования и численное решение.

Из здравого смысла ясно, что символьные преобразования в общем и целом могут занимать неопределённое вычислительное время, в то время как численный расчёт диффура по известной системе занимает конечное время, определённое интервалом и количеством точек.

В Mathcad'е такое деление связано ещё с тем, что там нельзя в одном блоке одновременно делать символьные и численные преобразования, в остальных же пакетах почти всегда можно.

Так вот, если вы не в курсе, в вашем решающем блоке начальная точка со значениями своих координат жёстко входит в получаемую систему, т.е. другими словами, эта система только для конкретной начальной точки. Что мы из этого имеем? Если нам нужно подбирать начальные точки, то время на вычисления будет кратно увеличиваться: 5 начальных точек - 5 полных перерасчётов (!). Мне бы это действовало на нервы :)

Какой смысл сто раз пересчитывать символьные преобразования, когда их можно сделать только один раз? Для этого нужно ввести в диффур дополнительные псевдо-параметры - константы, по величине размерности задачи. В окончательной системе нужно просто добавить нулей, а вот когда мы отнимаем произведение n+1 параметра умноженного на значения функций в точке x0, то там нужно вместо констант подставить эти самые псевдо-параметры диффура.

Это специальный приём параметризации задачи по численному решению ОДУ, когда сам вычислитель вам непосредственно не доступен, а вам хотелось бы решать задачу с параметрами. Обычно, при изменении параметра, приходится заново составлять систему, если же использовать псевдо-переменные в самой системе, то решатель сам их подставит при численном вычислении и тогда нужно составить систему всего один раз.

Такая вот фишка. Я её перенял много лет тому назад на старом западном маткадовском форуме. Это очень сильно упрощало жизнь.

В принципе, у меня уже есть заготовка для Maple'а на этот случай, которую я тогда же 4 года назад сделал, но меня остановило тогда то, что результат численного решения не имел табличной формы и я не стал продолжать изыскания.

После того, как я увидел в очередной раз, что вы до сих пор используете тот старый вариант, то вот и решил, что пора бы его заменить. Автор того варианта тупо просто делал преобразования прямо по вашему описанию (для первого раза это нормально, но за столько лет можно было уже подчистить код). Вот откуда взялись всякие там DeleteColumn() и прочие странные вещи. То, что делается обычным Якобианом в одну строку, расписано обходным путём.

uni
Сообщения: 1817
Зарегистрирован: Сб ноя 13, 2004 3:06 pm
Откуда: п.г.т. Излучинск
Контактная информация:

Сообщение uni » Чт окт 11, 2012 6:21 pm

Что это означает на практике. Как нам известно, если связных множеств, к примеру, 152 штуки и нужно пройтись по всем им, то вы будете 152 раза делать символьные вычисления для каждой точки на каждом множестве. Я же сделаю символьное 1 раз и 152 подставлю в численный Рунге-Кутта ;)
Уверен, что время вычисления будет примерно в 150 раз отличаться.

алексей_алексей
Сообщения: 1776
Зарегистрирован: Вс май 01, 2005 9:02 pm

Сообщение алексей_алексей » Чт окт 11, 2012 7:06 pm

s
Последний раз редактировалось алексей_алексей Пт июн 17, 2016 9:35 am, всего редактировалось 1 раз.

uni
Сообщения: 1817
Зарегистрирован: Сб ноя 13, 2004 3:06 pm
Откуда: п.г.т. Излучинск
Контактная информация:

Сообщение uni » Чт окт 11, 2012 8:56 pm

Пока используйте то, что работает. При моём подходе тоже не всё гладко. Когда мы добавляем параметры в систему по описанному способу, то она немножко усложняетя, хоть и на константы и операции с ними, но всё же, т. е. при выводе на экран текста значительно прибавится. Второе, я использую функцию вычисления якобиана для получения каждого элемента будущей системы. Это очень просто, кратко и наглядно выглядит, в отличие от перестановки столбцов, но с вычислительной точки зрения, скорее всего правильно делать манипуляции со столбцами при заранее посчитанных производных. Разница не будет заметна на небольших примерах, что мы сейчас используем, но на больших задачах, я думаю это будет заметно, т. к. вычисление якобианов каждый раз не имеет смысла ибо там будет много одних и тех же операций. Вряд ли это осознавал автор вашей реализации, но описание сделано в этом смысле правильно.

Насколько я помню, у вас план - по одному вовлечённому в год. Думаю, что не много людей решится разобраться в вашем решателе при текущем его виде. Мой, кстати, тоже был поначалу сложноват, но последняя его версия максимально укорочена и упрощена, чтобы не давить на психику своей громоздкостью. Я попробую оформить мэпловский вариант с учётом имеющегося у меня опыта. Т. е. для обученя и простых систем можно сделать более краткий по виду решатель, а если когда-нибудь всё-таки найдутся более серьёзные системы, то там нужно будет манипулировать столбцами как сейчас.

Всё-таки лучший, на мой взгляд, способ понять метод - это самостоятельно составить решатель для него.