gradient

函式簡介

函式功能:
計算數值梯度。
函式F(x,y,...)在(x0,y0,...)的梯度就是函式在該點的導數,通常在數學上記作▽F(x0,y0,...)或gradF(x0,y0,...)。
梯度是一個向量, 它的方向是函式在一點變化率最快的方向,而它的模就是函式沿這個方向的變化率。
在MATLAB中利用gradient計算梯度,將得到若干向量,它們指出了F的值增大的方向。
語法格式:
FX = gradient(F)
其中F是一個向量。該格式返回F的一維數值梯度。FX即∂F/∂x,即沿著x軸(水平軸)方向的導數。
[FX,FY] = gradient(F)
其中F是一個矩陣。該調用返回二維數值梯度的x、y部分。FX對應∂F/∂x, FY對應於∂F/∂y。
[FX,FY,FZ,...] = gradient(F)
這裡,F是一個含有N個自變數的多元函式。
[...] = gradient(F,h)
這裡的h指定了沿著梯度的方向取點的間隔。
[...] = gradient(F,h1,h2,...)
相關函式:contour,del2,diff

程式示例

示例一: 
v = -0.5:0.05:0.5;
[x, y] = meshgrid(v);
z = sqrt(1.0 - x.^2 - y.^2);
[dx, dy] = gradient(z, .2, .2);
mesh(x,y,z);
hold on;
contour(v, v, z), quiver(v,v,dx,dy);
hold off;
示例二:
close all; clear; clc;
% 在二維平面上繪製一個正電荷的電場線圖。
k = 8.9875e+9; % 比例係數
e = 1.602e-19;% 一個電子帶電量絕對值
e_r = 2.8e-15; % 正電子的半徑
ke = k .* e; % k by e
% 指定區間: d= <=d,並生成 格線數據
d = -e_r*40:e_r:e_r*40;
[x, y] = meshgrid(d);
% 計算電位
V_max = ke / e_r; % 正電荷的表面電勢最大,無窮遠處電勢為0
V = ke ./ sqrt(x.^2 + y.^2);
V(V==Inf) = V_max;
V(V>V_max) = V_max;
% 求電勢的梯度,即電場強度
[E_x, E_y] = gradient(-V);
% 繪製電場線分布
t = 0:2*pi/20:2*pi;
sx = e_r * cos(t);
sy = e_r * sin(t);
hold on;
plot(0, 0, 'ro', 0,0, 'r+'); % 標出正電荷
streamline(x, y, E_x, E_y, sx, sy);
contour(x, y, V, linspace(min(V(:)), max(V(:)), 60));
axis([min(d), max(d), min(d), max(d)]);
hold off;

相關詞條

相關搜尋

熱門詞條

聯絡我們