В nsolve
вторым аргументом является начальное предположение для значения переменной, которое сделает одномерное выражение равным нулю:
>>> nsolve(x**2-1, 0)
1.00000000000000
>>> nsolve(x**2-1, -3)
-1.00000000000000
В solve
, однако первоначальное предположение не требуется, поскольку уравнение будет решаться символически:
>>> nsolve(x**2-1)
[-1, 1]
Но solve
также может обрабатывать многовариантные выражения, и в этом случае второй аргумент используется для указания, какую переменную вы хотите решить для.
>>> solve(x**2-c)
[{c: x**2}]
>>> solve(x**2-c, x)
[-sqrt(c), sqrt(c)]
Но вы можете решить для все, что * * в выражении, даже числа. Вот почему ошибка не возникает в вашем случае (хотя, возможно, ноль должен вызвать ошибку). Вот примеры решения для числа:
>>> solve(3*x**2-c, 3)
[c/x**2]
>>> solve(3*x**4-c, 4)
[log(c/3)/log(x)]
>>> solve(2*x**2-c, 2)
[LambertW(c*log(x))/log(x)]