У меня есть функция (проблема Томсона):
|| 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
Заранее спасибо!