Аппроксимация кривой с арктаном - PullRequest
0 голосов
/ 05 мая 2018

У меня есть набор точек данных, которые очень похожи на какую-то версию arctan (x).

xs <- seq(1000,50000,by=1000)

data <- c(0.101, 0.169, 0.209, 0.256, 0.289, 0.373, 0.391, 0.418, 0.477, 0.528, 0.579, 0.570, 0.602, 0.657, 0.690, 0.720, 0.747, 0.764, 0.781, 0.811, 0.842, 0.847, 0.864, 0.889, 0.871, 0.894, 0.897, 0.915, 0.926, 0.931, 0.932, 0.940, 0.950, 0.963, 0.956, 0.967, 0.967, 0.963, 0.971, 0.980, 0.986, 0.988, 0.986, 0.985, 0.993, 0.992, 0.994, 0.991, 0.995, 0.993)

plot(xs,data)

Немного покопавшись в мудреце, я придумал кривую y = 2*atan(xs/1000)/pi

Однако 1000 здесь - только предположение.

Аппроксимация оказывается разумной

model <- lm(data ~ I(2*atan(xs/10000)/pi))

points(xs,model$fitted.values, pch=20)

У меня вопрос, как я могу заставить R "угадать" значение a на кривой y = 2*atan(x/a)/pi?

Спасибо!

1 Ответ

0 голосов
/ 06 мая 2018

Мы можем написать функцию потерь (в приведенном ниже коде среднеквадратическую ошибку) и получить optim, чтобы минимизировать потери:

form <- function(a, xs) 2 * atan(xs / a) / pi
loss <- function(a, xs, data) mean((form(a, xs) - data)^2)
optimized <- optim(1000, loss, xs = xs, data = data, method = "Brent", lower = 1, upper = 10000)
a <- optimized$par
a
# [1] 7069.42
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...