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

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

 


0

1

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

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

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

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

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

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

★★★★★

Последнее исправление: CYB3R (всего исправлений: 3)

Ответ на: комментарий от BattleCoder

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

cvs-255 ★★★★★
() автор топика

нет ни стандартных матричных операций

Есть, см. функции BLAS

диагонализация форм

Должна быть.

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

Потому что GSL использует библиотеку BLAS для этого. Если нужны только BLAS'овские функции, GSL подключать не нужно

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

диагонализация форм

Должна быть.

бидиагонализация есть. просто диагонализации не нашел.

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

О, в самом деле есть. Но почему нельзя было нормально назвать раздел?

Наркоман? Это стандартная аббревиатура с ещё бородатых времён, когда все вычисления на фортране писали.

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

неплохо бы еще и пояснения для тех, кто не программирует на фортране с бородатых времен.

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

Basic_Linear_Algebra_Subprograms

вот так бы и назвали.

cvs-255 ★★★★★
() автор топика

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

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

Есть такое. Например, лептоника до сих пор не помещает в систему rc-файл, поэтому приходится на каждый новый компьютер его копировать вручную.

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

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

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

В BLAS же есть функции для вычисления собственных значений.

Eddy_Em ☆☆☆☆☆
()

Вот поражаюсь я cvs-255. Разбирается с математическими библиотеками в linux, при этом не слышал ни про blas, ни про lapack.

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

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

GSL оказалось примерно вначале, я скачал manual, но из-за любви авторов к названиям вида gsl_blas_dgemv, при том что сами матрицы шли в разделе gsl_matrix_*, поиск нужных мне функций неполучился.

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

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

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

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

cvs-255 ★★★★★
() автор топика

День соплей

на ЛОРе

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

Хорошо когда вообще собирается и работает с версиями библиотек, отличных от тех, что стоят у авторов.

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

это я уже просек))

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

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

Ясен пень, если у тебя что-то будет вроде A*I*B*A^{-1}*I*C*B^{-1}*B…, то еще и результат может получиться «совершенно неожиданным» из-за ошибок округления (а уж если во float'ах считать, то совсем кирдык веселый будет).

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

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

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

Я тут тоже искал по scalapack'у. Не нашёл.

gag ★★★★★
()

scipy.org

Если хочется на си или фортране, то netlib.org

yvv ★★☆
()

гугл изнасиловал программиста

приходится руками программировать перемножение матриц

OMFG

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

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

Напиши систему сборки и отдай в апстрим. Какие проблемы?

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

Scalable LAPACK

Ну, звиняй: я про такое ни разу не слышал.

Eddy_Em ☆☆☆☆☆
()
Ответ на: гугл изнасиловал программиста от Manhunt

Вообще-то, это настолько элементарная операция, что быстрее сделать самому, нежели документацию читать. Для CPU это будет элементарнейший цикл в обертке навроде #pragma omp parallel for

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

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

Типичное велосепидорское мышление, чо.

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

Один раз пишешь функцию умножения матриц (это займет от силы минут 5), а потом пользуешься ею. Нежели каждый раз вспоминать, как там это в BLAS делается.

Фигасе:

  cblas_sgemm(CblasRowMajor,CblasNoTrans,CblasNoTrans,

              M,N,K,1.0,A,K,&B[0][0],N,0.0,C,N);

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

Да я про маленькие матрицы говорил с умножением в лоб. Всякая мелочевка (где-то так до 10Кх10К) очень даже шустро и велосипедами перемножается.

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

Да я про маленькие матрицы говорил с умножением в лоб.

Что, ты действительно можешь за 5 минут родить оптимизированную для эффективного использования процессорных кэшей и SIMD ассемблерную портянку и убедиться что она не вызывает ненужных приостановок конвейера? Эдик, осознай наконец, что ты болен — тяжело болен велосипедизмом.

Всякая мелочевка

Для всяких прототипов и мелюзги есть матлаб и компания, кодить подобное на Си — бездарная трата времени.

Manhunt ★★★★★
()

А вот все вы сами, господа, виноваты! Чмырите октав, питон, матлаб в кривости, медленности, или проприетарности. Рассказываете истории успеха как быстро все считается, когда метод написан на си, и как другие терпилы на октаве\матлабе\питоне ждут в 2-3 раза дольше вашего. Но ведь крайне редко нам важно, работает ли метод n секунд, или k*n секунд(разве что обработка видео, или огромные объемы данных). Тем более, если ОП сразу с бумаги решил написать метод на СИ, то это вообще плохо.

Ведь, математик который пытается применить/придумать какие-то новые методы, перед тем как запилит что-то работающее, сделает 10 разных прототипов и подходов к решению задачи. Делать все это на си --- просто извращение и убийство рабочего времени. (Конечно, может я такое чмо, и не умею писать на си).

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

Так что, видимо ОП больше математик, раз действительно решает задачу на листочке сначала И не знает о существовании BLAS и LAPACK(либо второкурсник). И мой совет: ust matlab or python. Cheers and good luck!)

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

и как другие терпилы на октаве\матлабе\питоне ждут в 2-3 раза дольше вашего

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

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

ну представь, что программа считается не 2 а 6 часов.

В ряде задач на этапе отладки можно уменьшить объем входных данных. Чтобы речь шла о 2 и 6 секундах, а не часах.

разницу видишь? А у меня в дальнейших кусках программы видимо такие времена и будут
в дальнейших ... видимо ... будут

«Преждевременная оптимизация — это корень всех бед». Когда такие времена реально будут, и по факту (а не в воображении!) причинят тебе неудобства, тогда и подумаешь о способах ускорения. Вполне возможно, что твое решение defective by design, и нуждается в коренной переделке, а вовсе не в оптимизациях. Зачем в них сейчас вкладываться?

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

ну представь, что программа считается не 2 а 6 часов.

Сколько часов ты потратишь на её разработку, и сколько часов она наработает, прежде чем будет выкинута на свалку истории?

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

Есть научная задача. Там нужно численно найти множество решений системы квадратных уравнений (с некоторым шагом, ибо множество на самом деле непрерывно), а затем для каждого решения провести дальнейшую кучу расчетов. При этом исходная система, как можно заметить, аналитически не решается. Потому как если последовательно выкидывать переменные, получаются уравнения степени > 4.

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

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

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

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