给出表达式(多项式或一般的任何等式),例如
a s^2+b = 0
我想解决s ^ 2,得到s ^ 2 = -b / a。我们都知道,不能只写
Solve[eq==0,s^2]
因为s ^ 2不是'变量'。只有s是'变量'。所以我所做的就是
eq = a s^2+b;
sol = First@Solve[eq==0/.s^2->z,z];
z/.sol
-(b/a)
我想知道是否有办法在没有中间变量替换的情况下执行上述操作? 我尝试了很多命令,但没有成功(减少,收集,消除,因素等等。)。
感谢 --Nasser
答案 0 :(得分:3)
一种方法是求解s
,然后将其平方......
eq=a s^2+b;
sol=#^2 &@ (s/.Solve[eq==0,s])//DeleteDuplicates
Out[1]= {-(b/a)}
答案 1 :(得分:2)
您可以使用Notation package,但会导致其他问题。 所以这是你原来的等式:
In[1]:= Solve[b + a s^2 == 0, s^2]
During evaluation of In[1]:= Solve::ivar: s^2 is not a valid variable. >>
Out[1]= Solve[b + a s^2 == 0, s^2]
现在Symbolize
s ^ 2,以便普通的Mathematica评估者像对待任何其他符号一样对待它
In[2]:= Needs["Notation`"]
In[3]:= Symbolize[ParsedBoxWrapper[SuperscriptBox["s", "2"]]]
In[4]:= Solve[b + a s^2 == 0, s^2]
Out[4]= {{s^2 -> -(b/a)}}
问题是s ^ 2确实被视为另一个符号,例如
In[6]:= Sqrt[s^2] // PowerExpand
Out[6]= Sqrt[s^2]
解决方法是用s * s替换s ^ 2,因为Symbolize
仅对用户输入的表达式起作用(即在解释输入的Box结构的级别)
In[7]:= Sqrt[s^2] /. s^2 -> s s // PowerExpand
Out[7]= s