2014 dxdy logo

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

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


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


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



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


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

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


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


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

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

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

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


31/12/05
1517
Евгений Машеров в сообщении #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
9906
Москва
В моём нежелании участвовать в помощи "коммерческим проектам" несколько составляющих. Мне, как бывшему (а спорадически и нынешнему) преподавателю неприятно участвовать в обмане коллеги, моя мещанская сущность неприязненно относится к самой идее бесплатно поработать на того, кто за это деньги получает (это не предложение заплатить за консультацию, отнюдь, см. далее), но главное - потом мне же и придётся ходить по построенному купившим диплом в розницу инженером мосту или класть деньги в банк, управляемый купившим в розницу диплом финансистом (хорошо ещё, что это явно не будущий врач! у них математика поскромнее...).
Впрочем, я мог бы, по настроению, ответить на чёткие и не требующие большой работы вопросы, для чего достаточно вспомнить или "слегка смекнуть". Но ведь нету вопросов, неясно, что и для чего делается. Есть неопределённо сформулированная задача, и требование непременно употребить сложный и тяжёлый, хоть и мощный инструмент, но не сказано, зачем.

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


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

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


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

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

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


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

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


31/12/05
1517
Евгений Машеров в сообщении #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
1517
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
9906
Москва

(Оффтоп)

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

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


31/12/05
1517

(Оффтоп)

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

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


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

(Оффтоп)

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

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

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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