# Equation solver with assume

Odd behaviour: the following gives a solution:

x, c, k = var('x, c, k')
assume(k > 0)
assume(k, "integer")
solve(x**k == (k/c), x)


but the following does not:

x, c, k = var('x, c, k')
assume(k > 0)
assume(k, "real")
solve(x**k == (k/c), x)


I should be able to remove the assume(k, "datatype") completely, right?

edit retag close merge delete

Sort by » oldest newest most voted

since you assume(k>0), which is meaningless if k is not real, you implicitly assume that it is real:

sage: x, c, k = var('x, c, k')
....: assume(k > 0)
....:
sage: k.is_real()
True


the following failure of Maxima's solver is unrelated to this assumption. This weakness of Maxima's solver has been known for a long time.

This equation can nevertheless be solved with a little help from the user:

sage: (x**k==k/c).log().log_expand().solve(x)
[x == e^(-log(c)/k + log(k)/k)]


And further tidied:

sage: (x**k==k/c).log().log_expand().solve(x).canonicalize_radical()
x == k^(1/k)/c^(1/k)

more