Функция печати и колчан приводит к одной и той же фигуре - PullRequest
0 голосов
/ 05 ноября 2018

В приведенном ниже коде я попытался выяснить принцип работы градиента в Python и отобразить его результаты.

Когда я запускаю код без plt.plot(x,f), векторы градиента кажутся разумными, насколько мне известно (за исключением оси x, потому что она не находится между -100 и 100, и я не знаю почему). Однако, когда я попытался увидеть эти векторы в строке функций, у меня возникли проблемы. Мой код выглядит следующим образом:

from numpy import *
import matplotlib.pyplot as plt

x = mgrid[-100:101:1]
f = x**2

Ex = gradient(f)

fig = plt.figure(1)
ax = fig.gca()
ax.quiver(x,Ex)
ax.plot(x,f)
plt.show()

Мне было просто интересно, если кто-нибудь может увидеть, где я ошибся, любая помощь приветствуется.

1 Ответ

0 голосов
/ 15 ноября 2018

Взглянув на документацию по колчану , вы найдете подписи вызовов :

quiver(U, V, **kw)
quiver(U, V, C, **kw)
quiver(X, Y, U, V, **kw)
quiver(X, Y, U, V, C, **kw)

Вот как будут поняты позиционные аргументы. Это означает, что в вашем случае он понимает x как U и Ex как V, являясь U и V компонентами x и y векторов стрелок соответственно. Таким образом, поскольку ни векторы x, ни y не заданы для векторов, он отображает стрелки от 0 до длины массива, причем каждая стрелка начинается с целочисленной позиции, в вашем случае от 0 до 200.

Первое, на что нужно обратить внимание, чтобы решить эту проблему, это то, что описание quiver - это Постройте двумерное поле стрелок. . Это внутренне двумерная функция. Поэтому, чтобы достичь желаемого результата, мы должны указать положения стрелок x и y, которые равны x и f. А также его составляющие стрелки x и y, которые можно легко рассчитать по градиенту Ex. Градиент примерно равен dy / dx , поэтому, когда градиент f ' известен, стрелка в плоскости xy, представляющая его, равна (u, v) = (l, f '* l) , где l - это интервал в массиве x.

В конце концов, вместо того, чтобы строить с помощью команды:

plt.quiver(x,f,np.ones_like(Ex),Ex,angles='xy')

решает проблему. angles='xy' заставляет стрелки указывать от (x, y) до (x + u, y + v), как и должно быть в этом случае.

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