2011-05-28 12 views
7

dieron una expresión (polinomio, o cualquier ecuación en general) tal comoresolviendo una ecuación para el cuadrado de la variable?

a s^2+b = 0 

Quiero resolver para s^2, para obtener s^2 = -b/a. Todos sabemos que no se puede escribir

Solve[eq==0,s^2] 

porque s^2 no es una 'variable'. solo s es una 'variable'. Así que lo que hago es

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

-(b/a) 

Me preguntaba si hay una manera de hacer lo anterior, y sin la sustitución variable intermedia? Probé muchos comandos, pero no tuve éxito (reducir, recopilar, eliminar, factorizar, etc.).

gracias --Nasser

+1

¿Qué hay de malo con la variable intermedia? Me parece una buena solución, incluso si se trata de 2 líneas. –

+0

@Sam, nunca he dicho que algo esté mal? Solo me preguntaba si hay un comando que pueda hacerlo sin los subs intermedios. – Nasser

Respuesta

3

Una forma es para resolver s y luego se enfrentarán ...

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

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

Un poco más directo, creo, sería DeleteDuplicates [s^2 /. Resuelve [a * s^2 + b == 0, s]] Fuera [89] = {- (b/a)} –

2

Se podría utilizar el Notation package, pero conduce a otros problemas. Así que aquí es su ecuación original:

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] 

Ahora Symbolize s^2 para que el evaluador normal de Mathematica trata como a cualquier otro símbolo

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

El problema es que s^2 en realidad se trata como sólo otro símbolo, por ejemplo

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

Una solución es reemplazar s^2 con s * s, ya que sólo se actúa sobre Symbolize inputed usuario ex Presiones (es decir, a nivel de interpretación de las estructuras de cuadros ingresados)

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

Tenga en cuenta que en [3] arriba se creó con la paleta de notación, por lo que no ver todas las cosas de 'Box' en el cuaderno de Mathematica. – Simon

+1

Simon, si puedes hacer que la operación 'Symbolize' sea temporal como en' Block' o 'Module' votaré por esto. De lo contrario, parece golpear un clavo con un mazo. –

+0

@ Mr.Wizard: Nunca dije que fuera una buena solución ... – Simon

Cuestiones relacionadas