2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Получить аппроксимирующий полином с помощью SVD
Сообщение29.03.2016, 18:32 
Заслуженный участник


31/12/05
1520
SpBerkut в сообщении #1110230 писал(а):
На C++. Хочется разобраться самостоятельно.
Тогда переводите написанные выше несколько строк с Python на C++ (получатся десятки килобайт кода, если вы еще и матричную алгебру будете писать с нуля), добавляйте к ним самописную реализацию SVD или псевдообращения и увязайте в этом на месяцы, а экспериментальные данные пока подождут :)

 Профиль  
                  
 
 Re: Получить аппроксимирующий полином с помощью SVD
Сообщение29.03.2016, 19:58 
Заслуженный участник
Аватара пользователя


11/03/08
9967
Москва
tolstopuz в сообщении #1110209 писал(а):
Но зачем SVD, если можно просто взять псевдообратную?


Ну, через сингулярное разложение псевдообратную тоже можно считать. Способ тяжеловесный, но наиболее устойчивый численно.

-- 29 мар 2016, 20:13 --

Может, это пригодится?
http://www.twirpx.com/file/750248/

 Профиль  
                  
 
 Re: Получить аппроксимирующий полином с помощью SVD
Сообщение29.03.2016, 20:21 
Заслуженный участник


31/12/05
1520
Евгений Машеров в сообщении #1110264 писал(а):
Ну, через сингулярное разложение псевдообратную тоже можно считать.
Вообще да, в numpy она именно так и считается.

 Профиль  
                  
 
 Re: Получить аппроксимирующий полином с помощью SVD
Сообщение30.03.2016, 10:05 


15/07/14
13
Евгений Машеров в сообщении #1110179 писал(а):
И какое-то у меня смутное чувство, что человек, не могущий ответить, почему ему надо сделать нечто именно так, и никак иначе, выполняет:
1. Учебное задание (на владение каким-то ремеслом, будь то численные методы или программирование)
2. Выданное не ему учебное задание (заказчик неопределённо блеет о том, что именно делать, на консультации, где объясняли, что надо, заказчик не ходил, а исполнителя и не пускали, спросить у преподавателя нельзя)
3. А аванс уже взят.
1. Верно.
2. Верно.
3. Неверно. Именно из-за второго пункта я не беру авансы.
Евгений Машеров в сообщении #1110179 писал(а):
И у меня окончательно пропадает отсутствовавшее желание помогать...
Жаль.

 Профиль  
                  
 
 Re: Получить аппроксимирующий полином с помощью SVD
Сообщение30.03.2016, 16:53 
Заслуженный участник
Аватара пользователя


11/03/08
9967
Москва
В моём нежелании участвовать в помощи "коммерческим проектам" несколько составляющих. Мне, как бывшему (а спорадически и нынешнему) преподавателю неприятно участвовать в обмане коллеги, моя мещанская сущность неприязненно относится к самой идее бесплатно поработать на того, кто за это деньги получает (это не предложение заплатить за консультацию, отнюдь, см. далее), но главное - потом мне же и придётся ходить по построенному купившим диплом в розницу инженером мосту или класть деньги в банк, управляемый купившим в розницу диплом финансистом (хорошо ещё, что это явно не будущий врач! у них математика поскромнее...).
Впрочем, я мог бы, по настроению, ответить на чёткие и не требующие большой работы вопросы, для чего достаточно вспомнить или "слегка смекнуть". Но ведь нету вопросов, неясно, что и для чего делается. Есть неопределённо сформулированная задача, и требование непременно употребить сложный и тяжёлый, хоть и мощный инструмент, но не сказано, зачем.

 Профиль  
                  
 
 Re: Получить аппроксимирующий полином с помощью SVD
Сообщение30.03.2016, 17:13 


15/07/14
13
Евгений Машеров в сообщении #1110530 писал(а):
хорошо ещё, что это явно не будущий врач! у них математика поскромнее...
Экспериментальные данные — сигнал ЭКГ. :-)

 Профиль  
                  
 
 Re: Получить аппроксимирующий полином с помощью SVD
Сообщение30.03.2016, 17:43 
Аватара пользователя


21/01/09
3926
Дивногорск
SpBerkut в сообщении #1110533 писал(а):
Экспериментальные данные — сигнал ЭКГ. :-)

Вы хотите автоматизировать обработку?

 Профиль  
                  
 
 Re: Получить аппроксимирующий полином с помощью SVD
Сообщение30.03.2016, 19:02 
Заслуженный участник
Аватара пользователя


11/03/08
9967
Москва
Тогда совсем страшно...
Одно утешает - аппроксимировать кривую ЭКГ полиномом занятие... эээ... медитативное.

 Профиль  
                  
 
 Re: Получить аппроксимирующий полином с помощью SVD
Сообщение30.03.2016, 22:08 
Заслуженный участник


31/12/05
1520
Евгений Машеров в сообщении #1110530 писал(а):
Есть неопределённо сформулированная задача, и требование непременно употребить сложный и тяжёлый, хоть и мощный инструмент, но не сказано, зачем.
Странно - я на первой странице дал код, полностью решающий задачу именно этим инструментом, а его никто не замечает :)

 Профиль  
                  
 
 Re: Получить аппроксимирующий полином с помощью SVD
