姓名:劉爍爍 ;學(xué)號:20181213904;學(xué)院:廣州研究院
原鏈接:https://zhuanlan.zhihu.com/p/161734503? 來源:知乎
【嵌牛導(dǎo)讀】電磁學(xué)的基礎(chǔ)
【嵌牛鼻子】散度、旋度、梯度定義
【嵌牛提問】怎么matlab把這些概念表示出來呢?
【嵌牛正文】散度、旋度、梯度定義及matlab表示
物理學(xué)中把某個物理量在空間一個區(qū)域內(nèi)的分布稱為場。從各種場的取值性質(zhì)來看可以分成兩大類,一類是每個點對應(yīng)一個數(shù)值,這種場統(tǒng)稱為標(biāo)量場,如溫度場、密度場等;另一類是每 個點對應(yīng)一個向量,這種場稱為向量場,如引力場、梯度場、電場、磁場等。場本身的性質(zhì)與坐標(biāo)選擇無關(guān),但對各種場的分析和計算應(yīng)該選擇適當(dāng)?shù)淖鴺?biāo)系,本章均以直角坐標(biāo)系為例,分析場的梯度、散度和旋度等特性。同時,詳細介紹標(biāo)量場的梯度、矢量場的散度和旋度的MATLAB處理方法。
一、場的數(shù)學(xué)模型和物理模型
場(field)在數(shù)學(xué)上是指一個向量到另一個向量或數(shù)的映射。一般的,在常規(guī)的有關(guān)電磁學(xué)的物理研究中,我們所談?wù)摰膱?,實質(zhì)上是一個(二維)三維空間中的點對實數(shù)集和(二維)三維實向量的映射。對實數(shù)集的映射,稱之為標(biāo)量場(也叫作標(biāo)量函數(shù)),對向量(又名矢量)的映射稱之為矢量場(矢量函數(shù))。物理上,場是指(一個或者一族)物理量在空間中分布的狀況的綜合,這種綜合同樣被看作是一種物質(zhì)。在量子力學(xué)的語境下,這樣的綜合是物質(zhì)的一般形式,因為它的主要研究對象就是物質(zhì)(量子系統(tǒng))的“概率分布場”。
“在物理里,場(英語:Field)是一個以時空為變數(shù)的物理量。空間中彌漫著的基本相互作用被命名為“場”。[1]場可以分為標(biāo)量場、矢量場和張量場等,依據(jù)場在時空中每一點的值是標(biāo)量、矢量還是張量而定。例如,經(jīng)典重力場是一個矢量場:標(biāo)示重力場在時空中每一個的值需要三個量,此即為重力場在每一點的重力場矢量分量。更進一步地,在每一范疇(標(biāo)量、矢量、張量)之中,場還可以分為“經(jīng)典場”和“量子場”兩種,依據(jù)場的值是數(shù)字或量子算符而定。
場被認為是延伸至整個空間的,但實際上,每一個已知的場在夠遠的距離下,都會縮減至無法量測的程度。例如,在牛頓萬有引力定律里,重力場的強度是和距離平方成反比的,因此地球的重力場會隨著距離很快地變得不可測得(在宇宙的尺度之下)。
定義場是一個“空間里的數(shù)”,這不應(yīng)該減損場在物理上所有的真實性(如定義“質(zhì)量”為秤上的數(shù)字)?!皥稣加?a target="_blank">空間。場含有能量、動量。場的存在排除了真正的真空?!?a target="_blank">[2]真空中沒有物質(zhì),但并不是沒有場的。場形成了一個“空間的狀態(tài)”[3]
當(dāng)一個電荷移動時,另一個電荷并不會立刻感應(yīng)到。第一個電荷會感應(yīng)到一個反作用力,并獲得動量,但第二個電荷則沒有感應(yīng),直到第一個電荷移動的影響以光速傳遞到第二個電荷那里,并給予其動量之后。場的存在解決了關(guān)于第二個電荷移動前,動量存在在哪里的問題。因為依據(jù)動量守恒定律,動量必存在于某處。物理學(xué)家認為動量應(yīng)該存在于場之中。如此的認定讓物理學(xué)家們相信電磁場是真實的存在,使得場的概念成為整個現(xiàn)代物理的范式?!薄S基百科語。
為了運用微積分以及更為復(fù)雜的數(shù)學(xué)工具研究場的細節(jié)性質(zhì)和整體性質(zhì),人們給出了如下定義:
梯度:
梯度的本意是一個向量(矢量),表示某一函數(shù)在該點處的方向?qū)?shù)沿著該方向取得最大值,即函數(shù)在該點處沿著該方向(此梯度的方向)變化最快,變化率最大(為該梯度的模)。
定義一個三元標(biāo)量函數(shù)(三維空間的標(biāo)量場)?
?,對于空間中的每一點?

