J'ai une fonction scalaire qui est obtenue par des calculs itératifs. Je souhaite différencier (trouver la dérivée directionnelle) des valeurs par rapport à une matrice élémentaire. Comment dois-je employer l'approximation par différence finie dans ce cas. Est-ce que diff
ou gradient
aider dans ce cas. Notez que je ne veux que des dérivés numériques. Le code typique que je travaillerais sur est:Différencier un scalaire par rapport à la matrice
n=4;
for i=1:n
for x(i)=-2:0.04:4;
for y(i)=-2:0.04:4;
A(:,:,i)=[sin(x(i)), cos(y(i));2sin(x(i)),sin(x(i)+y(i)).^2];
B(:,:,i)=[sin(x(i)), cos(x(i));3sin(y(i)),cos(x(i))];
R(:,:,i)=horzcat(A(:,:,i),B(:,:,i));
L(i)=det(B(:,:,i)'*A(:,:,i)B)(:,:,i));
%how to find gradient of L with respect to x(i), y(i)
grad_L=tr((diff(L)/diff(R)')*(gradient(R))
endfor;
endfor;
endfor;
Je sais que la dernière partie de grad_L
serait syntaxe erreur indiquant les dimensions ne correspondent pas. Comment puis-je procéder pour résoudre cela. Notez que gradient ou dérivée directionnelle d'une fonction scalaire f
d'une variable de matrice X
est donnée par nabla(f)=trace((partial f/patial(x_{ij})*X_dot
où x_{ij}
désigne des éléments de la matrice et X_dot
représente gradient de la matrice X
@Adriaan ok, édité. Mais, ce n'est qu'un exemple hypothétique. – vidyarthi