Matlab-有限差分格式的验证
提示:离散网格边界的向前向后二阶差分
一、代码
clear
clc
x=linspace(-1,1,1001)
y = linspace(-1,1,1001)
h1=0.002;
h2=0.002;
[y,x] = meshgrid(y,x);
syms xx yy z
z = sqrt(10^2-xx^2-yy^2)
fsurf(z)
digits 8
zz = zeros(size(x));
for i=1:101
for j=1:101
zz(i,j) = subs(z,[xx,yy],[x(i,j),y(i,j)]);
end
end
for i=1:101
for j=1:101
if i==1&&j==1
z_xx = -(-9*r(i,j)+24*r(i+1,j)-22*r(i+2,j)+8*r(i+3,j)-r(i+4,j))/4/(h1)^2;
z_xy = -(-9*r(i,j)+12*r(i,j+1)-3*r(i,j+2)+12*r(i+1,j)-16*r(i+1,j+1)+4*r(i+1,j+2)-3*r(i+2,j)+4*r(i+2,j+1)-r(i+2,j+2))/4/h1/h2;
end
end
end
f = subs(diff(diff(z,xx),xx),[xx,yy],[-1,-1])%((-1)^2-100)/sqrt(100-1-1)^3
ff = subs(diff(diff(z,xx),yy),[xx,yy],[-1,-1])
二、结果
可以查看两种方法得到的数值结果,并进行对比,可以发现,当差分网格越密集,即离散数越多,有限差分结果与实际求导得到的结果越接近。