LINUX.ORG.RU

Вышла система компьютерной алгебры Maxima 5.13.0


0

0

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

>>> Подробности

anonymous

Проверено: Shaman007 ()
Ответ на: комментарий от anonymous

>Это ваша максима не умеет и сотой части того, что делает Maple. Будь она хоть трижды гпл, математикам на это плевать

Математики занимающиеся построением моделей часто строят модель с нуля. И тонны Maple-овских библиотек частенько болтаются без надобности. Их и освоить не так просто.

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

Будучи студентом, я освоил практически все, за исключением групп Ли и тензоров.

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

> ... особенно, если это ничто написано на лиспе.

Клоуны подтянулись...

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


> Пользую Математику 6. Её ничто не заменит, особенно, если это ничто
> написано на лиспе.

А на чем сама Mathematica написана, ась? И на что так смахивает ее
убогий недоязычок?

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

> А на чем сама Mathematica написана, ась? И на что так смахивает ее убогий недоязычок?

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

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

> Ну, во-первых, не убогий недоязычок, а очень удобный язык для своих задач. А во-вторых, написана Математика в основном на C с собственными расширениями.

Как я понимаю, намёк был на lisp, на который встроенный язык Математики действительно похож.

2Dselect: пишите уж тогда "убогонький недоязычок", дабы не отступать от канона :)

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

> Как я понимаю, намёк был на lisp, на который встроенный язык Математики действительно похож.

А вот если бы лиспы давели до ума, приделали бы нормальные инфиксные операторы, M-выражения и другие плюшки, как в Математике, может, ими бы кто-то и пользовался. :) А так, хоть сорок раз скажи «скобки рулят, синтаксис сасёт», всё равно практика показывает обратное.

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

> А вот если бы лиспы давели до ума, приделали бы нормальные инфиксные операторы, M-выражения и другие плюшки, как в Математике, может, ими бы кто-то и пользовался. :) А так, хоть сорок раз скажи «скобки рулят, синтаксис сасёт», всё равно практика показывает обратное.

Ну как сказать. Что в maxime, что в axiom - "нормальная инфиксная нотация", хоть и писаны они на lisp'е. Так что лучше спросить опять-таки автора этих слов, что он имел в виду,говоря про "недоязычок".

Да и кроме того, тенденции развития в сфере IT вот уже лет 30 (а может и более) - деланье всего более понятным для "быдла", с соответствующей потерей гибкости профессионального инструмента.

ЗЫ Два примера:

1. математика берет интеграл от sqrt(x+sqrt(x^2+a^2))/x, где a - действительное число, отличное от 0?

2. математика берет интеграл от exp(atan(x))/(1+x^2)^3?

ЗЗЫ Кстати, а что такое М-выражения?

annoynimous ★★★★★
()
Ответ на: комментарий от ero-sennin

> Mathematica 5 первый интеграл берёт, второй нет.

ответ для второго примера (24*x^4 + 24*x^3 + 60*x^2 + 44*x + 41)/85/(x^2+1)^2*exp(arctan(x)). Выдает только axiom и древняя (3я) версия мэпла. Хотя в последнем, за давностью лет, я уж сам сомневаюсь :)

Проверьте только, какой синтаксис у функции обратной тангенсу: а то есть и такие грабли. Может, всё возьмется.

За ссылку спасибо, однако как-то мало что стало яснее :)

annoynimous ★★★★★
()
Ответ на: комментарий от ero-sennin

> А вот если бы лиспы давели до ума, приделали бы нормальные инфиксные
> операторы, M-выражения

Не нужны они там, иначе получится такое же г...., как и Math....

> и другие плюшки, как в Математике,

Какие? Бестиповые глобальные переменные? Динамическая область видимости
вместо лексической? Update[]? Да ну его в пень!

> может, ими бы кто-то и пользовался. :)

А ими и так пользуются, даже те, кто об этом не знает. :)

Dselect ★★★
()
Ответ на: комментарий от ero-sennin

> Ну, во-первых, не убогий недоязычок, а очень удобный язык для своих задач.

Не просто убогий, а отстойный. При Сталине его авторам дали бы 10 лет
лагерей за одни только глобальные переменные, Clear[] и Update[].

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

> Проверьте только, какой синтаксис у функции обратной тангенсу: а то есть и такие грабли. Может, всё возьмется.

Действительно, арктангенс в Математике называется ArcTan, всё взялось. :)

> За ссылку спасибо, однако как-то мало что стало яснее :)

Да всё там очень просто. Для (f x y) вводится эквивалентная запись f[x, y], чисто для удобочитаемости. В Математике пошли дальше и придумали кучу всякого другого альтернативного синтаксиса, чтобы от скобок в глазах не рябило. Но при этом любое выражение представимо в виде комбинации М-выражений (а значит, и S-выражений).

http://img170.imageshack.us/img170/64/mathematicaii5.png

ero-sennin ★★
()
Ответ на: комментарий от Dselect

> При Сталине его авторам дали бы 10 лет лагерей за одни только глобальные переменные, Clear[] и Update[].

Тебя никто не заставляет этим пользоваться. Можешь писать в чисто функциональном стиле.

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

> Тебя никто не заставляет этим пользоваться. Можешь писать в чисто
> функциональном стиле.

КАК? Переменные все равно глобальные. И б...ский dynamic scoping тоже
никак не выключишь. И типизацию не прикрутишь.


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

> Ну как сказать. Что в maxime, что в axiom - "нормальная инфиксная нотация",
> хоть и писаны они на lisp'е.

