2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Извлечение слагаемых из символьных выражений.
Сообщение06.10.2016, 03:21 
Заслуженный участник


20/04/10
1878
Пусть $V$ символьное выражение, например $p(p-9)+9p^7-(p-8)^2$. Как можно извлечь слагаемые из произвольного $V$, используя Mathematica? Кажется, что самое простое это использование функций Length (для определения количества слагаемых) и Part (для извлечения нужного нам). Это действительно работает для выражений как в вышеописанном примере. Но если у нас $V=p(p-9)$, то функция Length возвращает $2$, a $Part[V,1]=-9+p$. Есть ли способ для произвольного $V$ извлекать именно слагаемые?

 Профиль  
                  
 
 Posted automatically
Сообщение06.10.2016, 03:26 


20/03/14
12041
 i  Тема перемещена из форума «Карантин» в форум «Околонаучный софт»


-- 06.10.2016, 05:26 --

lel0lel
Заголовок смените на информативный.

 Профиль  
                  
 
 Re: Извлечение слагаемых из символьных выражений.
Сообщение06.10.2016, 04:14 
Заслуженный участник


20/04/10
1878
Вопрос более неактуален. Решение в функции FullForm.

 Профиль  
                  
 
 Re: Извлечение слагаемых из символьных выражений.
Сообщение06.10.2016, 21:38 
Заслуженный участник


27/04/09
28128
lel0lel
Функция FullForm только по-другому показывает выражение, ничего особого с ним не делая:

Код:
> x (x - 4) y
> FullForm[%]
(-4 + x) x y
Times[Plus[-4, x], x, y]

Чтобы вытащить слагаемые, сначала надо привести выражение к виду Plus[...]. В простых случаях для этого сгодятся Expand и/или Apart (см. справку, что каждая делает).

 Профиль  
                  
 
 Re: Извлечение слагаемых из символьных выражений.
Сообщение06.10.2016, 23:31 
Заслуженный участник


20/04/10
1878
Дело в том, что мне требуется извлекать слагаемые из того выражения, которое имеется изначально. А приведенные вами функции его преобразуют, например раскрывая скобки. Поэтому функция FullForm подходит как нельзя лучше для определения имеются ли в выражении слагаемые вообще или же это произведение.

 Профиль  
                  
 
 Re: Извлечение слагаемых из символьных выражений.
Сообщение07.10.2016, 00:03 
Заслуженный участник


27/04/09
28128
lel0lel в сообщении #1157895 писал(а):
Дело в том, что мне требуется извлекать слагаемые из того выражения, которое имеется изначально.
А, ну если так, тогда надо просто его «заморозить» с помощью Hold (в более сложном случае можно HoldComplete, см. снова документацию, когда). Ещё можно использовать Unevaluated, если это выражение встречается всего раз (иначе его придётся копипастить).

Код:
> e = Hold[(1 + 2) (3 + 4)]
> e[[1, 2, 1]]    (* первая 1 — учитываем обёрнутость в Hold *)
> Unevaluated[(1 + 2) (3 + 4)][[2, 1]]
Hold[(1 + 2) (3 + 4)]
3
3

Можно модифицировать замороженое и отпустить:

Код:
> e[[1, 2, 1]] = 10; e
> ReleaseHold[e]
Hold[(1 + 2) (10 + 4)]
42


-- Пт окт 07, 2016 02:07:40 --

Наконец, если вдруг нужно будет отображать замороженное выражение без Hold[...], можно вместо него использовать HoldForm. Работает точно так же, но на выводе не показывается:

Код:
> HoldForm[(1 + 2) (3 + 4)]
> %[[1, 2, 1]]
(1 + 2) (3 + 4)
3

 Профиль  
                  
 
 Re: Извлечение слагаемых из символьных выражений.
Сообщение07.10.2016, 00:20 
Заслуженный участник


20/04/10
1878
Спасибо. Мне это помогло разобраться в действиях Mathematica.

 Профиль  
                  
 
 Re: Извлечение слагаемых из символьных выражений.
Сообщение07.10.2016, 06:04 
Заслуженный участник


25/02/11
1797
Извлекать части выражения нужного вида можно командой Cases. Например,

Cases[Unevaluated[p (p - 9) + 9 p^7 - (p - (8 + 2))^2], Plus[a_, b__] -> HoldForm[Plus[a, b]], {0, \[Infinity]}]

выдаст все выражения с заголовком Plus (с двумя и более аргументами):

{p-9,8+2,p-(8+2),p (p-9)+9 p^7-(p-(8+2))^2}

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

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



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

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


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

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