Я пытаюсь написать функцию квадратного корня в R. Функция должна вести себя как sqrt(), но не использовать эту функцию, конечно. Я должен использовать метод Ньютона для вычисления квадратного корня, который является:Запись функции квадратного корня в R
у (а + 1) = [у (а) + х/у (а)]/2
Здесь х число, которое я пытаюсь вычислить квадратный корень из и y (0), будет начальным предположением квадратного корня из x.
Функция должна принимать четыре аргумента: x (число, которое я пытаюсь вычислить квадратный корень), eps (разница в значениях между итерациями, которые считаются равными), iter (максимальное число итераций) и подробный (говорит, что я хочу вывести промежуточные результаты).
Моя проблема заключается в том, что я не очень хорошо разбирается в написании функций в R. У меня есть опыт работы в C++, но они немного отличаются в R.
Я считаю, что я должен написать что-то, что идет как это.
Попросит пользователя ввести число в качестве предположения для значения, которое мы хотим вычислить из квадратного корня. Сделайте цикл for от 1 до iter с двумя операторами if 1), которые останавливают функцию и выводят значение y, если максимальное количество итераций достигнуто. 2) прекратите выполнение функции и выведите значение y, если разница между последовательными итерациями меньше чем eps.
Вот код, который я до сих пор:
MySqrt <- function (x, eps = 1e-6, iter = 100, verbose = TRUE) {
for (i in 0:itmax) {
y[0] <- readline(prompt="Please enter your initial square root guess: ")
y[i + 1] = (y[i] + x/y[i])/2
if (i == 100) {
stop (return(y[i + 1]))
}
if (abs(y[i + 1] - y[i]) < eps) {
stop (return(y[i + 1]))
}
}
return(y[i + 1])
}
Здесь ошибка я получаю после ввода начальной квадратного корня догадки: Ошибка в у [0] < - Readline (подсказка = «Пожалуйста, введите исходный квадратный корень догадки: "): объект 'y' не найден
Честно говоря, я не ожидал, что код будет работать, потому что я уверен, что существует несколько ошибок.
Во-первых, R не использует 0 индексирование , поэтому 'y [0]' является проблемой - 'y [1]' является первой частью вектора. Во-вторых, 'y' не существует до того, как вы попытаетесь присвоить его подраздел, поэтому ошибка« объект «y» не найден ». – thelatemail
'stop' используется для (намеренно) повышения ошибки, поэтому вы, вероятно, не захотите использовать это здесь. 'return' - для завершения выполнения раньше; в противном случае будет возвращена последняя строка выражения. – alistaire
@thelatemail Итак, первая строка определения функции создаст y как пустой вектор i.e. y <- vector (mode = "numeric", length = 0)? – Steve