?(D為定義域或者說場存在的區(qū)域),都可以定義出一個矢量?



散度:
散度(divergence)可用于表征空間各點矢量場發(fā)散的強弱程度,物理上,散度的意義是場的有源性。當(dāng)div F>0 ,表示該點有散發(fā)通量的正源(發(fā)散源);當(dāng)div F<0 表示該點有吸收通量的負源(洞或匯);當(dāng)div F=0,表示該點無源。
定義散度,實際上是借助通量這一概念來定義的。要定義通量,必須引入面元矢量這一概念。
設(shè) S為一個包含體積 V的閉合空間曲面, dS 為曲面 S上的面元矢量,滿足:dS=dSe⊥ 。定義矢量 F 與? dS的內(nèi)積?
F點乘dS 為通過面元矢量 ds的通量,則散度可定義為:

旋度:
旋度是向量分析中的一個向量算子,可以表示三維向量場對某一點附近的微元造成的旋轉(zhuǎn)程度。 這個向量提供了向量場在這一點的旋轉(zhuǎn)性質(zhì)。旋度向量的方向表示向量場在這一點附近旋轉(zhuǎn)度最大的環(huán)量的旋轉(zhuǎn)軸,它和向量旋轉(zhuǎn)的方向滿足右手定則。旋度向量的大小則是繞著這個旋轉(zhuǎn)軸旋轉(zhuǎn)的環(huán)量與旋轉(zhuǎn)路徑圍成的面元的面積之比。舉例來說,假設(shè)一臺滾筒洗衣機運行的時候,從前方看來,內(nèi)部的水流是逆時針旋轉(zhuǎn),那么中心水流速度向量場的旋度就是朝前方向外的向量。

百度百科上引用的旋度定義
拉普拉斯算子:
在計算梯度時用到了一個算符稱為Nabla算子,記為?

?,拉普拉斯算子?


通過推導(dǎo),可以證明?

