求解变量平方的方程?

时间:2011-05-28 23:08:36

标签: wolfram-mathematica

给出表达式(多项式或一般的任何等式),例如

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

2 个答案:

答案 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