Я задал более ранний вопрос, касающийся того, как настроить мою функцию в соответствии с требованиями проблемы, и используя уже написанный код, проблема теперь в том, что, несмотря ни на что, вывод остается тем же,независимо от того, насколько я изменяю значение параметра 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
такое, что разница между 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))
или любое другое значение (first-value-k-or-higher x tol 2))
, то это значение будет выводиться, например, с (first-value-k-or-higher x tol 2))
будет выводиться 2.
Вот функция babylonian x k
, необходимая для запуска программы first-value-k-or-higher x tol k
, необходимая для запуска terms-needed x tol
:
(define (babylonian x k)
(if (>= x 1)
(if (= k 0)
(/ x 2)
(* (/ 1 2) (+ (expt x (/ 1 2)) (/ x (expt x (/ 1 2))))))
1)
)
Функция babylonian
предназначена для вычисления корней с использованиемВавилонский метод и оценки в k ^ -ом приближении (Sk).Функция babylonian
также проходит все тесты.
Вот моя предыдущая проблема для получения дополнительной справочной информации