標(biāo)量場的可視化
plot函數(shù):
plot? Linear plot.
? ? plot(X,Y) plots vector Y versus vector X. If X or Y is a matrix,
? ? then the vector is plotted versus the rows or columns of the matrix,
? ? whichever line up.? If X is a scalar and Y is a vector, disconnected
? ? line objects are created and plotted as discrete points vertically at
? ? X.
? ? plot(Y) plots the columns of Y versus their index.
? ? If Y is complex, plot(Y) is equivalent to plot(real(Y),imag(Y)).
? ? In all other uses of plot, the imaginary part is ignored.
? ? Various line types, plot symbols and colors may be obtained with
? ? plot(X,Y,S) where S is a character string made from one element
? ? from any or all the following 3 columns:
? ? ? ? ? b? ? blue? ? ? ? ? .? ? point? ? ? ? ? ? ? -? ? solid
? ? ? ? ? g? ? green? ? ? ? o? ? circle? ? ? ? ? ? :? ? dotted
? ? ? ? ? r? ? red? ? ? ? ? x? ? x-mark? ? ? ? ? ? -.? ? dashdot
? ? ? ? ? c? ? cyan? ? ? ? ? +? ? plus? ? ? ? ? ? ? --? ? dashed?
? ? ? ? ? m? ? magenta? ? ? *? ? star? ? ? ? ? ? (none)? no line
? ? ? ? ? y? ? yellow? ? ? ? s? ? square
? ? ? ? ? k? ? black? ? ? ? d? ? diamond
? ? ? ? ? w? ? white? ? ? ? v? ? triangle (down)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^? ? triangle (up)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <? ? triangle (left)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? >? ? triangle (right)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p? ? pentagram
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? h? ? hexagram
? ? For example, plot(X,Y,'c+:') plots a cyan dotted line with a plus
? ? at each data point; plot(X,Y,'bd') plots blue diamond at each data
? ? point but does not draw any line.
? ? plot(X1,Y1,S1,X2,Y2,S2,X3,Y3,S3,...) combines the plots defined by
? ? the (X,Y,S) triples, where the X's and Y's are vectors or matrices
? ? and the S's are strings.?
? ? For example, plot(X,Y,'y-',X,Y,'go') plots the data twice, with a
? ? solid yellow line interpolating green circles at the data points.
? ? The plot command, if no color is specified, makes automatic use of
? ? the colors specified by the axes ColorOrder property.? By default,
? ? plot cycles through the colors in the ColorOrder property.? For
? ? monochrome systems, plot cycles over the axes LineStyleOrder property.
? ? Note that RGB colors in the ColorOrder property may differ from
? ? similarly-named colors in the (X,Y,S) triples.? For example, the
? ? second axes ColorOrder property is medium green with RGB [0 .5 0],
? ? while plot(X,Y,'g') plots a green line with RGB [0 1 0].
? ? If you do not specify a marker type, plot uses no marker.
? ? If you do not specify a line style, plot uses a solid line.
? ? plot(AX,...) plots into the axes with handle AX.
? ? plot returns a column vector of handles to lineseries objects, one
? ? handle per plotted line.
? ? The X,Y pairs, or X,Y,S triples, can be followed by
? ? parameter/value pairs to specify additional properties
? ? of the lines. For example, plot(X,Y,'LineWidth',2,'Color',[.6 0 0])
? ? will create a plot with a dark red line width of 2 points.
? ? Example
? ? ? x = -pi:pi/10:pi;
? ? ? y = tan(sin(x)) - sin(tan(x));
? ? ? plot(x,y,'--rs','LineWidth',2,...
? ? ? ? ? ? ? ? ? ? ? 'Markerfdgecolor','k',...
? ? ? ? ? ? ? ? ? ? ? 'Markerfacecolor','g',...
? ? ? ? ? ? ? ? ? ? ? 'MarkerSize',10)
示例:
x = 0:pi/1000:2*pi;? ? ? ? % x取值范圍由0到2π,pi/1000是遞增的步長
y =sin( 2*x + pi/4);? ? ? ? %表示y的函數(shù)表達式是sin類型
plot(x,y)? ? ?

三維網(wǎng)格函數(shù)mesh
三維曲面色塊函數(shù)surf
示例:
x=linspace(-2, 2, 25);? ? %在-2到2取25個點
y=linspace(-2, 2, 25);? ? ? %在-2到2取25個點
[xx, yy]=meshgrid(x, y);? ? %生成網(wǎng)格采樣點
zz=sqrt( xx.^2 + yy.^2);? ? %生成矩陣Z
surf( xx,yy,zz);? ? ? ? ? ? %畫出著色的三維曲面

mesh函數(shù)

