§3 差分 微分 梯度 一、知识背景 差分运算的大体概念: 在物理问题(如电磁场)的数值分析的计算方式中,有限差分法是应用最先的一种方式,直至今天,它仍以其简单、直观的特点而取得普遍应用。不管是常微分方程、偏微分方程,线性方程或非线性方程,通常都可利用有限差分方式转化为代数方程组,借助运算机求得数值解。 设函数为f(x),其独立变量x有一很小的增量,那么该函数f(x)的增量为:f(x)f(xh)f(x),称为一阶差分。与微分不同,因是有限量的差,因此称有限差分。一阶差分除以增量h的商,为一阶差商: f(x)f(xh)f(x) xh还可计算一阶差分的差分,取得二阶差分,即:2f(x)f(xh)f(x)。 能够近似用差商表示函数f(x)的导数及偏导数。咱们能够用各离散点上函数的差商来近似代替该点的偏导数,将需求解的边值问题转化为一组相应的差分方程,依照差分方程组解出位于各离散点上的待求函数值,即相应的数值解。 二、计算差分指令diff 语句格式:diff(x)--- 符号意义:假设x是行矢量,那么指令diff(x)计算式为[x(2)-x(1),x(3)-x(2), … x(n)-x(n-1)],即后项减前项。 假设x是矩阵,那么指令计算为后行减前行,即对矩阵的行矢量作差分计算所得矩阵为[x(2:n,:)-x(1:n,:)]。 diff(x,n) 指令对矩阵x的列矢量计算n阶差分,n应小于或等于矩阵列矢量的元素数。 diff(x,n,dim) 指令对矩阵x中,由dim代表的维作差分计算,若是n大于或等于dim的维元素数,那么返回空矩阵。 例1:对矩阵x, 作不同情形下的差分运算。 >>x=[1,3,5;6,4,2],z1=diff(x),z2=diff(x,1,1),z3=diff(x,1,2),z4=diff(x,2,2),z5=diff(x,3,2) x = 1 3 5 6 4 2 z1 = 5 1 -3 z2 = %对x的每列进行一阶差分计算,结果为后行减前行,和diff(x),diff(x,1)结果相同 5 1 -3 z3 = %对x的每行进行一阶差分计算,结果是后列减前列 2 2 -2 -2 z4 = %对x每行进行二阶差分计算 0 0 z5 = %对每行作三阶差分计算。结果取得一个空矩阵 Empty matrix: 2-by-0 三、微分 导数 一阶差分f(x)f(xh)f(x),一阶差商f(x)f(xh)f(x) xh当增量h很小,差分f(x)与微分df(x)之间不同将很小,因此可用diff粗略求微分。而导数可近似用差商计算,df(x)f(x)f(xh)f(x)。dxxh另外,也可用gradient(f,h)梯度指令作为数值计算近似公式求导数。 例2:对函数y=cos(x2)求导数,用差分、求导公式、求梯度,不同方式运算,并进行比较。 >> h=;x=0:h:pi/2; y=cos(x.^2); y1=diff(y)/h; %用差商求导 y2=-sin(x.^2)*2.*x; %用求导数公式 y3=gradient(y,h); %用求梯度公式 plot(x,y,'k',x(1:end-1),y1+,'r',x,y2,'b',x,,'g'), grid 例 2 图 图中,最上面线为y~x函数曲线,下面三条线别离为:中间蓝色的为用导数公式求的导数曲线,上面红色的为用差商求的导数曲线,下面绿色的为用梯度求的曲线。上、下两条线已通过技术处置()不然三线大体重在一路。从这结果也看出三种方式求导结果大致相同。可自行绘制y1-y2,y3-y2图线,看其情形。 四、矩阵或多维列阵的梯度 语句格式: [fx fy]= gradient( f ) [fx fy]= gradient( f, h ) [fx fy]= gradient( f, hx, hy ) 符号意义: fy 代表df/dy,是y(行)方向的偏微分; fx 代表df/dx,是x(列)方向的偏微分; f(需求梯度)的矩阵或列阵。 h 标量,是各个方向的步长,其默许值为1。 hx,hy 为标量或矢量,别离表示在x、y方向上的步长,假设为矢量,其长度应与f对应维的元素数相等。 例3:已知V线散布。 >>v='(x.^2+y.^2).^'; %以字符串方式输入电势V的方程 xmax=10;ymax=10;ngrid=20; %确信x,y画图范围和网格线数 xplot=linspace(-xmax,xmax,ngrid); [x,y]=meshgrid(xplot); %生成二维网络(x,y网络) vplot=eval(v); %执行输入字符串 [Explot,Eyplot]=gradient(-vplot); %计算电场(E) meshc(vplot), %含等高线的三维曲面 figure(2), 1,绘制电场E空间散布图形,E矢量场图和等位22xysubplot(1,2,1), meshc(vplot), xlabel('x'),ylabel('y');zlabel('U'), %加注坐标轴 subplot(1,2,2), axis([-xmax,xmax,-ymax,ymax]), %等高线图范围及比例 cs=contour(x,y,vplot); %绘制等高线 clabel(cs), %等高线图标出字符 hold on; quiver(x,y,Explot,Eyplot), %箭头图 xlabel('x'),ylabel('y'), hold off 例 3 图 练习三: 如何取得V和E的数值解? 针对不同V的函数,练习编写程序。观看分析图形。 (1)Vlog(2x24y2); (2)V2x24y2. 本文来源:https://www.wddqw.com/doc/dc0ccc4c24d3240c844769eae009581b6bd9bdf2.html