在 MATLAB 中数值计算复值函数的导数

2024-04-18

我想在 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,而在第一种情况下,情况并非如此。


问题是,使用两个不同的表达式(在 Matlab 中进行离散化),您正在计算复平面中不同点的近似导数。假设您处于虚数 y 并计算沿实轴 x 的差值,则第 i 个差值估计为(x(i) + x(i + 1))/2,即两个后续 x 值之间的所有中点。相反,您可以估计给定 x 处但两个后续 y 值之间的所有中点处的导数。

这也导致所得矩阵的大小不同。使用第一个公式,您将得到一个大小为 201x200 的矩阵,另一个大小为 200x201 的矩阵。这是因为在第一个变体中,沿 x 方向有 200 个中点,但 y 值有 201 个,反之亦然。

所以答案是,你没有做错任何事,你只是错误地解释了结果。


您可以通过沿另一个维度(不用于导数的维度)显式插值来解决该问题:

f1i = interp1(1 : Ny, f1, 1.5 : Ny);
f2i = interp1(1 : Nx, f2 .', 1.5 : Nx) .';

Where f1根据您的第一个公式计算并且f2根据第二个。现在,两个导数都在两个维度的中点处进行计算,这就是两个矩阵大小均为 200x200 的原因。

如果你现在比较它们,你会发现它们在数值误差上是相同的(毕竟,diff仅计算近似导数并且interp1会产生插值错误)。对于您的步长,此误差最大为 1e-4,并且可以通过使用更小的步长来进一步减小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 MATLAB 中数值计算复值函数的导数 的相关文章

  • MATLAB 图像锐化 - 使用(1-高斯低通滤波器)的高斯高通滤波器

    我试图通过设计高斯高通滤波器来锐化图像 我想利用高通滤波器相当于单位矩阵减去低通滤波器的事实来做到这一点 所以我执行了以下操作 image imread Question3 Data Cats jpg read image H 1 fspe
  • 如何在 MATLAB 中创建带有分级标记颜色的散点图?

    我想在 MATLAB 中绘制一个简单的散点图 标记颜色从光谱的一端到另一端各不相同 例如红色 橙色 黄色 蓝色 紫色 我的数据比较了一段时间内河流的水量和水质 3 个简单的列 时间 水量 质量 我想绘制数量与质量的 x y 散点图 但颜色随
  • 证明:为什么 java.lang.String.hashCode() 的实现与其文档相符?

    JDK 文档为java lang String hashCode http java sun com javase 6 docs api java lang String html hashCode famously https stack
  • 有效地将相似的数字分组在一起[重复]

    这个问题在这里已经有答案了 可能的重复 一维数数组聚类 https stackoverflow com questions 11513484 1d number array clustering 我有一个数字数组 例如 1 20 300 4
  • 如何在Matlab脚本中将泰勒级数系数存储到数组中

    这个问题是在 m 脚本的上下文中 我知道如何获取函数的泰勒级数 但我没有看到任何命令允许将级数的系数存储到数组中 sym2poly似乎不起作用 如何将系数存储到数组中 例如这个函数 syms x f 1 x 2 4 x 9 我们怎样才能得到
  • 具有行进立方体的隐式曲面上的 CSG 操作

    我用行进立方体渲染等值面 或者也许游行广场 https en wikipedia org wiki Marching squares因为这是二维的 我想做集合运算 比如集合差 交集和并集 我认为这很容易实现 只需在两个不同隐式曲面的两个顶点
  • Matlab 中 interp2 的类似 OpenCV Api

    有没有类似的功能 其工作原理与 interp2 x y frame z xd yd linear 0 在 OpenCV 中 功能cv remap 几乎可以满足您的要求 请参阅文档here http docs opencv org modul
  • MATLAB 链表

    有哪些可能的方法来实现链表MATLAB http en wikipedia org wiki MATLAB 注意 我问这个问题是为了教学价值 而不是实用价值 我意识到 如果您实际上在 MATLAB 中滚动自己的链表 那么您可能做错了什么 然
  • 将 Android 应用程序与服务器上的 Matlab 应用程序连接

    我正在 Android 上开发一个应用程序 它将获取图像输入 并将该输入传递到安装 MATLAB 应用程序的服务器 MATLAB 应用程序将计算结果并将其返回到该 Android 应用程序 我想知道我可以使用哪个服务器 如何将 MATLAB
  • 将 Matlab MEX 文件中的函数直接嵌入到 Python 中

    我正在使用专有的 Matlab MEX 文件在 Matlab 中导入一些仿真结果 当然没有可用的源代码 Matlab 的接口实际上非常简单 因为只有一个函数 返回一个 Matlab 结构体 我想知道是否有任何方法可以直接从Python调用M
  • 在二维空间中从 A 点前往 B 点?

    我正在开发一个项目 需要我计算从可变点 A 到可变点 B 的 0 360 度航向 以使 A 点的物体面向 B 点 现在 我不确定如何实现这一目标 我用谷歌搜索但没有找到任何好的解决方案 在任何情况下 如何计算二维空间中从 A 点到 B 点的
  • 如何将Matlab代码库与Android集成?

    我有一个算法和 MATLAB 中的一些其他代码 我想在我的 Android 应用程序中使用它 我怎样才能做到这一点 我可以从 MATLAB 制作 jar 文件以便与 Android 一起使用吗 我必须做点别的事吗 如果您还有其他产品 适用于
  • 找到两个移动物体的更好交点

    我想极大地优化我的算法之一 我将尽力以最好的方式解释它 主题 我们当时处于二维欧几里德系统中t 0 在这个系统中有两个对象 O1 and O2 O1 and O2分别位于点PA and PC O1移动于常数和已知点方向的速度PB 当物体到达
  • 如何选择部分密集数据集的均匀分布子集?

    P是一个 n d 矩阵 持有nd 维样本 P某些地区的密度是其他地区的几倍 我想选择一个子集P其中任意样本对之间的距离大于d0 并且我需要将其传播到整个区域 所有样本都具有相同的优先级 无需优化任何内容 例如覆盖面积或成对距离之和 这是执行
  • 查找数组中元素之间的平均差异的有效方法

    希望标题不会让人困惑 通过例子来展示很简单 我有一个像这样的行向量 1 5 6 我想找到每个元素之间的平均差异 此示例中的差异为 4 和 1 因此平均值为 2 5 这是一个小例子 我的行向量可能非常大 我是 MatLab 新手 那么有没有一
  • 将 3d 矩阵重塑为 2d 矩阵

    我有一个 3d 矩阵 n by m by t 在 MATLAB 中表示n by m一段时间内网格中的测量值 我想要一个二维矩阵 其中空间信息消失了 只有n m随着时间的推移测量t剩下 即 n m by t 我怎样才能做到这一点 你需要命令r
  • 优雅的折线“左移”测试

    Given X Y 坐标 即车辆的位置 X Y 数组 它们是折线中的顶点 请注意 折线仅由直线段组成 没有圆弧 我想要的是 计算车辆是在折线的左侧还是右侧 当然还是在顶部 我的做法 迭代所有线段 并计算到每个线段的距离 然后 对于最近的段
  • 白色像素簇提取

    我正在研究指纹毛孔提取项目 并陷入毛孔 白色像素簇 提取的最后阶段 我有两个输出图像 我们可以从中获取毛孔 但不知道该怎么做 这两个图像的尺寸不同 image1 的尺寸为 240 320 image2 的尺寸为 230 310 这是我的图像
  • 这是 `min` 和 `nanmin` 之间的区别; Matlab 中的“max”和“nanmax”?

    Matlab描述nanmin and nanmax像这样 NANMIN最小值 忽略NaNs NANMAX最大值 忽略NaNs 但实际上 min and max ignore NaNs too 那我应该使用哪个 根据我的测试 nanmin a
  • 在 MATLAB 中用两个值替换向量值

    我必须创建一个以向量作为输入的函数v和三个标量a b and c 该函数替换了的每个元素v等于a有一个二元素数组 b c 例如 给定v 1 2 3 4 and a 2 b 5 c 5 输出将是 out 1 5 5 3 4 我的第一次尝试是尝

随机推荐