我将如何着手创建此功能
How would I go about create this function
如何创建近似 cos 函数。
到目前为止我有什么。
(define k 0)
(define (approx-cos x n)
(cond
[(> 0 n) 0]
[else (* (/ (expt -1 k) (factorial (* 2 k))) (expt x (* 2 k)))]))
您的解决方案需要大量 工作才能达到预期。对于初学者,您的参数已切换:第一个是您要计算的数字,第二个是迭代次数...
这导致我在您的解决方案中遇到 主要 问题,您根本没有迭代!你应该在某个时候调用 approx-cos
,或者调用一些辅助程序来进行循环(就像我所做的那样)。
最后但同样重要的是,您没有正确实施公式。例如,-1
部分在哪里?或者你在哪里乘以 x^2k
?恐怕需要完全重写:
; main procedure
(define (approx-cos x n)
; call helper procedure
(loop 0 0 x n))
; define a helper procedure
(define (loop acc k x n)
; loop with k from 0 to n, accumulating result
(cond [(> k n) acc] ; return accumulator
[else
(loop (+ acc ; update accumulator
(* (/ (expt -1.0 k) ; implement the formula
(factorial (* 2.0 k)))
(expt x (* 2.0 k))))
(add1 k) ; increment iteration variable
x n)]))
这将通过所有预期的检查:
(approx-cos 0 0)
=> 1
(approx-cos (/ pi 2) 0)
=> 1
(approx-cos 0 10)
=> 1
(approx-cos pi 10)
=> -0.9999999999243502
(approx-cos (* 3 (/ pi 2)) 9)
=> -1.1432910825361444e-05
(approx-cos 10 100)
=> -0.8390715290756897
一些最后的想法:您的 factorial
执行速度非常慢,如果您计划进行大量迭代,您的 factorial
将在某个时候冻结执行。
如何创建近似 cos 函数。
到目前为止我有什么。
(define k 0)
(define (approx-cos x n)
(cond
[(> 0 n) 0]
[else (* (/ (expt -1 k) (factorial (* 2 k))) (expt x (* 2 k)))]))
您的解决方案需要大量 工作才能达到预期。对于初学者,您的参数已切换:第一个是您要计算的数字,第二个是迭代次数...
这导致我在您的解决方案中遇到 主要 问题,您根本没有迭代!你应该在某个时候调用 approx-cos
,或者调用一些辅助程序来进行循环(就像我所做的那样)。
最后但同样重要的是,您没有正确实施公式。例如,-1
部分在哪里?或者你在哪里乘以 x^2k
?恐怕需要完全重写:
; main procedure
(define (approx-cos x n)
; call helper procedure
(loop 0 0 x n))
; define a helper procedure
(define (loop acc k x n)
; loop with k from 0 to n, accumulating result
(cond [(> k n) acc] ; return accumulator
[else
(loop (+ acc ; update accumulator
(* (/ (expt -1.0 k) ; implement the formula
(factorial (* 2.0 k)))
(expt x (* 2.0 k))))
(add1 k) ; increment iteration variable
x n)]))
这将通过所有预期的检查:
(approx-cos 0 0)
=> 1
(approx-cos (/ pi 2) 0)
=> 1
(approx-cos 0 10)
=> 1
(approx-cos pi 10)
=> -0.9999999999243502
(approx-cos (* 3 (/ pi 2)) 9)
=> -1.1432910825361444e-05
(approx-cos 10 100)
=> -0.8390715290756897
一些最后的想法:您的 factorial
执行速度非常慢,如果您计划进行大量迭代,您的 factorial
将在某个时候冻结执行。