wolfram-mathematica - 如何简化/扩展/将模式应用于函数的参数

标签 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 中遗漏了一些关于模式的基本知识......我应该如何将模式应用于函数的参数? (或简化,扩展等)

非常感谢!

最佳答案

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

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


Sin[a b + a c]

关于wolfram-mathematica - 如何简化/扩展/将模式应用于函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8064438/

相关文章:

wolfram-mathematica - 将绘图选项保存在列表中

if-statement - Mathematica If-then 与 Implies

wolfram-mathematica - 分解为幂的 GCD

matlab - 如何在 Matlab 中调用 Mathematica 函数?

在 Mathematica 中选择圆形区域内的点

wolfram-mathematica - 删除保留外观顺序的重复列表元素

wolfram-mathematica - 为什么 Extract 会在结果中添加额外的 {} 以及删除它们的最佳方法

wolfram-mathematica - Mathematica Interpolation[] 在超出范围时保持不变

wolfram-mathematica - 在 mathematica 中创建符号正交矩阵

wolfram-mathematica - 为出版物导出图形 : how to achieve consistent line thicknesses in plot elements?