2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Использование в работе системы символьных вычислений Maxima
Сообщение25.07.2023, 13:56 
Для преобразования выражений периодически использую CAS систему maxima. Предлагаю в этой теме размещать вопросы по ней, которые не удалось найти в руководстве пользователя или в интернете.

Начну со следующего вопроса:
допустим, мы хотим проверить точность квазиклассического решения для ОДУ 2 порядка простейшего вида:
у нас есть уравнение

eq:diff(y(x),x,2)+k(x)^2*y(x);

я хочу подставить в него выражение
f(x):=integrate(k(x),x);
G(x):=sin(f(x))/k(x)^(1/2);

Подставляю:
ss:subst(G(x),y(x),eq);

Подстановка проходит, но производная не вычисляется, т.к. в ответе перед соответствующим выражением стоит оператор ' :
'diff(sin(integrate(k(x),x))/sqrt(k(x)),x,2)+k(x)^(3/2)*sin(integrate(k(x),x))

Если я руками уберу данный оператор (') в начале строки, то все вычислится.
Однако как убрать данный оператор (') не руками, а командными средствами ?

Применение ''ss или ss,eval ничего не дает...
В руководстве maxima не смог найти, как это сделать.

 
 
 
 Re: Использование в работе системы символьных вычислений Maxima
Сообщение25.07.2023, 15:50 
После
Используется синтаксис Matlab M
ss:subst(G(x),y(x),eq);
можно сделать
Используется синтаксис Matlab M
ev(ss, nouns);

Это было нужно?

 
 
 
 Re: Использование в работе системы символьных вычислений Maxima
Сообщение26.07.2023, 00:32 
zykov в сообщении #1602422 писал(а):
После
Используется синтаксис Matlab M
ss:subst(G(x),y(x),eq);
можно сделать
Используется синтаксис Matlab M
ev(ss, nouns);

Это было нужно?

Да, спасибо, заработало!
Только непонятно, в чем тут логика, и почему просто ev(%) или %,eval или ''% не работает ...(из руководства по языку maxima это не очевидно).

 
 
 
 Re: Использование в работе системы символьных вычислений Maxima
Сообщение26.07.2023, 12:23 
Почитайте документацию.
Там для 'ev' есть разные опции.
В частности
Цитата:
'nouns' causes the evaluation of noun forms (typically unevaluated functions such as 'integrate or 'diff) in expr


-- 26.07.2023, 12:44 --

Кстати, можно было ещё вот так написать
Используется синтаксис Matlab M
ss:subst(G(x),y(x),eq), nouns, eval;

 
 
 
 Re: Использование в работе системы символьных вычислений Maxima
Сообщение21.04.2025, 03:00 
Такой вопрос возник при работе с Maxima: я хочу оформить как функцию результат некоторых математических преобразований. Например, взятие нескольких первых членов ряда Тейлора. Но почему-то это не работает!
Например, при попытке определить такую функцию:

Nt:4;
taylor(-log(cos(x)), x, 0,Nt);tmp:sum(part(%,[i]),i,1,Nt/2);
ft(x):=tmp;

- вместо зависящей от x функции Максима определяет ft(x) просто как переменную tmp,
равную в данном случае x^4/12+x^2/2,
причем для любых значений x, скажем, если написать ft(1), то мы получаем опять x^4/12+x^2/2, вместо нужного значения 10/3 !

Подскажите, что я делаю неправильно, и как нужно исправить код, чтобы получить нужную функцию?
Скажем, в Maple, для подобных целей есть операторы -> и unapply, и их действие различается. Но в Maxima я не нашел нужного способа задания функций в руководстве...

 
 
 
 Re: Использование в работе системы символьных вычислений Maxima
Сообщение21.04.2025, 04:12 
Аватара пользователя
Код:
Nt:4;
taylor(-log(cos(x)), x, 0,Nt); tmp: sum(part(%,[i]),i,1,Nt/2);
ft(x):= ''tmp;
ft(1);

10/3 все едино не получится.

 
 
 
 Re: Использование в работе системы символьных вычислений Maxima
Сообщение21.04.2025, 16:09 
Combat Zone в сообщении #1683171 писал(а):
Код:
Nt:4;
taylor(-log(cos(x)), x, 0,Nt); tmp: sum(part(%,[i]),i,1,Nt/2);
ft(x):= ''tmp;
ft(1);

10/3 все едино не получится.


Спасибо, это то, что нужно. Выше описка - я имел в виду ft(2), а не ft(1).

Интересно, что при задании в виде функции результата интегрирования данного ряда оператор '' уже почему-то не работает, и требуется применение функции define:

Nt:8;
taylor(-log(cos(x)), x, 0,Nt); tmp:sum(part(%,[i]),i,1,Nt/2);
FT(x):=''tmp;
define(IFT(x),integrate(FT(t),t,0,x));

 
 
 
 Re: Использование в работе системы символьных вычислений Maxima
Сообщение21.04.2025, 19:42 
Аватара пользователя
bme
Как сделаете, так и будет. Нет препятствий и для другого определения функции. Бывает, что они есть. Но это не тот случай.
Код:
Nt:8;
taylor(-log(cos(x)), x, 0,Nt); tmp:sum(part(%,[i]),i,1,Nt/2);
FT(x):=''tmp;
IFT(x):=integrate(FT(t),t,0,x);
''IFT(x);

 
 
 
 Re: Использование в работе системы символьных вычислений Maxima
Сообщение22.04.2025, 07:10 
Аватара пользователя
bme
Еще скажу я вам (хоть и не спрашивали), что вы как-то очень топорно пытаетесь многочлен Тейлора собрать. Есть куча команд, которые позволили бы это сделать без такого надрыва (ну part - это все-таки слишком, по кусочкам составлять формулу).
Например:
Код:
t: taylor(-log(cos(x)),x,0,6)$ /*разложение в ряд до 6 степени*/
f(x):=ratdisrep (t)$ /*отбрасывание хвоста - остаточного члена */
f(x); /*вывод значения функции */

 
 
 [ Сообщений: 9 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group