我正在尝试创建一个使用gamma和delta来计算复数平方根的函数。我已经定义了辅助函数,但是我不知道如何处理实际函数,因为gamma和delta都接受两个参数,而complex-sqrt只有一个参数。有人可以帮忙吗?
(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))
答案 0 :(得分:0)
gamma
和delta
的两个参数是复数的实部和虚部。因此,您只需要在调用这些函数之前将x
拆分为实部和虚部即可。
结果是gamma
返回实部,而delta
返回虚部。因此,您不应该将两个结果相加,而是在生成新的复数时将它们用作参数。
(define (complex-sqrt x)
(let ((a (real-part x))
(b (imag-part x)))
(make-complex (gamma a b) (delta a b))))
将realpart
,imagpart
和make-complex
替换为您在该周的实验室中的复数实现中定义的实际函数名,如说明中所述。