мне нужно использовать Python для вычисления логарифмов объектов видаPython логарифм неправильно вычисляется очень малые комплексные числа
log(1 - n0 - n1*1j)
где n0 и n1 являются очень малые числа ~ 1.0e-27 и 1j является мнимое число.
Использование cmath.log дает неправильный ответ
print cmath.log(1.0 - 1e-27 - 1.0e-27j)
(5e-55-1e-27j)
Использование mpmath я могу получить правильный результат, но только если я фраза аргумент правильно
import mpmath as mp
mp.prec = 100
print mp.log( mp.mpc(1.0) - mp.mpc(0.00000000000000000000000001) - mp.mpc(real='0.0', imag='1.0e-27'))
дает
(-1.0000389695486766657204483072e-26 - 1.00000000000000000000000001e-27j)
(что является правильным ответом) тогда как
print mp.log( mp.mpc(0.99999999999999999999999999) - mp.mpc(real='0.0', imag='1.0e-27'))
дает
(5.0e-55 - 1.0e-27j)
Что здесь происходит? Могу ли я получить правильный ответ, используя cmath.log()?
«Правильный ответ» кажется мне подавленным на порядок в реальной части. [Wolfram Alpha] (http://www.wolframalpha.com/input/?i=log1p%28-1e-27-1e-27i%29), и моя интуиция предполагает, что реальная часть должна быть ближе к -1 -27'. – user2357112
Это просто больше, чем 1, если бы оно было меньше, чем было бы, например, 9.99е-27. – egoburnswell
'0,00000000000000000000000001'' '1e-26', а не' 1e-27'. Почему вы не инициализировали его строкой, например 'mp.mpc (real = '0.0', imag = '1.0e-27')'? – user2357112