gradient

Числовой градиент

Описание

пример

FX = gradient(F) возвращает одномерный числовой градиент векторного F. Выход FX соответствует ∂F / ∂ x, которые являются различиями в x (горизонталь) направление. Интервал между точками принят, чтобы быть 1.

пример

[FX,FY] = gradient(F) возвращает x и компоненты y двумерного числового градиента матричного F. Дополнительный выход FY соответствует ∂F / ∂ y, которые являются различиями в y (вертикальное) направление. Интервал между точками в каждом направлении принят, чтобы быть 1.

[FX,FY,FZ,...,FN] = gradient(F) возвращает N компоненты числового градиента F, где F массив с N размерности.

пример

[___] = gradient(F,h) использование h как универсальный интервал между точками в каждом направлении. Можно задать любой из выходных аргументов в предыдущих синтаксисах.

пример

[___] = gradient(F,hx,hy,...,hN) задает N разрядка параметров для интервала в каждой размерности F.

Примеры

свернуть все

Вычислите градиент монотонно увеличивающегося вектора.

x = 1:10
x = 1×10

     1     2     3     4     5     6     7     8     9    10

fx = gradient(x)
fx = 1×10

     1     1     1     1     1     1     1     1     1     1

Вычислите 2D градиент xe-x2-y2 на сетке.

x = -2:0.2:2;
y = x';
z = x .* exp(-x.^2 - y.^2);
[px,py] = gradient(z);

Постройте линии контура и векторы на том же рисунке.

figure
contour(x,y,z)
hold on
quiver(x,y,px,py)
hold off

Figure contains an axes. The axes contains 2 objects of type contour, quiver.

Используйте градиент в конкретной точке, чтобы линейно аппроксимировать значение функции в соседней точке и сравнить его с фактическим значением.

Уравнение для линейной аппроксимации значения функции

f(x)f(x0)+(f)x0(x-x0).

Таким образом, если вы знаете значение функции f(x0) и наклон производной (f)x0 в конкретной точке x0, затем можно использовать эту информацию, чтобы аппроксимировать значение функции в соседней точке f(x)=f(x0+ϵ).

Вычислите некоторые значения синусоидальной функции между-1 и 0.5. Затем вычислите градиент.

y = sin(-1:0.25:0.5);
yp = gradient(y,0.25);

Используйте значение функции и производную в x = 0.5 предсказать значение sin(0.5005).

y_guess = y(end) + yp(end)*(0.5005 - 0.5)
y_guess = 0.4799

Вычислите фактическое значение для сравнения.

y_actual = sin(0.5005)
y_actual = 0.4799

Найдите значение градиента многомерной функции в заданной точке.

Рассмотрите многомерную функцию f(x,y)=x2y3.

x = -3:0.2:3;
y = x';
f = x.^2 .* y.^3;
surf(x,y,f)
xlabel('x')
ylabel('y')
zlabel('z')

Figure contains an axes. The axes contains an object of type surface.

Вычислите градиент на сетку.

[fx,fy] = gradient(f,0.2);

Извлеките значение градиента в точке (1,-2). Для этого сначала получите индексы точки, с которой вы хотите работать. Затем используйте индексы, чтобы извлечь соответствующие значения градиента из fx и fy.

x0 = 1;
y0 = -2;
t = (x == x0) & (y == y0);
indt = find(t);
f_grad = [fx(indt) fy(indt)]
f_grad = 1×2

  -16.0000   12.0400

Точное значение градиента f(x,y)=x2y3 в точке (1,-2)

(f)(1,-2)=2xy3iˆ+3x2y2jˆ=-16iˆ+12jˆ.

Входные параметры

свернуть все

Входной массив, заданный как векторный, матричный или многомерный массив.

Типы данных: single | double
Поддержка комплексного числа: Да

Универсальный интервал между точками во всех направлениях в виде скаляра.

Пример: [FX,FY] = gradient(F,2)

Типы данных: single | double
Поддержка комплексного числа: Да

Разрядка между точками в каждом направлении в виде отдельных входных параметров скаляров или векторов. Количество входных параметров должно совпадать с количеством измерений массива F. Каждый вход может быть скаляром или вектором:

  • Скаляр задает постоянный интервал в той размерности.

  • Вектор задает координаты значений по соответствующему измерению F. В этом случае длина вектора должна совпадать с размером соответствующей размерности.

Пример: [FX,FY] = gradient(F,0.1,2)

Пример: [FX,FY] = gradient(F,[0.1 0.3 0.5],2)

Пример: [FX,FY] = gradient(F,[0.1 0.3 0.5],[2 3 5])

Типы данных: single | double
Поддержка комплексного числа: Да

Выходные аргументы

свернуть все

Числовые градиенты, возвращенные как массивы одного размера с F. Первый выход FX всегда градиент по 2-му измерению F, движение через столбцы. Второй выход FY всегда градиент по 1-му измерению F, движение через строки. Для третьего выхода FZ и выходные параметры, которые следуют, Nth выход является градиентом вдоль Nразмерность th F.

Больше о

свернуть все

Числовой градиент

Числовой градиент функции является способом оценить значения частных производных в каждой размерности с помощью известных значений функции в определенные моменты.

Для функции двух переменных, F (x, y), градиент

F=Fxi^+Fyj^.

Градиент может считаться набором векторов, указывающих в направлении увеличения значений F. В MATLAB® можно вычислить числовые градиенты для функций с любым количеством переменных. Для функции переменных N, F (x, y, z...), градиент

F=Fxi^+Fyj^+Fzk^+...+FNn^.

Советы

  • Использование diff или пользовательский алгоритм, чтобы вычислить несколько числовых производных, вместо вызова gradient многократно.

Алгоритмы

gradient вычисляет центральную разность для внутренних точек данных. Например, рассмотрите матрицу с расположенными с интервалами модулем данными, A, это имеет горизонтальный градиент G = gradient(A). Внутренние значения градиента, G(:,j),

G(:,j) = 0.5*(A(:,j+1) - A(:,j-1));

Индекс j варьируется между 2 и N-1, с N = size(A,2).

gradient вычисляет значения вдоль ребер матрицы с односторонними различиями:

G(:,1) = A(:,2) - A(:,1);
G(:,N) = A(:,N) - A(:,N-1);

Если вы задаете интервал точки, то gradient масштабирует различия соответственно. Если вы задаете два или больше выходных параметров, то функция также вычисляет разности по другим измерениям подобным образом. В отличие от diff функция, gradient возвращает массив с тем же числом элементов как вход.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Представлено до R2006a