ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
21 июля
804945 Топик полностью
Ксения (28.12.2017 06:42 - 06:50, просмотров: 197) ответил Evgeny_CD на [Sage SageMath] - очень мощный математический пакет, основанный на Python. Позиционируется как открытая альтернатива Magma, Maple, Mathematica, и MATLAB. Идет на всех платформах (в свежей версии допилили поддержку Windows).
У меня впечатление как от ... Волков-командера после Нортон-командера. :) Идейный плагиат, но с отличием в худшую сторону. Конечно, отзыв написать я не готова, т.к. все возможности новорожденного проекта не испытывала, как прочем, и в отношении MATLAB'а и прочих мат-пакетов я тоже не эрудит. Однако есть узкая область, в которой я могу провести сравнение достаточно квалифицированно - это область матричной/линейной алгебры, где я не только пользовалась МАТLAB'ом и интересовалась возможностями прочих пакетов на эту тему (SciLab, Octave, R, Armadillo, DAAL и пр.), но и писала свой (и все еще продолжаю писать, в последний год переводя его на x64-кодировку). Тем не менее разница здесь есть и значительная - авторы мат-пакетов преследуют цель, как можно шире охватить все области применения математики, тогда как я боролась исключительно за скорость вычислений, зачастую переходя на ассемблер там, где другими средствами повысить скорость вычислений было нельзя. Отсюда же у меня интерес к AVX различных версий и прочим аппаратным возможностям процессоров по части вычислений с двойной точностью. Так вот SageMath плох прежде всего тем, что скуден, как язык, а представляет собой библиотеку функций, назначение которых знает разве что только сам автор. Причем читать документацию на этот счет малопродуктивно, т.к. пользователь обычно не знает, что ему в ней искать, а тем паче в случаях, когда все функции отсортированы по алфавиту. Т.е. это по сути не мат-пакет, а просто библиотека функций, которую в удачном случае можно было бы пришпандорить к любому языку, хоть к Фортрану или Алголу, т.к. какого-то явного родства с языком здесь не просматривается. Например, в SageMath, чтобы умножить матрицу на вектор используется традиционная запись A * x Но как только требуется их умножить в обратном порядке, то приходится вызывать функцию матричного класса: A.умножить_слева_на(x) Ну куда это годится? Нормально было бы, если бы левое умножение выглядело так же, как и правое: x * A т.е. если хочется умножить слева, то в этом же порядке следует располагать сомножители. А если перестановке мешает размерность, то делать необходимое транспонирование на лету: x * A' Тогда как в SageMath и для транспонирования матрицы нужно вызывать функцию в явном виде: A.Transpose() Почему это так? Да только потому, что автор пакета остался в рамках возможностей языка Pyton, к которому не смог даже отнестись творчески. Тогда как я, например, к языку C++ творчески отнеслась :), переопределив в классах матриц и векторов редко используемый оператор тильда (~), на операцию транспонирования. Т.к. у меня умножение слева выглядит так x * ~A или так: ~x * A в зависимости от того, как хочется расположить результат - горизонтально или вертикально. Ну и конечно же в подобных случаях явного траспонирования матрицы я не произвожу (для скоростных вычислений это слишком накладно), а просто меняю порядок умножение элементов в этой матрице на альтернативный, ничего в ней реально не перемещая. Но в целом у меня те же трудности, что и у автора SageMath, только он привязан к своему Питону, а я к своему C++. Тем не менее, он претендует на универсальность, тогда как я на это не претендую. И поэтому этот аспект может быть отнесен к существенным недостаткам этого пакета, ибо до пакета он по сути не дорос, все еще оставаясь на уровне библиотеки. Тогда как я ни на что большее, чем библиотеку, никогда не претендовала.