我有一个非常复杂的mathematica表达式,我想通过使用一个新的,可能无量纲的参数来简化.
我的表达的一个例子是:
K=a*b*t/((t+f)c*d);
Run Code Online (Sandbox Code Playgroud)
(实际表达式是巨大的,数千个字符).我想用p替换所有出现的表达式t /(t + f)
p=t/(t+f);
Run Code Online (Sandbox Code Playgroud)
这里的目标是找到一个替代品,以便所有的t和f都被p代替.在这种情况下,替换p是一个无量纲化的参数,因此它似乎是一个很好的候选替代品.
我无法弄清楚如何在mathematica中做到这一点(或者如果可能的话).我试过了:
eq1= K==a*b*t/((t+f)c*d);
eq2= p==t/(t+f);
Solve[{eq1,eq2},K]
Run Code Online (Sandbox Code Playgroud)
毫不奇怪,这不起作用.如果有一种方法可以强制它用p,a,b,c,d来解决K ,这可能会起作用,但我也无法弄清楚如何做到这一点.思考?
编辑#1(11/10/11 - 1:30)[删除以简化]
好的,新机智.我采用了p = ton /(ton + toff)并将p乘以几个表达式.我知道p可以完全消除.新表达式(以p表示)是
testEQ = A B p + A^2 B p^2 + (A+B)p^3;
Run Code Online (Sandbox Code Playgroud)
然后我替换p,并调用(正常)FullSimplify,给我这个表达式.
testEQ2= (ton (B ton^2 + A^2 B ton (toff + ton) +
A (ton^2 + B (toff + ton)^2)))/(toff + ton)^3;
Run Code Online (Sandbox Code Playgroud)
最后,我尝试了下面的所有建议,除了最后一个(不知道它是如何工作的!)
只有消除选项有效.所以我想我会从现在开始尝试这种方法.谢谢.
EQ1 = a1 == (ton (B ton^2 + A^2 B ton (toff + ton) +
A (ton^2 …Run Code Online (Sandbox Code Playgroud) 我在使用时遇到了一些奇怪的行为GroebnerBasis.在m1下面,我使用希腊字母作为我的变量,在里面m2,我使用了拉丁字母.它们都没有与之相关的规则.为什么根据我选择的变量得到截然不同的答案?

Clear["Global`*"]
g = Module[{x},
x /. Solve[
z - x (1 - b -
b x ( (a (3 - 2 a (1 + x)))/(1 - 3 a x + 2 a^2 x^2))) == 0,
x]][[3]];
m1 = First@GroebnerBasis[\[Kappa] - g, z]
m2 = First@GroebnerBasis[k - g, z]
Run Code Online (Sandbox Code Playgroud)
正如belisarius所指出的,我的使用GroebnerBasis并不完全正确,因为它需要多项式输入,而我的不是.这个由复制意大利面引入的错误直到现在都没有引起注意,因为当我m1从上面使用其余的代码时,我得到了我所期望的答案.但是,我并不完全相信这是一种不合理的用法.考虑以下示例:
x = (-b+Sqrt[b^2-4 a c])/2a;
p = First@GroebnerBasis[k - x,{a,b,c}]; (*get relation or cover for …Run Code Online (Sandbox Code Playgroud) 我在Mathematica中有这个表达式:
(a^2 (alpha + beta)^2)/(b^2 + c^2) + (a (alpha + beta))/(b^2 + c^2) + 1
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,表达式中有几个子表达式在整个表达式中重复出现.
我希望能够更换a/(b^2+c^2)使用d和alpha+beta用gamma.
最后的表达应该是:
1+d*gamma+a*d*gamma^2
Run Code Online (Sandbox Code Playgroud)
我有更复杂的表达方式,能够做到这一点将大大简化我的工作.
我试过谷歌搜索这个问题,我只找到使用FactorTerms和ReplaceRepeated的答案,但不能一致地工作,并且对于像这样的更复杂的表达.我希望有人在这里有答案.