2014 dxdy logo

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

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




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


20/04/10
1876
Пусть $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
1876
Вопрос более неактуален. Решение в функции 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
1876
Дело в том, что мне требуется извлекать слагаемые из того выражения, которое имеется изначально. А приведенные вами функции его преобразуют, например раскрывая скобки. Поэтому функция 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
1876
Спасибо. Мне это помогло разобраться в действиях 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, Супермодераторы



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

Сейчас этот форум просматривают: DariaRychenkova


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

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