surf函數(shù)
三維隱函數(shù):
[X,Y,Z]=meshgrid(linspace(-10,10));? ? %形成網(wǎng)格數(shù)據(jù)(X,Y,Z)
V=X.^2+Y.^2-Z.^2;? ? ? ? ? ? ? ? ? %形成體數(shù)據(jù)V
isosurface(X,Y,Z,V,1);? ? ? ? ? ? ? ? %繪制三維隱函數(shù)圖形X.^2+Y.^2-Z.^2=1
axis equal
colormap([1 0 0]);? ? ? ? ? ? ? ? ? ? %改變圖形顏色為紅色
brighten(0.5);? ? ? ? ? ? ? ? ? ? ? ? %進行增亮?
camlight right;? ? ? ? ? ? ? ? ? ? ? %設(shè)置光源位置
lighting phong;? ? ? ? ? ? ? ? ? ? ? %設(shè)置光照模式
figure(2);
fv=isosurface(X,Y,Z,V,1);? ? ? ? ? ? ? %計算等值面所對應(yīng)的面元和頂點
p=patch(fv);? ? ? ? ? ? ? ? ? ? ? ? %繪制等值面
set(p,'FaceColor','red','EdgeColor','none');? %修飾等值面
axis equal? ? ? ? ? ? ? ? ? ? ? ? ? ? %等比例顯示?

立體側(cè)視圖和俯視圖
矢量場可視化:
采樣點生成函數(shù)meshgrid
箭頭表示矢量函數(shù)quiver
流線函數(shù)streamline
示例:
x=-3:1:3;
y=-2:1:2;
[X,Y]=meshgrid(x,y)

采樣點矩陣
x = [0 0 0 0];
y = x;
u = [1 -1 0 0];
v = [0 0 1 -1];
quiver(x, y, u, v);

u = [1 1 1; 1 1 1];
v = u;
quiver(u, v);


流線函數(shù)streamline
三維矢量場圖:
[x,y]=meshgrid(-3:.5:3,-3:.5:3);? ? ? ? %生成所需的網(wǎng)格采樣點,x與y在-3到3區(qū)間
z=y.^2-x.^2;? ? ? ? %定義函數(shù)
[u,v,w]= surfnorm(z);? ? ? ? %取三維曲面的法線
quiver3(z,u,v,w) ;? ? %繪制三維矢量場圖

三維矢量場函數(shù)quiver3
梯度:
symsxyz%定義符號變量f=2*y*z*sin(x)+3*x*sin(z)*cos(y);%定義函數(shù)gradient(f,[x,y,z])%利用符號計算函數(shù)的梯度

梯度場示意圖
syms x y? ? ? ? ? ? ? ? ? ? %定義符號變量
F = -(sin(x) + sin(y))^2;? ? ? ? %定義函數(shù)
g = gradient(F, [x, y])? ? ? ? %計算梯度的表達式
[X, Y] = meshgrid(-1:.1:1,-1:.1:1); %產(chǎn)生網(wǎng)格
G1 = subs(g(1), [x y], {X,Y});? %用{X,Y}替換所有出現(xiàn)的[x,y],然后計算g(1)
G2 = subs(g(2), [x y], {X,Y});? %用{X,Y}替換所有出現(xiàn)的[x,y],然后計算g(2)
quiver(X, Y, G1, G2); ? %繪制梯度對應(yīng)的箭頭圖

等高線:
v = -2:0.2:2; %定義向量v
[x,y]=meshgrid(v); %利用v產(chǎn)生網(wǎng)格
z = x.* exp(-x.^2 - y.^2); %計算網(wǎng)格格點上的函數(shù)值
[px,py] = gradient(z,.2,.2); %數(shù)值方法計算梯度
figure?
contour(x,y,z); %繪制函數(shù)z的等高線
hold on; %保持模式打開
quiver(x,y,px,py); %繪制梯度的箭頭圖
hold off; %保持模式關(guān)閉

