2011-05-28 112 views
7

鑑於這樣的表達式(多項式,或一般的任何方程)作爲求解變量平方的方程?

a s^2+b = 0 

我要解決對於s^2,以獲得秒2 = -b /一個。我們都知道,不能只寫

Solve[eq==0,s^2] 

因爲s^2不是'變量'。只有s是一個'變量'。所以我做的是

eq = a s^2+b; 
sol = [email protected][eq==0/.s^2->z,z]; 
z/.sol 

-(b/a) 

我想知道是否有辦法做到上述,沒有中間變量替代? 我嘗試了很多命令,但沒有成功(減少,收集,消除,因素等)。

感謝 --Nasser

+1

中間變量有什麼問題?這對我來說似乎是一個很好的解決方案 - 即使它是兩條線。 – 2011-05-28 23:36:32

+0

@Sam,我從來沒有說過什麼是錯的?只是想知道是否有一個命令可以做到這一點,沒有中間子。 – Nasser 2011-05-28 23:42:38

回答

3

一種方式是解決s,然後將其平方...

eq=a s^2+b; 
sol=#^2 &@ (s/.Solve[eq==0,s])//DeleteDuplicates 

Out[1]= {-(b/a)} 
+3

稍微更直接,我想,應該是 DeleteDuplicates [s^2 /。求解[a * s^2 + b == 0,s]] Out [89] = { - (b/a)} – 2011-05-29 02:56:50

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秒2使正常的數學計算器把它像任何其他符號

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)}} 

的問題是,秒2真的被視爲只是一個符號,如

In[6]:= Sqrt[s^2] // PowerExpand 
Out[6]= Sqrt[s^2] 

一個解決與S * S來代替秒2,因爲Symbolize僅作用於用戶inputed前(即解釋輸入框結構的級別)

In[7]:= Sqrt[s^2] /. s^2 -> s s // PowerExpand 
Out[7]= s 
+1

請注意,上面的In [3]是使用Notation Palette創建的 - 所以您不需要查看Mathematica筆記本中的所有「盒子」內容。 – Simon 2011-05-29 01:22:30

+1

Simon,如果你可以在'Block'或'Module'中使'Symbolize'操作暫時進行,我將爲此投票。否則,它似乎像用大錘擊中釘子。 – 2011-05-29 07:44:52

+0

@ Mr.Wizard:我從來沒有說過這是一個很好的解決方案...... – Simon 2011-05-29 10:00:20