我曾经问过一个关于如何根据问题中的要求设置功能的问题,并且已经使用了我编写的代码,现在的问题是,无论如何,输出保持不变,无论我在k
中更改参数first-value-k-or-higher x tol 1
的值是多少。
这是我基于其他问题的反馈的代码:
(define (square x)
(* x x))
(define (first-value-k-or-higher x tol k)
(if (<= (abs(- x
(square (babylonian x k))))
tol)
k
(first-value-k-or-higher x tol (+ k 1))))
(define (terms-needed x tol)
(first-value-k-or-higher x tol 1))
如果函数看起来像我上面的函数,这里是几个示例输出:
> (terms-needed 15 .001)
1
> (terms-needed 234 3)
1
> (terms-needed 23421 453)
1
>
如果我将函数terms-needed x tol
更改为以下内容:
(define (square x)
(* x x))
(define (first-value-k-or-higher x tol k)
(if (<= (abs(- x
(square (babylonian x k))))
tol)
k
(first-value-k-or-higher x tol (+ k 1))))
(define (terms-needed x tol)
(first-value-k-or-higher x tol 100))
新功能将输出:
> (terms-needed 15 .0001)
100
> (terms-needed 243 3)
100
>
Terms-needed
的计算结果应等于tol
之内的无限和中的项数,即最小的k
,以使{{1}之间的差}和x
小于(square (babylonian x k))
。正如我已经提到的,问题是无论我为tol
的参数值设置什么值,我都会得到相同的“ 1”输出。我也认为这是问题的根源,因为如果我将terms-needed x tol
更改为(first-value-k-or-higher x tol 1))
或其他任何值(first-value-k-or-higher x tol 2))
都会输出该值,例如使用{{1} }将输出2。
这是运行程序(first-value-k-or-higher x tol 2))
所需的功能(first-value-k-or-higher x tol 2))
,而程序babylonian x k
则需要运行:
first-value-k-or-higher x tol k
terms-needed x tol
函数应该使用巴比伦方法计算根,并求出第k个近似值(Sk)。 (define (babylonian x k)
(if (>= x 1)
(if (= k 0)
(/ x 2)
(* (/ 1 2) (+ (expt x (/ 1 2)) (/ x (expt x (/ 1 2))))))
1)
)
函数也通过所有测试。
此处是my earlier problem,以获取更多背景信息
答案 0 :(得分:0)
不,
(define (babylonian x k)
(if (>= x 1)
(if (= k 0)
(/ x 2)
(* (/ 1 2) (+ (expt x (/ 1 2)) (/ x (expt x (/ 1 2))))))
1)
)
可能无法计算x
的“第k个近似值”,因为内部k
的替代形式中没有if
。