请教一个问题,如何实现函数代换?
mathematica吧
全部回复
仅看楼主
level 12
yzhzeng 楼主
准新手,不知道怎么描述问题才能有效搜索,所以只好提问!
已知一个函数 f(x,y,z)的表达式,比如 f(x,y,z)=1/x + y^2 + z
另外推得一个公式 g(a,b,c,x,y,z)= (a+b)/x + (a+b) y^2 + (a+b) z + c^7+, 内部肯定包含了f(x,y,z)的表达式,其中(a+b)是个复杂表达式,请问有什么办法 将g 代换成下列形式:
g(a,b,c, x, y, z) = (a+b) f(x,y,z) + c^7
说明: 我是期望能够保持 f(x,y,z), 做了这样的反向代换,以简化整个表达式。
(本人准新手,基本操作了解,对mathematica缺少整体了解)
请赐教!
2023年09月01日 01点09分 1
level 8
我也一直有这个问题,之前想到一个,不过大概只能解决比较简单的式子。
2023年09月01日 04点09分 2
谢谢帅哥!对于新手来说,每一点提示都非常重要!
2023年09月02日 10点09分
吧务
level 12
可以试试FullSimplify+Assumptions,不确定对更复杂的表达式能不能生效,但至少你这个例子还是可以的
FullSimplify[(a + b)/x + (a + b) y^2 + (a + b) z + c^7,
Assumptions -> {f[x, y, z] == 1/x + y^2 + z}]
2023年09月01日 13点09分 3
谢谢版主指点!^_^,美好的未来从点点滴滴开始[大拇指]
2023年09月02日 10点09分
吧务
level 15
同样不保证对复杂例子能生效:
Collect[(a + b)/x + (a + b) y^2 + (a + b) z + c^7 /. a -> apb - b, apb(*,#/._->f[x,y,
z]&*)] /. apb -> a + b
2023年09月02日 00点09分 4
谢谢版主指点!^_^,美好的未来从点点滴滴开始[大拇指]
2023年09月02日 10点09分
我的期望是获得:c^7+(a+b)*f[x,y,z][汗]
2023年09月04日 06点09分
@yzhzeng ……看到我代码里的注解了没。
2023年10月07日 04点10分
level 12
yzhzeng 楼主
@xzcyr @无影东瓜 @qflwq
三位大佬,我没有说清楚,我的期望是获得:c^7+(a+b)*f[x,y,z][汗]
也就是获得换元效果,但自变量跟随变化,只有这样才能得到化简效果啊!
2023年09月04日 06点09分 5
你是说希望代换后 f 是个函数?直接/.f->f[x,y,z]不行吗[啊]
2023年09月04日 12点09分
已经定义了f, hold不住,所以那里实际上是展开的f
2023年09月04日 23点09分
@qflwq 回复 qflwq :回复 qflwq :如果不先定义f,则代换是成立的,不过我的想法是在根据几个预定义的f函数,自动对比不同结果并进行代换,是否能用wolfram语言实现?
2023年09月04日 23点09分
@yzhzeng ReplaceAll(/.)是支持多种替换的,所以写成/.{{f->f1}, {f->f2},{f->f3}}应该能满足你的需求。f1,f2,f3可预先定义。
2023年09月04日 23点09分
level 8
就是自定义函数啦[哈哈]
tuiLi[rhs_] :=
Block[{g, grhs = (a + b)/x + (a + b) y^2 + (a + b) z + c^7},
Cases[Reduce[{f == rhs, g == grhs}, {f, g}],
x_Equal /; x[[1]] == g] // Simplify // First]
2023年09月05日 02点09分 6
感谢,我学习一下!
2023年09月05日 04点09分
1