MATLAB - 复数线/路径积分

问题描述 投票:0回答:2

我正在尝试使用积分命令在几个圆形闭合路径上找到复杂的线/路径积分。我的 1/(z-i)^2 在逆时针遍历一次圆 {z:|z|=2} 上的积分代码如下:

fun = @(z) 1 ./((z-1i) .^ 2);;
g = @(t) 2 .*(cos(t) + 1i .* sin(t));
gprime = @(t) 2 .*(-sin(t) + 1i .* cos(t));
q1 = integral(@(t) fun(g(t)) .* gprime(t),0,2 .* pi)

(我希望答案是 0 并且 matlab 给出 6.6613*10^(-16)-4.4409*10^(-16)i)。

我的 e^z/(z(z^2-9)) 在逆时针遍历一次的圆 {z:|z-2|=3} 上的积分代码如下:

fun = @(z) exp(z) ./(z .* (z.^2-9));
g = @(t) 2+3 .*(cos(t) + 1i .* sin(t));
gprime = @(t) 2+3 .*(-sin(t) + 1i .* cos(t));
q1 = integral(@(t) fun(g(t)) .* gprime(t),0,2 .* pi)

(我期望答案是 pi/9(e^3-2)i,但 matlab 给出 5.4351+6.3130i)。

从上面可以看出,我的问题是,虽然当圆形路径以原点为中心时代码给出了准确的值,但否则它会失败;有时给出准确的虚部但不准确的实部或只是完全不准确的答案。

有人能看出出了什么问题吗?

matlab octave numerical-integration
2个回答
0
投票

我已经回答了评论中的第一个问题。

对于第二个问题,你在计算导数时犯了一个错误:加性常数 2 应该消失。这样你得到的结果是6.3130i,完全符合理论值。

fun = @(z) exp(z) ./(z .* (z.^2-9));
g = @(t) 2+3 .*(cos(t) + 1i .* sin(t));
gprime = @(t) 3 .*(-sin(t) + 1i .* cos(t));
q1 = integral(@(t) fun(g(t)) .* gprime(t),0,2 .* pi)

我借此机会建议您,不要使用以前的方法,而是通过“路点”方法来计算复数积分 (例如参见 https://uk.mathworks.com/help/matlab/math/complex-line-integrals.html);在这里,将会是

C=[-2+i,-2-i,5-i,5+i];
integral(@(z) (exp(z) ./(z .* (z.^2-9))),1,1,'WayPoints',C)

其中 C 是一个正方形(更一般地说是任何正方形),仅包围所需的极点。 (始终取第二个和第三个参数为1,1)

附录:通过留数定理快速个人检查理论值:

2i pi(Res(f,0)+Res(f,3))=2i pi(1/(-9)+e^3/(27-9))。


0
投票

您对第二个问题的期望答案是不正确的。 Mathematica 告诉我答案应该是:

pi*(2/45)*(5 + (exp(2))*(5*exp(1) - 9)) + (pi/9 *(exp(3) - 2))*i

= 5.435120011473026 + 6.313043326012592i

这几乎就是你从 Matlab 得到的答案。

请记住,Matlab 中的

integral
函数执行数值积分,因此您得到的结果将受到机器舍入误差的影响。这意味着你对第一个问题得到的结果也基本上是正确的;这可能是通过数值积分可以获得的最佳答案。

© www.soinside.com 2019 - 2024. All rights reserved.