Перспективы для программиста в Германии
Вы много минимизировали L-M? А с BFGSом хоть теоритический опыт был? Сравнивали? Если да, то расскажате, всем будет любопытно, у меня достаточно большой опыт минимизации всяких функций до несколькимх сотен миллиардов вариируемых параметров, и часто приходится сравнивать и мой опыт как раз не в пользу L-M.
Гистерезис в Максвелле очень регулярно пользую, примерно как на картинке. Как раз недавно для своего ЯМРа надо было именно хорошее описание. Сплайн по трем отрезкам (я имею ввиду f_2(x) на трех отрезках) идеально подходит, а после этого все идеально описывается и человек на C# это все запрограммирует за час-два, и, главное, безгеморно отладит.
Проще вызывать R из своей программы в пакетном режиме для обработки или генерации данных.
Да только за подобную идею меня подвесят на толстой веревочке. Никто не будет еще и R устанавливать. А лёгкий или простой зависит от многих причин. Помню как то на Руби надо было что то писать. Ну да освоили бысто, но бывало потом приходили такие исходники, что приходилось часами разбираться с одной строчкой.
не понимаю, что такое "похожая кривая"
Вот на картинке есть кривая - на мониторе должная быть подобная по форме.
и "чтобы живой была".
В реале кривая формируется из аппаратуры и ее форма постоянно меняется.
Что нужно для тестов?
Что бы картинка на экране без аппаратуры была похожа на ту что получается с аппаратурой. Ничего больше.
Л-М минимизировал много. С разной степенью успешности. Конкретно гистерезисные кривые апрроксимировал без каких-либо особых проблем. Сотен миллиардов параметров там нет и в помине, не надо усложнять без нужды. Л-М далеко не всегда хорош - это бесспорно, но в данном конкретном случае я не вижу НИКАКОГО смысла искать нечто иное. Для тестов не требуется программировать саму операцию. Требуется лишь определить параметры модели и интервал их варьирования. После чего банально генерить датасеты, налагая шум при необходимости. Предлагаю автору вопроса опубликовать тестовый набор данных и вид модели. А там решим, чей рахат-лукум слаще.
Никто не будет еще и R устанавливать
А почему? Она - софтина - кагбэ фришная (хотя есть тонкости при использовании на фирме). Да и сильно много места не занимает. Ради теста зачем что-то большее???
Вот на картинке есть кривая - на мониторе должная быть подобная по форме
Модель (аналитический вид "формулы") известны?
В реале кривая формируется из аппаратуры и ее форма постоянно меняется.
Повторяю вопрос: есть описание формы кривой?
Что бы картинка на экране без аппаратуры была похожа на ту что получается с аппаратурой.
Сделайте скриншот картинки которая "с аппаратурой" и растягивайте/сжимайте ее по осям любым способом. Получите похожую кривую. Мамой клянусь!
Я начинаю подозревать,что на самом деле модель Вам неизвестна. И Вам для начала нужно подобрать функцию, адекватно описывающую кривую, для генерации
семейства кривых при изменении неких базовых параметров, определяющих основные характеристики кривой (точки ипересечения с осями, наклоны ветвей и т.п.).
Ну, как говорится, "Буратино, ты сам себе враг!"
Предполагаю, что R-скрипт для нахождения параметров кривой по известной модели займет строк 10 кода. Возможно - меньше, например, три или четыре. При условии вынесения списка подгружаемых пакетов в отдельный файл (.RProfile). Одна строка - считывание данных из текстового файла, вторая строка - фитование по известной модели, третья - сохранение результатов. Возможно, понадобится промежуточное вычисление. Или сохранение графика в каком-нибудь графическом формате. Это уже может занять строк 5-6 в зависимости от желаний клиента. Как-то так.
Но, безусловно, можно доставать левой пяткой правое ухо и переводить в C#.
Я, увы, не спец. Хотел изучить плотнее NumPy, но руки так и не дошли. Плюс, у меня работа в основном аналитическая - мне для кого-то программить приходится довольно редко. А вот вертеть данные и вытаскивать из них информацию о процессе - ежедневно.
Если задать функцию, которая идет из А до Е в виде трех отрезков
f(x)=fa*x^3+fb*x^2+fc*x+fd (отрезок E-D)
g(x)=ga*x^3+gb*x^2+gc*x+gd (отрезок D-C)
h(x)=ha*x^3+hb*x^2+hc*x+hd (отрезок C-A)
то коэффициенты можно посчитать в виде
fd -> (5 D^4 (3 A - 3 C + 2 E) - 3 D^3 (15 A - 17 C + 10 E) M +
15 D^2 (-2 A + C + E) M^2 - 21 C D M^3 - 6 C M^4)/(
2 (5 D^4 - 12 D^3 M + 7 D M^3 - 3 M^4)),
ha -> (5 (-A + C) D^5 +
12 (A - C) D^4 M - 3 D^3 (9 A - 10 C + E) M^2 +
D^2 (-2
(8 A + C) + 3 E) M^3 + 3 (4 A - 7 C) D M^4 +
6 C M^5)/(2 D M^3 (5 D^4 - 12 D^3 M + 7 D M^3 -
3 M^4)),
hd -> C,
fc -> (3 (5 (A - C) D^5 +
D^4 (-15 A + 17 C - 2 E) M + 5 D^3 (-C + E) M^2 +
D^2 (10 A - 13 C - 2 E) M^3 + 4 C D M^4 +
2 C M^5))/(2 D M (5 D^4 - 12 D^3 M + 7 D M^3 - 3 M^4)),
hb -> ( 3 D^3 (9
A - 10 C + E) + 3 D^2 (3 (A + C) - E) M -
9 (A - 2 C) D M^2 - 6 C M^3)/(
D (5 D^4 - 12 D^3 M + 7 D M^3 - 3 M^4)),
hc -> ( 3 (A - C + (
M^2 (-D^3 (9 A - 10 C + E) + D^2 (-3 (A + C) + E) M +
3 (A - 2 C) D M^2 + 2 C M^3))/(
D (5 D^4 - 12 D^3 M + 7 D M^3 - 3 M^4))))/(2 M),
gc -> ( 3 (A - C + (
M^2 (-D^3 (9 A
- 10 C + E) + D^2 (-3 (A + C) + E) M +
3 (A - 2 C) D M^2 + 2 C M^3))/(
D (5 D^4 - 12 D^3 M + 7 D M^3 - 3 M^4))))/(2 M),
gd -> C,
ga -> ( 15 (A - C) D^4 + 2 D^3 (9 A - 7 C + 3 E) M -
3 D^2 (3 A - 8 C + 3 E) M^2 + 3 D (-2 A + 2 C + E) M^3 - 7 C M^4)/(
2 D^2 M (5 D^4 - 12 D^3 M + 7 D M^3 - 3 M^4)),
gb -> (
3 D^3 (9 A - 10 C + E) + 3 D^2 (3 (A + C) - E) M -
9 (A - 2 C) D M^2 - 6 C M^3)/(
D (5 D^4 - 12 D^3 M + 7 D M^3 - 3 M^4)),
fa -> ( D E (4 D - 3 M) M + 15 A D^2 (D + M) -
3 C (D + M) (5 D^2 - 2 D M - M^2))/(
2 D M (5 D^4 - 12 D^3 M + 7 D M^3 - 3 M^4)),
fb -> ( 3 D E (4 D - 3 M) M + 45 A D^2 (D +
M) -
9 C (D + M) (5 D^2 - 2 D M - M^2))/(
2 D (5 D^4 - 12 D^3 M + 7 D M^3 - 3 M^4))
думаю, проблем заимплементировать на С# не возникнет.
ЗЫ: мог конечно описаться в задании модели, проверьте, мне лениво проверять :)
"А теперь со всей этой фигней мы попытаемся взлететь!" (с) :)
Запасаюсь попкорном для созерцания процесса варьирования всех этих коэффициентов, чтобы слегонца поменять наклон, площадь или положение особых точек кривой (точки насыщения, расщепления и т.п.), что делается легко и непринужденно при параметрическом задании функции в аналитическом виде.
PS. Чертов парсер, не хочет вставлять формулки с matheboard.de
да тривиально, ибо тождественно проходит через A, C, D, E точки, а если не понравиться, я это всяко на mathematica посчитал, засуну еще пару параметров и будет еще пара аналитических функций. Взлетит, куда денется. Не спорю, что из R можно много чего по-простому вызваать, но гемор по прикручиванию оного, и последующей оттладки параметров минимизаторов по первости отпугнет любого. У меня знакомый лапак к шарпу прикручивал, чтобы bicgstab запрограммировать. Несколько дней мучался, а R думаю, будет веселее, ибо он за собой и лапак, и еще кучу всего потянет.
ЗЫ: для себя я бы решал двумя вызовами GSL что по длине и скорости отладки примерно равно тому, как с R. Но, как вы верно подметили, тут все дело во вкусе рахат-лукумов.
Ну и какой же гемор???? Написать строчку вызова R в пакетном режиме - это, пардон, как два байта переслать. Про скрипт для фитования я уже высказался. А главное я так и не понял, на кой ляд вообще нужно что-либо еще, кроме R для _генерации тестовых данных_???!!!! Я, может, чего-то не улавливаю, но мне до сих пор кажется, что автору вопроса нужно на выходе получить две колонки данных. Колонка X-ов, колонка Y-ов. Написал в R функцию, чтобы генерить с заданными параметрами, задал параметры в массивах и сгенерил хоть стопиццотыщ файлов с данными. Тестируй - хоть обтестируйся. Можно генерить в Матлабе, Математике, Мейпле, Ориджине - в чем угодно, я лишь указал R в качестве легкодоступного и небольшого по объему софта для решения
задачи. Коли не нравится R - бери тот же Octave.
Вообще, автор не определил, что он понимает под тестированием - из него клещами надо вытягивать внятное описание задачи.
> Вообще, автор не определил, что он понимает под тестированием - из него клещами надо вытягивать внятное описание задачи.
не, он писал, что надо быстро считать и не хотел использовать сторонние софты. Если это причуда, я присоединяюсь к мнению, по использованию любой сторонней софтины, той, которую он сможет или ему разрешат поставить, а там уж все это есть. Иначе - пусть летает, на том, что ему mathematica нагенерила, это при старании даже в ардуину засунуть можно :)
> Ну и какой же гемор????
да тот еще. Вы поставьте себя на его место, он ни разу ни вызывал и не программировал ни одного минимизатора, даже монтекарловку! Он смотрит на это как ужасно пугливый человек... Если его функция кривая, то как бы он не старался, у него нет шансов без танцев с бубнами по параметрам минимизатора найти правильное решение, а он в силу того, что не в теме, не будет понимать, то ли он не то вызвал, то ли еще что не так.
Быстро - это как? Внятная формулировка задачи могла бы выглядеть примерно так: "Требуется генерация m наборов данных, состоящих из n точек (x,y) каждый за время t с использованием параметров, пределы варьирования которых должны быть определены по некоей измеренной кривой согласно модели, задаваемой формулой ... при уровне нормально распределенного шума z.". Только теперь мне кажется, что автор не понял, что означают параметры модели. При параметрическом (пардон за тавтологию, но не знаю как иначе) задании функции x=x(phi), y=y(phi) координаты особых точек напрямую входят в уравнение. И ей богу, мне уже надоедает заниматься телепатией.
Я начинаю подозревать,что на самом деле модель Вам неизвестна.
Теории то достаточно
http://www.science.unitn.it/~visintin/Elsevier2006.pdf
многие любят пользовать Preisach модель. Но это все слишком много для того что требуется.
Никто не будет еще и R устанавливать... А почему?
требуется одна единственная прога - та что нужна пользователю, не больше.
Сделайте скриншот картинки которая "с аппаратурой" и растягивайте/сжимайте ее по осям любым способом.
А смысл? На оси Х и У приходят, грубо говоря данные от АЦП. Вместо них нужно подать тестовые сигналы. Всё остальное будет другой прогой которая никому не нужна.
И Вам для начала нужно подобрать функцию, адекватно описывающую кривую
Это я нашел, а вот с параметрами как раз и нужны более глубокие знания математики (И программирования).
Например, один из параметров будут степени для синуса/косинуса, а функция POW получается медленоватой.
Надо поискать где это я делал, тогда будет более понятно, надеюсь.
из него клещами надо вытягивать внятное описание задачи
Вообще то я не ожидал такой активности, обычно идет пара ответов в рабочий день.
Просто хотел узнать делалось ли что в данной области. Да и лучше было открыть новую тему. Но тепрь уже поздно.
на кой ляд вообще нужно что-либо еще, кроме R для _генерации тестовых данных_???!!!!
Заранее сгенерированные данные иметь не очень хочется. Параметры хочется задавать в проге.