MatLab - gradient de commande
Je suis en train d'apprendre les différentes fonctions et les commandes de MatLab. J'ai une question concernant la gradient
commande.
Dire que je définissez les paramètres suivants:
x = 0:1:10;
f = @(x) x.^2 + 2*x -1;
h = gradient(f(x))
Ensuite, cela me donne l'vectorielles suivantes:
h = 3 4 6 8 10 12 14 16 18 20 21
Je vois que les valeurs sont correctes lorsque x est compris entre 1 et 9, mais ce n'est pas pour x = 0 et x = 10. Lorsque x = 0, la pente doit être de 2, et lorsque x = 10, le gradient doit être 22. Alors, pourquoi ne MatLab donner de faux réponses pour ces deux valeurs d'entrée?
Si quelqu'un pourrait-il m'expliquer cela, je vous en serais très reconnaissante!
OriginalL'auteur Kristian | 2012-08-01
Vous devez vous connecter pour publier un commentaire.
En fait le résultat est correct. Lorsque
tels que le gradient est en effet 3. De même pour
x=10
, commef(10) = 119
etf(9)=98
, de sorte que le gradient est en effet = 21.L'écart entre ces résultats et les résultats de l'analyse est parce que le gradient est une approximation numérique de la dérivée avec associé les questions de limites.
Envisager d'autres ce qui se serait passé si on avait donné moins de points de données, dire que deux points - l'algorithme de vous donner le gradient comme la différence entre les points divisé par l'intervalle. C'est ce qui se passe à la frontière.
Mais le dérivé n'est pas le même que le numérique dégradé!
Sur le site de MathWorks expliquer le gradient de commande, il est dit: "FX = gradient(F) où F est un vecteur renvoie à une dimension numérique gradient de F. FX correspond à ∂F/∂x, les différences dans x (horizontale) de direction." Donc, depuis que ∂F/∂x = 2*x + 2, je dois avouer que je ne comprends toujours pas où les valeurs 3 et 21 viennent.
Ah, je crois que je comprends maintenant. Le gradient est calculé uniquement comme une approximation basée sur l'intervalle j'ai précisé, c'est bien cela? Donc, si j'avais valeurs de x pour les rapprocher, les valeurs aurait été plus correct?
En fait, la première chose que la page d'aide sur gradient dit est
GRADIENT Approximate gradient
.OriginalL'auteur jmetz
Je pense que vous êtes en train de regarder un problème de la frontière. Développez
x
et vous aurez la bonne réponse. Rappelez-vous que vous effectuez un calcul numériqueOriginalL'auteur Rasman
La
help gradient
commande ne fournissent pas suffisamment de détails de sa mise en œuvre.Mais si vous tapez dans
edit gradient
, il va vous montrer lam
-fichier de code sourcegradient.m
, où vous pouvez voir comment il est calculé:Unilatérale des différences à la fin du tableau.
Centrée sur les différences pour tous les autres points.
(Vous pouvez faire mieux en utilisant plus de précision les pochoirs. En particulier, vous pouvez utiliser un second ordre précis pochoir pour les articles sur les extrémités, pour des raisons de cohérence avec le second ordre précis centrée sur les différences.)
OriginalL'auteur Evgeni Sergeev