Мне нужно минимизировать функцию, основанную на Hsieh Model , используя язык R. Основная цель - минимизировать функцию расстояния, которая зависит от набора других функций.
obj = function(x1){
s = sf()
h_til = h_tilf()
w_til = w_tilf(x1)
w_r = w_rf()
p_ir = p_irf()
#H_tr = H_trf(x1)
W = Wf(x1)
f1 = matrix(0, i, r)
f2 = matrix(0, i, r)
for (c in 1:i){
for (j in 1:r){
f1[c, j] = ( (W[c, j] - W_t[c, j]) / W_t[c, j] ) ** 2
f2[c, j] = ( (p_ir[c, j] - p_t[c, j]) / p_t[c, j] ) ** 2
}
}
d1 = sum(f1)
d2 = sum(f2)
D = d1 + d2
return(D)
}
Поэтому мой алгоритм должен найти три параметра (w, tau_w, tau_h), которые минимизируют эту функцию расстояния. Эти три параметра являются массивами с i строками и r столбцами. Автор:
w = runif(i*r, 0, 1)
tau_w = runif(i*r, -1, 1)
tau_h = runif(i*r, -1, 1)
x1 = array( c(tau_w, tau_h, w), dim = c(i, r, 3))
Я пытаюсь решить эту проблему с помощью библиотек optimx и Rsolnp.
res = optim(x1, #starting values
obj) #function to optimise
Но я получаю эту ошибку:
Error in x1[c, j, 1] : incorrect number of dimensions
Эта минимизация обычно сделано с использованием алгоритма Nelder-Mead. Я новичок в оптимизации и ценю любую помощь. Мой полный код здесь .