LINUX.ORG.RU
решено ФорумTalks

математические библиотеки

 


0

1

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

Взять, например, GSL. Длиннющий список возможностей. Матричные всякие разложения итд. Но нет ни стандартных матричных операций, ни многих крайне полезных вещей.

И в результате приходится руками программировать перемножение матриц и библиотеке, которая призвана для упрощения жизни программистам.

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

Я не понимаю, как вообще можно так подходить к разработке библиотек?

Оказывается, перемножения там есть, но засунуты и названы так, что не сразу понятно, что это они.

★★★★★

Последнее исправление: CYB3R (всего исправлений: 3)
Ответ на: комментарий от cvs-255

бестолковые версии я уже отбросил.

То есть у тебя есть полностью работоспособный прототип, он хорошо протестирован и выдаёт желаемые результаты?

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

Та часть, что я ужесделал, дает нужный результат на простых случаях.

А проблемы у меня не уровня «как реализовать алгоритм на языке X», а как вообще алгоритмизовать проблему. С этим возни куда больше

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

Та часть, что я ужесделал, дает нужный результат на простых случаях.

Делай тогда остальные части. Оптимизация никак не приблизит «алгоритмизацию проблемы».

Manhunt ★★★★★
()
Ответ на: комментарий от cvs-255

«как реализовать алгоритм на языке X»

Речь о том, что на матлабах реализовывать прототипы гораздо быстрее, чем на сях. И потому исследовательскую работу эффективнее вести в матлабах.

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

Одноразовые задачки выгоднее делать в Octave, но вот если тебе надо что-то делать больше, чем 1-2 раза, надо реализовывать быстрый алгоритм на сях, а еще лучше — на GPU.

Естественно, в этом случае надо использовать не велосипеды, а нормальные оптимизированные библиотеки.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Manhunt

Алгоритм один и тот же. А потом переписывать с нафиг ненужного питоно и Сo, на C особого желания нет.

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

а еще лучше — на GPU.

как раз с заделом на GPU я и пишу на C, благо знаю его куда лучше питона и подобных ему.

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

Когда не пришел к оконательному методу(я же не думаю, что ты после решения на бумаге все понял), то можно смело в разы уменьшать объем данных \ детализацию расчетов. Для меняя 2-6 часов разницы нету. Тк если мы уже говорим о часах, то все на кластере обрабатывается. Тем более, я неплохо задрочил матлаб, и (если эта гнида опять по памяти не вываливается) то крайне редко бывает, что матлабовсий метод работает более чем в полтора раза дольше.

Ну ты же согласен, что если твой метод, в основном, оперирует матричными вычислениями, то оверхед матлаба\питона совсем невилик? А если у тебя не так много матричных вычислений, то чего плакаться об ортодоксальности BLAS и LAPACK?

Я тебе советую облегчить свои муки имплементации новых методов и начинать с прототипа на матлабе.

maggotroot
()
Ответ на: комментарий от cvs-255

Матлаб имеет GPU имплементацию некоторых методов, и mex-функции спокойно компилируются с CUDA. Просто FYI.

maggotroot
()
Ответ на: комментарий от maggotroot

Еще раз: матлаб (лучше — Octave, т.к. матлаб стоит черт те сколько) годится лишь для одноразовых расчетов.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Еще раз: матлаб (лучше — Octave, т.к. матлаб стоит черт те сколько) годится лишь для одноразовых расчетов.

С чего бы?

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

1) медленно, 2) неудобно

Лучше запустить бинарник, нежели открывать тормознутую октаву и в ней — функции.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от cvs-255

Я с тобой хочу советом поделиться. Ты скажи, твой метод идет продакшн и чем-то управляет, или это исследовательская работа? Вероятность что твой метод еще хоть один человек кроме тебя запустит крайне мала. Поэтому не мучай себя: пиши сначала прототип, а потом, если твой метод получит распространение, то уже будет иметь смысл переписать на си.

maggotroot
()
Ответ на: комментарий от Eddy_Em

медленно

Класс задач, которые обсчитываются слишком медленно в матлабе, но достаточно быстро на сях, очень узок. Большинство задач попадает в два гораздо более широких класса:
1) задача за мгновенье ока обсчитывается и матлабом, и сями
2) с обсчетом задачи не всякий кластер справится, на чем её ни пиши

неудобно

Скриптик для запуска приделай.

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 3)
Ответ на: комментарий от Eddy_Em

У меня матлаб\октав открыт 24/7. Давай мне юзкейс, где тебя не устраивает скорость матлаб\октав.

У меня тут нормально 3д регистрация со срезов мозга работает.

maggotroot
()
Ответ на: комментарий от Manhunt

Нет уж. А если мне хочется в реальном времени визуализировать данные? Не годится Octave для этого. Про матлаб и не заикайся — дорого, а следовательно, не нужно.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от maggotroot

мне проще писать на Си. Этот язык я знаю замечательно.

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

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

Ок да это тоже. Но, если не секрет, расскажи, что в конце концов твои методы делают? Если управляют телескопом, то это да — тут согласен. Но каков у вас воркфлоу, что метод выходит из разработки в практическое применение?

