我想在 MATLAB 中以数值方式计算复值函数(全纯函数)的导数。
我已经计算了复平面上网格中的函数,并且尝试使用柯西-黎曼关系来计算导数。
鉴于:
u = 实数(f),v = imag(f),x = 实数(点),y = imag(点)
导数应由下式给出: f' = du/dx + i dv/dx = dv/dy - i du/dy
其中“d”是导数运算符。
我尝试过以下代码:
stepx = 0.01;
stepy = 0.01;
Nx = 2/stepx +1;
Ny = 2/stepy +1;
[re,im] = meshgrid([-1:stepx:1], [-1:stepy:1]);
cplx = re + 1i*im;
z = cplx.^3;
导数应由下式给出:
f1 = diff(real(z),1,2)/stepx +1i* diff(imag(z),1,2)/stepx;
or
f2 = diff(imag(z),1,1)/stepy - 1i* diff(real(z),1,1)/stepy;
但是这两个导数本应相等,但并不匹配。
我究竟做错了什么?
让我们计算差异小于stepx的元素数量(假设stepx=stepy):
lm = min(size(f1));
A = f1(1:lm,1:lm);
B = f2(1:lm,1:lm);
sum(sum(abs(A - B) <= stepx))
并使用@A 提出的修复。唐达
f1i = interp1(1 : Ny, f1, 1.5 : Ny);
f2i = interp1(1 : Nx, f2 .', 1.5 : Nx) .';
sum(sum(abs(f1i - f2i) <= stepx))
在第二种情况下,它们的差异都小于stepx,而在第一种情况下,情况并非如此。