方案中的复杂函数

时间:2019-03-10 04:09:53

标签: scheme

我正在尝试创建一个使用gamma和delta来计算复数平方根的函数。我已经定义了辅助函数,但是我不知道如何处理实际函数,因为gamma和delta都接受两个参数,而complex-sqrt只有一个参数。有人可以帮忙吗?

enter image description here

(define (sgn b)
  (cond ((> b 1) 1)
        ((= b 0) 0)
        (else -1)))

(define (gamma a b)
  (cond ((= a 0) 0)
        ((= b 0) 0)
        (else (sqrt(/ (+ a (sqrt (+ (* a a) (* b b)))) 2)))))
(define (delta a b)
  (* (sign b) (sqrt (/ (+ (* -1 a) (sqrt (+ (* a a) (* b b)))) 2))))

(define (complex-sqrt x)
  (+ gamma delta))

1 个答案:

答案 0 :(得分:0)

gammadelta的两个参数是复数的实部和虚部。因此,您只需要在调用这些函数之前将x拆分为实部和虚部即可。

结果是gamma返回实部,而delta返回虚部。因此,您不应该将两个结果相加,而是在生成新的复数时将它们用作参数。

(define (complex-sqrt x)
  (let ((a (real-part x))
        (b (imag-part x)))
    (make-complex (gamma a b) (delta a b))))

realpartimagpartmake-complex替换为您在该周的实验室中的复数实现中定义的实际函数名,如说明中所述。