Как извлечь определенные части уравнения в MuPAD или Maple

У меня есть MuPAD и Maple, и я хотел бы сделать следующее с помощью одного из этих программ:

  • У меня есть уравнение, содержащее несколько косинусов с разными амплитудами и разными аргументами, как показано на рисунке ниже в первой (синей) строке.
  • Я хочу извлечь только те косинусы, которые содержат хотя бы аргумент «+ a tb t» (так что «+ a tb t + alpha» тоже в порядке) - см. второй (синий ряд).
  • Я хочу отобразить сумму амплитуд этого конкретного косинуса - см. Третью (красную) строку.

На втором рисунке показан реальный пример. ПримерExample2


person Semjon Mössinger    schedule 05.12.2013    source источник
comment
Это, конечно, выполнимо в Maple, но прежде чем я отвечу, как, мне нужно знать, отображается ли какой-либо из аргументов, например, как alpha + (a-b)*t. А как насчет cos(b*t-a*t), который равен cos(a*t-b*t), потому что косинус - четная функция?   -  person Carl Love    schedule 05.12.2013
comment
Мне также нужно знать, будет ли когда-либо a*t или b*t вложенными в аргумент косинуса, например cos(1/(a*t-b*t) + alpha).   -  person Carl Love    schedule 05.12.2013
comment
Я добавил реальный пример, который не упрощен как первый пример. cos(b*t-a*t) может произойти, но cos(1/(a*t-b*t)) не произойдет - как показано на новом рисунке выше. Кстати, я работаю над решением, используя регулярные выражения. Но решение с кленом все же поможет.   -  person Semjon Mössinger    schedule 06.12.2013


Ответы (1)


Допустим, ваше длинное выражение называется expr. Тогда сделай это

TypeTools:-AddType(
     MyCos,
     cos(satisfies(x-> x::`+` and {a*t, -b*t} subset {op(x)} or x = b*t-a*t))
): 

subex:= select(T-> T::MyCos or T::`*` and membertype(MyCos, {op(T)}), expr);

Теперь subex - ваше желаемое подвыражение. Если вы хотите сложить коэффициенты, просто сделайте eval(subex, cos= 1).

Обратите внимание, что при этом не будут найдены частично факторизованные аргументы, такие как (a-b)*t+alpha. Если вам нужно их найти, дайте мне знать.

person Carl Love    schedule 06.12.2013
comment
@Ergodicity: предложенное вами изменение было правильным. Извините, что у меня не было представителя, необходимого для отмены отклонения ваших правок. - person Carl Love; 06.12.2013