maggotroot
()
Ответ на: комментарий от maggotroot

Посмотри, например, в моей ЖЖшке кое-что из того, чем занимаюсь. Плюс можешь на гуглокоде на мою страничку заглянуть.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от cvs-255

Достаточно странно читать, что ты знаешь замечательно Си и не слышал про LAPACK и BLAS. Ну да, си то так достаточно простой: int, for, if, case, goto, указатели. Великолепно.

Так все же знаешь язык, или умеешь им пользоваться и программировать на нем?

maggotroot
()
Ответ на: комментарий от maggotroot

я много программировал в том числе и вычислительного на си, но к линейной алгебре это отношения не имело.

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от maggotroot

А что странного? Все от задачи зависит. Я, например, никогда blas/lapack не использовал: от силы fftw3 для Фурье + кое-что из GSL для аппроксимации функций.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Лол «Мигаю диодом на STM32-P103».

Ну если серьезно, то бегло пробежавшись по темам, я бы сказал, что оверхед октава и матлаба будет очень небольшой. Ты пробовал матлаб то?

maggotroot
()
Ответ на: комментарий от maggotroot

Ты пробовал матлаб то?

Когда-то. Но потом открыл для себя Octave (тем паче, что пиратская «лицензия» на матлаб сдохла) и решил больше пиратским матлабом не пользоваться — октавы за глаза хватает.

P.S. А на ARM'е я, когда будет время, соберу систему управления спектрометром.

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от cvs-255

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

Главное, если будешь учить матлаб, то при возникновении проблем, попробуй посмотреть хоть 1 ссылку в гугле, а не бежать срау на ЛОР плакаться, что что-то говно.

maggotroot
()
Ответ на: комментарий от Eddy_Em

Я как-то пытался, но многого мне нужного не было. В октаве, раньше по крайней мере, хромала оптимизация. +Профайлер в матлабе прелесть. Но вроде год назад в октаве профайлер тоже запилили.

Ведь матлаб и октав вроде для линейной алгебры используют BLAS LAPACK, но все равно octave серьезно тормозил по сравнению с матлабом. Это так?

maggotroot
()
Ответ на: комментарий от cvs-255

Ок. Если не лень, то расскажи в двух предложениях что ты делаешь и как? Это более общий или специализированный метод?

maggotroot
()
Ответ на: комментарий от maggotroot

Вычисления вроде бы по скорости практически не отличаются. А вот с выводом графики в октаве проблемы: gnuplot

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от maggotroot

То, что я сейчас делаю:

есть система квадратных уравнений на (N+1)*(2*N+1) переменных и количеством (N+1)^4, часть из которых совпадает.

А также система линейных уравнений на эти переменные.

Мне надо пройтись по множеству решений, и для каждой точки решать некотороую другую систему совсем нелинейных уравнений, в которых решения первых уравнений выступают в качестве параметров.

Аналитически это ни у меня, ни у научного руководителя не вышло, потому я пишу численное решение.

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от maggotroot

делаю я это следующим образом - каждое уравнение диагонализирую, получаю уравнение вида \sum x_i^2 * d_i = 0, затем x_i^2 обозначаю за y_i, нормирую их сумму на 1 и нахожу область решения каждого уравнения.

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

если получается близко к 0, но не 0, то можно подогнать его стандартными численными методами

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от Manhunt

Вполне возможно, что твое решение defective by design, и нуждается в коренной переделке, а вовсе не в оптимизациях. Зачем в них сейчас вкладываться?

это верно. Однако это совсем не повод кодить на питоне.

drBatty ★★
()
Ответ на: комментарий от Manhunt

Класс задач, которые обсчитываются слишком медленно в матлабе, но достаточно быстро на сях, очень узок.

ты теоретик. В большинстве задач есть некоторое заданное время (час, день, секунда, не важно сколько конкретно), и есть результат. Например у меня есть 24 часа, на питоне я решу задачу с точности до 10го знака, на сях до 20го, а на сях с GPU уже до 30. Тут ещё есть такой момент, сколько я часов буду писать на питоне и переписывать на си с GPU, и сколько я буду писать прямо на сях. На сях оно конечно подольше, но и переписывать не нужно.

drBatty ★★
()
Ответ на: комментарий от cvs-255

мне проще писать на Си. Этот язык я знаю замечательно.

вот этим ты и отличаешься от математиков... математики они вообще стукнутые - например любят лямбды, замыкания, и бесконечные списки. Пытаешься им объяснить факт отсутствия IRL и того, и другого и третьего - как в бетонную стену головой - «это удобно и быстро!». То, что вся эта НЁХ реализуется IRL кривыми и тормозными костылями их не волнует.

drBatty ★★
()
Ответ на: комментарий от drBatty

Вполне возможно, что твое решение defective by design, и нуждается в коренной переделке, а вовсе не в оптимизациях. Зачем в них сейчас вкладываться?

это верно. Однако это совсем не повод кодить на питоне.

Это повод не кодить на Си.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

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

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

в моем случае есть куда более нетривиальные проблемы, чем когда нужно выделять и освобождать память вручную

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

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.