Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Why does Sage provide no explicit solution for solve() but Wolfram Alpha does ?

Hello everyone, I'm working sporadically with Sage and now I have a problem which I can't solve with my limited rutine and rudimentary knowledge of math:

With the following input i do not ge a explicit solution form Sage:

forget(assumptions()) 
var('SagittalH r Da Di')

eqSagittalH = SagittalH == sqrt(r^2-(Di/2))-sqrt(r^2-(Da/2))

forget(assumptions()) 
#Assumptions
assume(Da,'real')
assume(Di,'real')
assume(Di<Da)
assume(r,'real')
assume(r>0)
assume(2*r>Da)
assume(SagittalH,'real')

eqDa = solve((eqSagittalH)^2,Da)
print(eqDa)
eqDaExplcit = solve((eqSagittalH)^2,Da,explicit_solutions=True)
print(eqDaExplcit,"If List is Empty: no Explicit solution!!")

Return of teh Explicit computaion is a empty list -> no Explicit solution Same result witout the assumptions...

the Prompt

eqDa = solve((eqSagittalH)^2,Da)

returns

[
Da == -2*SagittalH^2 + 4*r^2 - 4*sqrt(r^2 - 1/2*Da)*sqrt(r^2 - 1/2*Di) - Di
]

If I ask Wolfram Alpha the same Problem via the Promt

solve y = sqrt(r^2 - 1/2*a) - sqrt(r^2 - 1/2*b)  for b

i get the expected result

b==2*sqrt(2)*y*sqrt(2*r^2 - a) + a - 2*y^2

Can anyone tell me what I am doing wrong as I am not getting any results from Sage?

P.S: my Sage version is a freshly compiled SageMath 10.4 beta 1

Why does Sage provide no explicit solution for solve() but Wolfram Alpha does ?

Hello everyone, I'm working sporadically with Sage and now I have a problem which I can't solve with my limited rutine and rudimentary knowledge of math:

With the following input i do not ge a explicit solution form Sage:

forget(assumptions()) 
var('SagittalH r Da Di')

eqSagittalH = SagittalH == sqrt(r^2-(Di/2))-sqrt(r^2-(Da/2))

forget(assumptions()) 
#Assumptions
assume(Da,'real')
assume(Di,'real')
assume(Di<Da)
assume(r,'real')
assume(r>0)
assume(2*r>Da)
assume(SagittalH,'real')

eqDa = solve((eqSagittalH)^2,Da)
print(eqDa)
eqDaExplcit = solve((eqSagittalH)^2,Da,explicit_solutions=True)
print(eqDaExplcit,"If List is Empty: no Explicit solution!!")

Return of teh Explicit computaion is a empty list -> no Explicit solution Same result witout the assumptions...

the Prompt

eqDa = solve((eqSagittalH)^2,Da)

returns

[
Da == -2*SagittalH^2 + 4*r^2 - 4*sqrt(r^2 - 1/2*Da)*sqrt(r^2 - 1/2*Di) - Di
]

If I ask Wolfram Alpha the same Problem via the Promt

solve y = sqrt(r^2 - 1/2*a) - sqrt(r^2 - 1/2*b)  for b

i get the expected result

b==2*sqrt(2)*y*sqrt(2*r^2 - a) + a - 2*y^2

Can anyone tell me what I am doing wrong as I am not getting any results from Sage?

P.S: my Sage version is a freshly compiled SageMath 10.4 beta 1

PPS: my TI 89 is also able to solve the equation as expected.

Why does Sage provide no explicit solution for solve() but Wolfram Alpha does ?

Hello everyone, I'm working sporadically with Sage and now I have a problem which I can't solve with my limited rutine and rudimentary knowledge of math:

With the following input i do not ge a explicit solution form Sage:

forget(assumptions()) 
var('SagittalH r Da Di')

eqSagittalH = SagittalH == sqrt(r^2-(Di/2))-sqrt(r^2-(Da/2))

forget(assumptions()) 
#Assumptions
assume(Da,'real')
assume(Di,'real')
assume(Di<Da)
assume(r,'real')
assume(r>0)
assume(2*r>Da)
assume(SagittalH,'real')

eqDa = solve((eqSagittalH)^2,Da)
print(eqDa)
eqDaExplcit = solve((eqSagittalH)^2,Da,explicit_solutions=True)
print(eqDaExplcit,"If List is Empty: no Explicit solution!!")

Return of teh Explicit computaion is a empty list -> no Explicit solution Same result witout the assumptions...

the Prompt

eqDa = solve((eqSagittalH)^2,Da)

returns

[
Da == -2*SagittalH^2 + 4*r^2 - 4*sqrt(r^2 - 1/2*Da)*sqrt(r^2 - 1/2*Di) - Di
]

If I ask Wolfram Alpha the same Problem via the Promt

solve y = sqrt(r^2 - 1/2*a) - sqrt(r^2 - 1/2*b)  for b

i get the expected result

b==2*sqrt(2)*y*sqrt(2*r^2 - a) + a - 2*y^2

Can anyone tell me what I am doing wrong as I am not getting any results from Sage?

P.S: my Sage version is a freshly compiled SageMath 10.4 beta 1

PPS: my TI 89 is also able to solve the equation as expected.

PPPS: type(eqSagittalH) returns

<class 'sage.symbolic.expression.Expression'>

solve((eqSagittalH),Da) #without the ^2 returnsthis Error Message:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
File ~/sage/sage/src/sage/interfaces/maxima_lib.py:632, in MaximaLib._create(self, value, name)
    631     else:
--> 632         self.set(name, value)
    633 except RuntimeError as error:

