2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Использование в работе системы символьных вычислений Maxima
Сообщение25.07.2023, 13:56 


22/12/11
68
Для преобразования выражений периодически использую 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 
Заслуженный участник


18/09/21
1772
После
Используется синтаксис Matlab M
ss:subst(G(x),y(x),eq);
можно сделать
Используется синтаксис Matlab M
ev(ss, nouns);

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

 Профиль  
                  
 
 Re: Использование в работе системы символьных вычислений Maxima
Сообщение26.07.2023, 00:32 


22/12/11
68
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 
Заслуженный участник


18/09/21
1772
Почитайте документацию.
Там для '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 


22/12/11
68
Такой вопрос возник при работе с 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 
Аватара пользователя


22/11/22
835
Код:
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 


22/12/11
68
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 
Аватара пользователя


22/11/22
835
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 
Аватара пользователя


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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group