Сообщение31.03.2016, 01:32 
Заслуженный участник
Аватара пользователя


23/07/08
10910
Crna Gora
Я заметил и оценил лаконичность. :-)
Я не знаю Python (тем более NumPy), и мне было интересно догадаться, как устроена программа. Почти всё понял, кроме:
1) Похоже, что NumPy не делает различия между вектором-строкой и столбцом. В этих двух выражениях вектор b используется в разном качестве:
b @ u / s @ v
np.linalg.pinv(a) @ b
Но это же нехорошо: $b^T b$ и $bb^T$ — разные вещи.
2) Зачем звёздочка перед np.ix_?
3) Что за значок @ и почему для обозначения всяких матричных умножений не ввели просто * ?

 Профиль  
                  
 
 Re: Получить аппроксимирующий полином с помощью SVD
Сообщение31.03.2016, 01:39 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
svv в сообщении #1110722 писал(а):
Что за значок @
Это новинка в Python, совсем недавно появилась. Специально для матричного умножения, причём только в NumPy; в стандартной библиотеке не используется вообще. Странная, короче говоря, заморочка, и в самом деле.

 Профиль  
                  
 
 Re: Получить аппроксимирующий полином с помощью SVD
Сообщение31.03.2016, 03:21 
Заслуженный участник


31/12/05
1520
svv в сообщении #1110722 писал(а):
1) Похоже, что NumPy не делает различия между вектором-строкой и столбцом.
Там все тоньше. Одномерный массив - это не вектор-строка, а просто одномерный массив, а умножение определено для произвольных многомерных, поэтому позволяет больше вольностей, чем в стандартных матричных операциях. Можно написать b.reshape(b.shape[0],1) или b[:,np.newaxis] - и будет вектор-столбец, b.reshape(1,b.shape[0]) или b[np.newaxis,:] - вектор-строка. Они будут умножаться только на то, на что положено.
svv в сообщении #1110722 писал(а):
2) Зачем звёздочка перед np.ix_?
np.ix_ поворачивает каждый аргумент вдоль новой оси и возвращает их обратно, то есть его результат в данном случае - пара из вектора-столбца иксов и вектора-строки степеней. А power нужны два аргумента, вот и приходится распаковывать пару. Можно записать это в виде x[:,np.newaxis] ** np.arange(4)[np.newaxis,:].
svv в сообщении #1110722 писал(а):
3) Что за значок @ и почему для обозначения всяких матричных умножений не ввели просто * ?
Обычные операции уже много лет действуют поэлементно. Как ни странно, поэлементное умножение нужно довольно часто.

 Профиль  
                  
 
 Re: Получить аппроксимирующий полином с помощью SVD
Сообщение31.03.2016, 14:38 
Заслуженный участник
Аватара пользователя


11/03/08
9967
Москва

(Оффтоп)

Касательно предложения решить задачу одним вызовом программы из специализированной библиотеки, а не разобраться и написать...
На военной кафедре радиотехнического института регулярно заваливали студентов простым вопросом: "Как установить антенну?"
Будущие инженеры рассказывали о вкапывании опоры и крепеже растяжек, измерении сопротивления заземления и выверке положения... И получали "неудовлетворительно".
Потому, что правильный, требовавшийся от них ответ звучал:
"Трщ сржнт! Приказываю! Антенну устано-ВИТЬ!"

 Профиль  
                  
 
 Re: Получить аппроксимирующий полином с помощью SVD
Сообщение31.03.2016, 15:34 
Заслуженный участник


31/12/05
1520

(Оффтоп)

Евгений Машеров в сообщении #1110825 писал(а):
Касательно предложения решить задачу одним вызовом программы из специализированной библиотеки, а не разобраться и написать...
Тут тонкий вопрос - на что опираться, что взять за основу: 1) морской песок и силу ветра, 2) транзисторы и микросхемы, 3) машинные коды, 4) язык программирования высокого уровня, 5) пункт 4 плюс встроенную в язык/библиотеки поддержку линейной алгебры и прочих математических вычислений, 6) то же плюс библиотеки машинного обучения, 7) программный пакет типа RapidMiner. Я считаю, что первые пять пунктов лучше взять готовыми - детали реализации SVD и других классических алгоритмов линейной алгебры, на мой взгляд, относятся к более низкому уровню абстракции и будут хорошо смотреться в курсе численных методов линейной алгебры. Самому же полезно сначала в учебных целях реализовать несколько методов из пункта 6 (сейчас, например, в моде градиентный спуск) самостоятельно, а потом пользоваться библиотечными.

 Профиль  
                  
 
 Re: Получить аппроксимирующий полином с помощью SVD
Сообщение31.03.2016, 16:56 
Заслуженный участник
Аватара пользователя


11/03/08
9967
Москва

(Оффтоп)

Увы, покойный Вольф Мессинг завещал свой талант телепата не мне...
И что надо было ТС - пока он не произнесёт это вслух чётко, громко и разборчиво - мы так и не узнаем...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу Пред.  1, 2

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Cynic


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group