如何简化/扩展/应用模式到函数的参数

时间:2011-11-09 11:36:33

标签: wolfram-mathematica

(我做了一些改变......)

我经常想简化函数的参数,或者对它应用模式,例如。我想改变:

Exp[a(b+c)]

进入

Exp[a b + a c]

简单模式无济于事:

Sin[a(b+c)] /. Sin[aaa_] -> Sin[Expand[aaa]]

再次给出

Sin[a(b+c)]

但是,使用Simplify / Expand以外的功能似乎可以达到我的期望:

Sin[a (b + c)] /. Sin[aaa_] -> Sin[f[aaa]] 

给出

Sin[  f[a(b+c)]  ]

我通常的解决方案是使用2种模式并保持:

(Exp[a(b+c)] /. Exp[aaa_] -> Exp[Hold[  Expand[aaa]  ]] ) /. Hold[xxx_] -> xxx

导致

E^(a*b + a*c)

这种方法的缺点是代码变得比它需要的更复杂。

我的真实生活例子是:

ppp2 = 
 ( ppp1  
    /. { ExpIntegralEi[aaa_] -> 
           ExpIntegralEi[Hold[aaa /. { u2 -> 0, w2 -> 0, u3 -> x, w3 -> x}]], 
         Log[aaa_] -> 
           Log[Hold[aaa /. {u2 -> 0, w2 -> 0, u3 -> x, w3 -> x}]]
       }
 ) /.  Hold[xxx_] -> xxx;

其中ppp1是包含u2,w2,u3,w3等的长项。我想更改u,w2的值...仅在ExpIntegral和Log。

我的另一个解决方案是功能:

ExpandArgument[expr_, what_] := Module[{list},
  list = Extract[expr, Position[   expr, what[_]   ]];
  list = Map[Rule[#, what[Expand[   #[[1]]   ]]] &, list];
  Return[expr /. list]
]

我写的函数很容易推广,不仅可以使用Expand,还可以使用Simplify等等:

ApplyToArgument[expr_, ToWhat_, WhatFunction_] := Module[{list},
  list = Extract[expr, Position[   expr, ToWhat[_]   ]];
  list = Map[Rule[#, ToWhat[WhatFunction[   #[[1]]   ]]] &, list];
  Return[expr /. list]
]

例如:

ApplyToArgument[Sin[a (b + c)], Sin, Expand]

给出

Sin[a b + a c]

ApplyToArgument[Sin[a b + a c ], Sin, Simplify]

给出

Sin[a (b + c)]

此解决方案易于阅读,但在应用于多参数函数之前需要进行一些改进(我需要这些函数)。

我想我错过了mathematica中关于模式的基本内容......我应该如何将模式应用于函数的参数? (或简化,扩展等等)

非常感谢!

4 个答案:

答案 0 :(得分:13)

对于问题的第一部分,您可以考虑使用RuleDelayed

Sin[a (b + c)] /. Sin[aaa_] :> Sin[Expand[aaa]]

给出

Sin[a b + a c]

答案 1 :(得分:6)

使用:>代替->。使用->,立即评估右侧,然后才应用。当然,aaa的扩展仅提供aaa,因此对Sin[Expand[aaa]]的评估会给Sin[aaa],因此规则要求自行替换Sin的每个应用。那么你也不应该需要那些Hold结构。

在相关说明中:您可以将表达式传递给Hold[xxx_]->xxx,而不是应用规则ReleaseHold,例如ReleaseHold[Hold[1+1] /. 1->2]给出4。

答案 2 :(得分:2)

还可以考虑使用ExpandAll:

ExpandAll[Exp[a (b + c)]] // FullForm

会给:

Power[E, Plus[Times[a, b], Times[a, c]]]

(这会将Exp [...]变成E ^ ...虽然)

答案 3 :(得分:2)

这不是一个直接的答案(其他人提供),但对于这些类型的操作,代数操作调色板(Palettes - > Other)通常非常方便:

enter image description here

缺点是,与键入命令不同,此操​​作不会被“记录”并保存在笔记本中。