В maxime можно напрямую пользовать LISP. :lisp -- и вперед, с песней. Аналогично
с axiom. К сожалению, не совсем (совсем не?) стандартный LISP, но это лучше, чем
ничего.

> Так что лучше спросить опять-таки автора этих слов, что он имел в виду, говоря про
> "недоязычок".

Еще раз повторить? Глобальные переменные (все!), динамическая область видимости,
отсутствие типизации, придурковатая семантика (чем отличается a := 1; a = 1),
угребищный синтаксис (даже sed -- и тот не такой дурной).

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

> И б...ский dynamic scoping тоже никак не выключишь.

В сад.

2.7.7 Blocks Compared with Modules

One of the main ways to ensure that different parts of a program do not interfere is to give their variables only a certain scope. Mathematica provides two basic mechanisms for limiting the scope of variables: modules and blocks.

In writing actual programs, modules are far more common than blocks. When scoping is needed in interactive calculations, however, blocks are often convenient.

Module[vars, body] — lexical scoping

Block[vars, body] — dynamic scoping

ero-sennin ★★
()
Ответ на: комментарий от Dselect

> И типизацию не прикрутишь.

Обратно в сад.

2.3.4 Specifying Types of Expression in Patterns

You can tell a lot about what type of expression something is by looking at its head. Thus, for example, an integer has head Integer, while a list has head List.

In a pattern, _h and x_h represent expressions that are constrained to have head h. Thus, for example, _Integer represents any integer, while _List represents any list.

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

Именно что в сад!

> Module[vars, body] lexical scoping

Фига там.

jmath:$ Module[{x, y}, a = x+y;];
jmath:$ a
jmath:$ x$1 + y$1

В сад с таким lexical scoping.

Dselect ★★★
()
Ответ на: комментарий от ero-sennin

ох, сами же напросились!

> You can tell a lot about what type of expression something is by looking
> at its head.

Угу, а как с помощью такой "типизации" проверить, что выражение -- многочлен
от одной переменной? Рациональная функция?

> In a pattern, _h and x_h represent expressions that are constrained to
> have head h. Thus, for example, _Integer represents any integer, while
> _List represents any list.

А какого типа прелесть вида x + {a, b, c}?

Dselect ★★★
()
Ответ на: Именно что в сад! от Dselect

> Фига там.

Правильно, надо так:

Mathematica 5.2 for Linux x86 (64 bit)
Copyright 1988-2005 Wolfram Research, Inc.

In[1]:= Module[{a,x,y}, a=x+y]

Out[1]= x$14 + y$14

In[2]:= a

Out[2]= a

Или ты что-то другое хотел получить? :)

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

ero-sennin ★★
()
Ответ на: ох, сами же напросились! от Dselect

> Угу, а как с помощью такой "типизации" проверить, что выражение -- многочлен от одной переменной? Рациональная функция?

Почитай мануал, там про pattern matching целая глава. Или ты как школьник, любишь, когда тебе умный дядя всё пересказывает простым языком? :P

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

Долгая память хуже сифилиса

> > Module[{x, y}, a = x+y; ];
> > a

> Правильно, надо так:

> In[1]:= Module[{a,x,y}, a=x+y]


Вещи должны называться своими именами. Сказано "lexical scope" -- значит он
таки и должен быть. А то, что у них -- это караул какой-то.

А его нужно устраивать руками.
Во-вторых, в моем примере я хотел бы получить compile error :)

> Или ты что-то другое хотел получить? :)

Что-нибудь в таком духе:

(let ((x 1) (y 2)) (set! a (+ x y)))

Backtrace:
In current input:
3: 0* (let ((x 1) (y 2)) (set! a (+ x y)))
3: 1 (set! a (+ x y))

<unnamed port>:3:20: In expression (set! a (+ x y)):
<unnamed port>:3:20: Unbound variable: a
ABORT: (unbound-variable)


> Out[1]= x$14 + y$14

> Ну я согласен, несколько через жопу сделано, но каким боком тебе
> это может помешать, если не использовать символ $ в именах?

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


Dselect ★★★
()
Ответ на: комментарий от ero-sennin

еще про типизацию

> Почитай мануал, там про pattern matching целая глава.

Сам факт того, что для определения _типа_ выражения нужны какие-то
нетривиальные действия, говорит о том, что типизации в языке нет.
А за использование для этого pattern matching (который как минимум NP
complete) нужно отправлять в принудительном порядке в психиатрическую
клинику -- чтоб мозги вправили.

Dselect ★★★
()
Ответ на: еще про типизацию от Dselect

> Сам факт того, что для определения _типа_ выражения нужны какие-то нетривиальные действия, говорит о том, что типизации в языке нет.

Да есть она там.

In[1]:= Head[42]

Out[1]= Integer

In[2]:= Head[{1,2,3}]

Out[2]= List

In[3]:= Head[Head]

Out[3]= Symbol

Ты лучше объясни мне, определять типы для тебя самоцель? Приведи пример жизненной задачи, которая тяжело решается на Математике, но легко решается на твоём любимом языке.

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

> Да есть она там.

Нету:

In[1]:= Head[x+x^2]
Out[1]=
Plus
In[2]:= Head[Cos[y]+Exp[x]]
Out[2]=
Plus

Что многочлен, что трансцендентное выражение -- а все Plus.

> Ты лучше объясни мне, определять типы для тебя самоцель?

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

> Приведи пример жизненной задачи, которая тяжело решается на Математике,

Все, что сложнее hello world.

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

а разве отределение "типов" математических функций имеет отношение к типизации в языках ? для таких вещей нужна отдельная функция... где это вабще реализовано ?

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

> Все, что сложнее hello world.

Спасибо, слив засчитан.

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