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

Вычислим 2-D градиент 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 - градиент по NI размерность 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++ с помощью Coder™ MATLAB ®

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