File ~/sage/sage/src/sage/interfaces/maxima_lib.py:540, in MaximaLib.set(self, var, value)
    539 cmd = '%s : %s$' % (var, value.rstrip(';'))
--> 540 self.eval(cmd)

File ~/sage/sage/src/sage/interfaces/maxima_lib.py:486, in MaximaLib._eval_line(self, line, locals, reformat, **kwds)
    485         if statement:
--> 486             maxima_eval("#$%s$" % statement)
    487 if not reformat:

File ~/sage/sage/src/sage/libs/ecl.pyx:838, in sage.libs.ecl.EclObject.__call__()
    837 lispargs = EclObject(list(args))
--> 838 return ecl_wrap(ecl_safe_apply(self.obj, (<EclObject>lispargs).obj))
    839 

File ~/sage/sage/src/sage/libs/ecl.pyx:358, in sage.libs.ecl.ecl_safe_apply()
    357     else:
--> 358         raise RuntimeError("ECL says: {}".format(message))
    359 else:

RuntimeError: ECL says: Maxima asks: Is _SAGE_VAR_SagittalH-sqrt(-(_SAGE_VAR_Di-2*_SAGE_VAR_r^2)/2)
    positive, negative or zero?

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
File ~/sage/sage/src/sage/interfaces/interface.py:749, in InterfaceElement.__init__(self, parent, value, is_name, name)
    748 try:
--> 749     self._name = parent._create(value, name=name)
    750 except (TypeError, RuntimeError, ValueError) as x:

File ~/sage/sage/src/sage/interfaces/maxima_lib.py:636, in MaximaLib._create(self, value, name)
    635 if "Is" in s:  # Maxima asked for a condition
--> 636     self._missing_assumption(s)
    637 else:

File ~/sage/sage/src/sage/interfaces/maxima_lib.py:1074, in MaximaLib._missing_assumption(self, errstr)
   1073 outstr = outstr.replace('_SAGE_VAR_', '')
-> 1074 raise ValueError(outstr)

ValueError: Computation failed since Maxima requested additional constraints; using the 'assume' command before evaluation *may* help (example of legal syntax is 'assume(SagittalH-sqrt(-(Di-2*r^2)/2)
>0)', see `assume?` for more details)
Is SagittalH-sqrt(-(Di-2*r^2)/2)
    positive, negative or zero?

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
Cell In[12], line 1
----> 1 solve(SagittalH == sqrt(r**Integer(2)-(Di/Integer(2)))-sqrt(r**Integer(2)-(Da/Integer(2))),Da)
      2 #eqDa = solve(eqSagittalH,Da)
      3 #print(eqDa)

File ~/sage/sage/src/sage/symbolic/relation.py:1068, in solve(f, *args, **kwds)
   1063         raise TypeError("The first argument to solve() should be a "
   1064                         "symbolic expression or a list of symbolic "
   1065                         "expressions.")
   1067 if isinstance(f, Expression):  # f is a single expression
-> 1068     return _solve_expression(f, x, explicit_solutions, multiplicities, to_poly_solve, solution_dict, algorithm, domain)
   1070 if not isinstance(f, (list, tuple)):
   1071     raise TypeError("The first argument must be a symbolic expression or a list of symbolic expressions.")

File ~/sage/sage/src/sage/symbolic/relation.py:1338, in _solve_expression(f, x, explicit_solutions, multiplicities, to_poly_solve, solution_dict, algorithm, domain)
   1336 try:
   1337     if to_poly_solve != 'force':
-> 1338         s = m.solve(x).str()
   1339     else:  # omit Maxima's solve command
   1340         s = str([])

File ~/sage/sage/src/sage/interfaces/interface.py:697, in InterfaceFunctionElement.__call__(self, *args, **kwds)
    696 def __call__(self, *args, **kwds):
--> 697     return self._obj.parent().function_call(self._name, [self._obj] + list(args), kwds)

File ~/sage/sage/src/sage/interfaces/interface.py:617, in Interface.function_call(self, function, args, kwds)
    613 self._check_valid_function_name(function)
    614 s = self._function_call_string(function,
    615                                [s.name() for s in args],
    616                                ['%s=%s' % (key, value.name()) for key, value in kwds.items()])
--> 617 return self.new(s)

File ~/sage/sage/src/sage/interfaces/interface.py:386, in Interface.new(self, code)
    385 def new(self, code):
--> 386     return self(code)

File ~/sage/sage/src/sage/interfaces/interface.py:299, in Interface.__call__(self, x, name)
    296         pass
    298 if isinstance(x, str):
--> 299     return cls(self, x, name=name)
    300 try:
    301     # Special methods do not and should not have an option to
    302     # set the name directly, as the identifier assigned by the
    303     # interface should stay consistent. An identifier with a
    304     # user-assigned name might change its value, so we return a
    305     # new element.
    306     result = self._coerce_from_special_method(x)

File ~/sage/sage/src/sage/interfaces/interface.py:751, in InterfaceElement.__init__(self, parent, value, is_name, name)
    749     self._name = parent._create(value, name=name)
    750 except (TypeError, RuntimeError, ValueError) as x:
--> 751     raise TypeError(x)

TypeError: Computation failed since Maxima requested additional constraints; using the 'assume' command before evaluation *may* help (example of legal syntax is 'assume(SagittalH-sqrt(-(Di-2*r^2)/2)
>0)', see `assume?` for more details)
Is SagittalH-sqrt(-(Di-2*r^2)/2)
    positive, negative or zero?

I'm not able to get the problem solved with further assumptions.