LINUX.ORG.RU

[Maxima] задание дифференциальных операторов

 


0

1

Кто-нибудь в курсе возможен ли сабж? В maple, например, можно делать так

laplace(f(x,y)):=diff(diff(f, x),x)+diff(diff(f, y),y)
laplace(sin(x)+cos(y)) # -> получаем правильный ответ

maxima такое не переваривает

help весь уже перечитал

★★★★★

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

А не корректней было бы задать в фунциональном виде?

Ну тоесть что-то типа

laplace(f_,t_):=Plus@@(D[D[f,#],#]&/@t);
laplace(Sin[x]+Cos[y],{x,y});

Это для Математики =)

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

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

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

Как-то сложно получается, даже сложнее чем в maple. А за математику вроде тоже деньги хотят?

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

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

То, что я привел для переменного числа координат. Если фиксированный набор арнументов {x,y}, то задание функции будет выглядеть как

laplace[f,{x,y}]:=D[D[f,x],x]+D[D[f,y],y];
Можно даже
laplace[f,x,y]:=D[D[f,x],x]+D[D[f,y],y];

В максиме не сильно будет отличаться, думаю. Просто сам с ней тоже не работал.

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

Ступил, так действительно почти работает. Только вот это не работает.

laplace(cos(x)*sin(x)+cos(2*y),x,y);

А вот это работает

f(x,y):=cos(x)*sin(x)+cos(2*y)
laplace(f,x,y);

Мелочь конечно, но неприятно.

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

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

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

А вот так работает

slapl((2*sin(lambda)*sin(2*phi)),phi,lambda);
      ^                        ^
      |________________________|
                   |
                Скобочки

Магия =)

anonymous
()

Ооо, я долго с этим сражался. Вот работающий вариант:

/* Definition */
D(f):=
  funmake('lambda,
          [['x], diff(f('x),'x)]);

/* Test */
D(lambda([x],x^2));

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

unanimous ★★★★★
()

Решено, всем спасибо. Но чую, что первое время придется сверяться с maple, так как поведение maxima порой неожиданно.

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