MATLAB - 复数 line/path 积分
MATLAB - complex line/path integral
我正在尝试使用积分命令在一些圆形闭合路径上找到复杂的 line/path 积分。我对 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)。
如上所示,我的问题是,当圆形路径以原点为中心时,代码会给出准确的值,否则会失败;有时给出准确的虚部但不准确的实部或只是一个完全不准确的答案。
谁能看出哪里出了问题?
您对第二个问题的预期答案不正确。 Mathematica 告诉我答案应该是:
pi*(2/45)*(5 + (exp(2))*(5*exp(1) - 9)) + (pi/9 *(exp(3) - 2))*i
= 5.435120011473026 + 6.313043326012592i
这几乎就是您从 Matlab 得到的答案。
请记住,Matlab 中的 integral
函数执行 数值 积分,因此您获得的结果将受到机器舍入误差的影响。这意味着你得到的第一个问题的结果基本上也是正确的;这可能是您可以通过数值积分获得的最佳答案。
我已经在评论中回答了第一个问题。
第二题,你计算导数时出错:加法常数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)
我借此机会建议你,用"way points"方法计算复数积分,而不是以前的方法
(参见示例 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)).
我正在尝试使用积分命令在一些圆形闭合路径上找到复杂的 line/path 积分。我对 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)。
如上所示,我的问题是,当圆形路径以原点为中心时,代码会给出准确的值,否则会失败;有时给出准确的虚部但不准确的实部或只是一个完全不准确的答案。
谁能看出哪里出了问题?
您对第二个问题的预期答案不正确。 Mathematica 告诉我答案应该是:
pi*(2/45)*(5 + (exp(2))*(5*exp(1) - 9)) + (pi/9 *(exp(3) - 2))*i
= 5.435120011473026 + 6.313043326012592i
这几乎就是您从 Matlab 得到的答案。
请记住,Matlab 中的 integral
函数执行 数值 积分,因此您获得的结果将受到机器舍入误差的影响。这意味着你得到的第一个问题的结果基本上也是正确的;这可能是您可以通过数值积分获得的最佳答案。
我已经在评论中回答了第一个问题。
第二题,你计算导数时出错:加法常数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)
我借此机会建议你,用"way points"方法计算复数积分,而不是以前的方法 (参见示例 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)).