Я следующий анонимной функцией (с x
как массив):Частичная дифференциация/градиент анонимной функции с вводом массива
f = @(x) 312*x(2) - 240*x(1) + 30*x(3) - 24*x(4) + 282*x(1)*x(2) + 30*x(1)*x(3) + 18*x(1)*x(4) + 54*x(2)*x(3) + 6*x(2)*x(4) + 6*x(3)*x(4) + 638*x(1)^2 + 207*x(2)^2 + 6*x(3)^2 + 3*x(4)^2 + 4063
Я хочу сделать градиент этой функции и сохраните его для дальнейшего использования. Также с вводом массива.
X = [ 0;...
0;...
0;...
0];
F = f(X)
G = g(X)
Можно ли архивировать это с помощью этого типа функции? Или, может быть, можно каким-то образом сделать это с помощью команды diff? Что-то вроде этого:
g = [diff(f, x(1));...
diff(f, x(2));...
diff(f, x(3));...
diff(f, x(4))]
Благодаря правильно вычисляется градиент. Но у меня есть проблема, чтобы запустить это на моем коде - http://pastebin.com/ahZR4Le3 (поиск минимума функции с градиентным методом) 'Индексы индексов должны быть либо натуральными целыми положительными, либо логическими. Ошибка в sym/subsref (строка 805) R_tilde = builtin ('subsref', L_tilde, Idx); Ошибка в градиенте> @ (a) f (D * a + X) Ошибка в fminsearch (строка 189) fv (:, 1) = funfcn (x, varargin {:}); Ошибка в градиенте (строка 45) [a, y] = fminsearch (fa, 0); ' – Gumaa
возможно, вы должны использовать анонимную функцию' gd = matlabFunction (g) 'вместо символической? Но я не буду отлаживать ваш код. Задайте новый краткий вопрос. Приведенный выше код работает, вам просто нужно выяснить, в какой части вам нужно продолжить работу. – thewaywewalk