Вывод функции не изменится - PullRequest
0 голосов
/ 16 сентября 2018

Я задал более ранний вопрос, касающийся того, как настроить мою функцию в соответствии с требованиями проблемы, и используя уже написанный код, проблема теперь в том, что, несмотря ни на что, вывод остается тем же,независимо от того, насколько я изменяю значение параметра 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 также проходит все тесты.

Вот моя предыдущая проблема для получения дополнительной справочной информации

1 Ответ

0 голосов
/ 16 сентября 2018

Нет,

(define (babylonian x k)
    (if (>= x 1)
      (if (= k 0)
          (/ x 2)
          (* (/ 1 2) (+ (expt x (/ 1 2)) (/ x (expt x (/ 1 2))))))
      1)
  )

не может вычислять "k ^ -ое приближение" x, поскольку в альтернативе внутреннего выражения if нет k.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...