Градиент в точке
Добрый день.
Помогите разобраться.
Необходимо вычислить градиент в точке.
Я понимаю надо использовать функцию • scipy.optimize.approx_fprime (*)
но никак не пойму как применить
f(x,y)=2*x**2*y**3 + 1/x + y**2*x +7
1 2 3 4
x, y = symbols('x y') f = 2*x**2*y**3 + 1/x + y**2*x +7 df_x = f.diff(x) df_x = f.diff(x)
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Градиент в точке
function =f(x) char x(1) x(2); y=x(1)^2+x(2)^2; gr=—подпрограмма для нахождения градинта .
Вычислить градиент в данной точке
Дана функция z=z(x,y), точка А (x,y) и вектор а. Найти: 1) grad z в точке А; 2) производную в точке.
Нужно найти градиент функции в точке
Z=sqrt2*sin^3( \pi /4 — x + 2y)-x^2y+4y в точке М (-2;-1) Хотелось бы увидеть и сам ход решения.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Найти градиент функции и производную по направлению в точке
Задана функция трех переменных u=u(x,y,z). Найти ее градиент и производное по направлению в точке.

Для функции u=u(x,y,z) найти градиент и производную по направлению l в точке M
3) Для функции u=u(x,y,z) найти градиент и производную по направлению l в точке M. u = 3xz.

Дана функция, найти градиент функции в заданной точке
Дана функция U = arctg(39-6^+^-4^) Найти gradU. Вычислить координаты вектора.
Как сделать градиент в ячейках таблицы? Нужно чтоб в каждой был разный градиент
Есть таблица. В ней 4 ячейки. В каждой из них нужно установить градиент. В одной радиальный, в.
Как вычислить градиент в python



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
Градиент в PyTorch – вычисление производной
В этом разделе мы обсудим производные и то, как их можно применять в PyTorch. Итак, начнем.
Градиент в PyTorch используется для нахождения производных функции. С математической точки зрения производные означают частичное дифференцирование функции и нахождение значения.
Ниже приведена схема, как вычислить производную функции.


Работу, которую мы сделали выше на диаграмме, будет выполняться в PyTorch с градиентом. Следующим шагом является нахождение производной функции.
1. Сначала нам нужно инициализировать функцию (y=3×3 +5×2+7x+1), для которой мы будем вычислять производные.
2. Следующим шагом является установка значения переменной, используемой в функции. Значение x устанавливается следующим образом.
X= torch.tensor(2.0, requires_grad=True)
Обычно нам требуется градиент, чтобы найти производную функции.
3. Далее следует вычислить производную функции просто с помощью backward() метода.
4. Последний шаг — получить или распечатать значение производной с помощью grad.
Рассмотрим пример нахождения производной:
import torch x=torch.tensor(2.0, requires_grad=True) y=8*x**4+3*x**3+7*x**2+6*x+3 y.backward() x.grad
tensor(326.)

import torch x=torch.tensor(2.0, requires_grad=True) z=torch.tensor(4.0, requires_grad=True) y=x**2+z**3 y.backward() x.grad z.grad
tensor(4.) tensor(48.)
Градиент от градиента функции в Python
Имеетя поле U, представленное в виде трёхмерного массива mnk. Подскажите, как в Python посчитать следующее выражение:
где k — массив коэффициентов такой же размерности, как и U. Очевидно, что на выходе должен получиться массив размера mnk, т.к. двойной градиент преобразуется в лапласиан:
Применение дважды метода np.gradient(k*np.gradient(U)) не даёт нужного результата, т.к. не понимает этого и продолжает работать с вектором градиента как с массивом поля, просто большей размерности.
Отслеживать
задан 5 июл 2021 в 15:02
55 4 4 бронзовых знака
Уточните, вам нужно дважды взять оператор Лапласа, или у вас ошибка в первой формуле? Может быть, там вместо оператора \Delta должен стоять оператор \nabla ?
6 июл 2021 в 5:21
Да, прошу прощения, торопился и перепутал значки
6 июл 2021 в 9:15
Если поле в виде массива, то используйте scipy.ndimage.filters.laplace
8 июл 2021 в 15:54
1 ответ 1
Сортировка: Сброс на вариант по умолчанию

Если у вас в первой формуле вашего вопроса ошибка, и вместо двукратного оператора Лапласа там стоит двукратная набла (оператор градиента), то вашу формулу можно упростить вот так:
Для градиента есть встроенная функция, для скалярного произведения тоже. Вам остаётся только вычислить оператор Лапласа. Для этого нужно вручную вычислить градиент от каждого компонента градиента и взять из результата соответствующую производную.
def laplacian(f, dx): """ Вычисляет значение оператора Лапласа на сетке. f - значения функции в n-мерной сетке. dx - кортеж, элементы кортежа есть шаги сетки. """ result = np.zeros_like(f) g = np.gradient(f, *dx, edge_order=2) for i, g_i in enumerate(g): gg_i = np.gradient(g_i, *dx, edge_order=2) result += gg_i[i] return result

Для примера вычислим оператор Лапласа вручную и функцией laplacian . В качестве подопытной свинки будет функция
import numpy as np # Сетка dx = 0.01 X,Y,Z = np.mgrid[-1:1:dx,-1:1:dx,-1:1:dx] # подопытная функция F = np.exp(-(X*X+2*Y*Y+3*Z*Z)) # Производные dFdx = -2*X*F d2Fdx2 = F*(4*X*X-2) dFdy = -4*Y*F d2Fdy2 = F*(16*Y*Y - 4) dFdz = -6*Z*F d2Fdz2 = F*(36*Z*Z - 6) # Лапласиан L_manual = d2Fdx2 + d2Fdy2 + d2Fdz2 L_computed = laplacian(F, (dx,dx,dx)) # среднеквадратичное отклонение вычисленного от точного print(np.std(L_manual - L_computed))
В основном ошибка набирается по краям. Если отбросить полосу вдоль краёв сетки, то ошибка уменьшается в два раза: np.std(L_manual[3:-3,3:-3,3:-3] — L_computed[3:-3,3:-3,3:-3]) -> 0.0011257917625283698