散度:
syms x y z real %定義符號變量
F = [ cos(x+2*y), sin(x-2*y) ]; %定義函數(shù)F
g = divergence(F,[x y])? ? ? ? ? ? ? ? %求函數(shù)F的散度,符號形式
divF=matlabFunction(g); %將散度轉(zhuǎn)換為函數(shù)形式
x=linspace(-2.5,2.5,20);
[X,Y]=meshgrid(x,x); %定義網(wǎng)格
Fx=cos(X+2*Y); %F的x分量
Fy=sin(X-2*Y); %F的y分量
div_num=divF(X,Y); %散度的數(shù)值形式
pcolor(X,Y,div_num); %繪制散度
shading interp; %差值
colorbar; %繪制色條
hold on; %保持繪圖模式打開
quiver(X,Y,Fx,Fy,'k','linewidth',1); %繪制箭頭圖

紅色部分為“源”,矢量流線發(fā)散;藍色部分為“匯(漏)”,矢量流線匯聚
旋度可視化:
計算旋度:
syms x y z
V = [x^3*y^2*z, y^3*z^2*x, z^3*x^2*y];
X = [x y z];
curl(V,X)

證明:一個標(biāo)量函數(shù)的梯度(函數(shù))的旋度恒為零。
syms x y z
f = x^2 + y^2 + z^2;
vars = [x y z];
curl(gradient(f,vars),vars)

計算結(jié)果
圖形:
%%計算一個余弦函數(shù)的一維拉普拉斯矩陣
syms x y z real %定義符號變量
F = [ cos(x+2*y), sin(x-2*y) ]; %定義函數(shù)F
G = curl([F,0],[x y z])? ? ? ? ? ? ? ? %計算F的旋度,并賦予G?
curlF=matlabFunction(G(3)); %將G的z分量,賦予curlF
x=linspace(-2.5,2.5,20);
[X,Y]=meshgrid(x,x); %定義網(wǎng)格
Fx=cos(X+2*Y); %計算F的x分量
Fy=sin(X-2*Y); %計算F的y分量
rot=curlF(X,Y); %計算旋度的值
pcolor(X,Y,rot); %繪制旋度
shading interp; %顏色做插值
colorbar; %繪制色條
hold on; %保持模式打開
quiver(X,Y,Fx,Fy,'k','linewidth',1); %繪制箭頭圖,并設(shè)置顏色為黑色,線寬為1
%%
syms x y z
V = [x^2*y, y^2*z, z^2*x];
vars = [x y z];
gradient(divergence(V,vars)) - curl(curl(V,vars),vars)

只顯示Z方向上的旋度的結(jié)果:順時針散度小于零,逆時針散度大于零
拉普拉斯運算的可視化:
矢量函數(shù)的拉普拉斯運算:
syms x y z
V = [x^2*y, y^2*z, z^2*x];
vars = [x y z];
gradient(divergence(V,vars)) - curl(curl(V,vars),vars)

del2函數(shù):有限差分法對拉普拉斯算子的擬合:
一維拉普拉斯矩陣:
x = linspace(-2*pi,2*pi); %定義x向量
U = cos(x); %計算cos(x)
L = 4*del2(U,x); %計算U的拉普拉斯,注意系數(shù)4
plot(x,U,x,L)? ? %畫出U和U的拉普拉斯曲線
legend('U(x)','L(x)','Location','Best') %給出圖例

本質(zhì)上就是求二階導(dǎo)
多元函數(shù):
[x,y] = meshgrid(-5:0.25:5,-5:0.25:5);? %定義函數(shù)在x,y方向的區(qū)域
U = 1/3.*(x.^4+y.^4);? ? ? ? ? ? ? ? %定義函數(shù)U
h = 0.25;? ? ? ? %U中各點的間距在所有方向上都相等,所以可以指定一個間距h
L = 4*del2(U,h);? %計算U的拉普拉斯變換
surf(x,y,L);
grid on;
title('Plot of $\Delta U(x,y) = 4x^2+4y^2$','Interpreter','latex')
xlabel('x');
ylabel('y');
zlabel('z');
view(35,14);
