Дифференциация нормы в пределах суммы - PullRequest
0 голосов
/ 16 марта 2020

У меня есть функция (проблема Томсона):

enter image description here

|| x || здесь евклидово расстояние.

x_i & x_j - векторы с размерностью D

Я хочу, чтобы Matlab расширил всю сумму, а затем дифференцировал ее по x_1_1, затем x_1_2 ... x_1_D, где x_1_1 - первый элемент вектора x_1, а x_1_D - последний.

В моем коде я сначала попытался вычислить расширенную сумму, а затем дифференцировать ее с помощью функции diff (), но для некоторых причина, по которой мой код не работает:

function [f] = thomson(n,d)
syms x [n d]
f=0
for i=1:(n)
    for j=setdiff(1:n,i)
        f(i)=f(i)+norm(x(i,:)-x(j,:))^(-1)
    end
end
end

Вот что я получаю:

Error using symengine
Not a square matrix.

Error in sym/privBinaryOp (line 1032)
            Csym = mupadmex(op,args{1}.s, args{2}.s, varargin{:});

Error in  ^  (line 332)
        B = privBinaryOp(A, p, 'symobj::mpower');

Я знаю, что следует избегать syms, но я новичок в Matlab и буквально не Не знаю / не понимаю любой другой способ сделать это.

Вот проблема, которую я пытаюсь закодировать (на всякий случай, если есть другой способ ее решения):

1) Учитывая нашу функцию f и n единичных векторов с размерностью D

2) Найдите производную матрицу, где ее (i, j) запись является производной df / dx_i_j

Заранее спасибо!

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