方案中复数的平方根

时间:2016-10-14 02:33:19

标签: math scheme racket complex-numbers

 (define (make-complex a b) (cons a b))
 (define (real x) (car x))
 (define (imag x) (cdr x))
 (define (complex-sqrt x)
     (define (first a b) (sqrt (/ (+ a
                              (sqrt (+
                                     (* a a)
                                     (* b b))))
                           2)))
     (define (second a b) (sqrt (/ (+ (* -1 a)
                               (sqrt (+
                                      (* a a)
                                      (* b b))))
                            2)))
  (cons (first (real x) (imag x)) (second (real x) (imag x))))
  (complex-sqrt (make-complex 2 0))
  (complex-sqrt (make-complex -3 0))

因此,对于某些上下文,此函数会查找复数的平方根。 a是复数的实部,b是虚部。复数sqrt函数不适用于某些b = 0的值,但我不确定为什么。我尝试了几个值,其中b等于0并将它们放入我的计算器,但它们都给了我相同的答案。

谢谢

1 个答案:

答案 0 :(得分:0)

由于

的平方,实施的公式对于否定b是错误的
sqrt( (sqrt(a*a+b*b)+a)/2 ) +i*sqrt( (sqrt(a*a+b*b)-a)/2 )

a + i*sqrt( (a*a+b*b) - a*a) = a + i*abs(b)

然后不是原始号码。

对于b=0,术语sqrt(a*a)可能会产生一个略小于abs(a)的数字,因此实部和虚部之一在外部平方根下面具有负表达式。