一个简单的模型——如何解决指数很大时导致的数值问题
mathematica吧
全部回复
仅看楼主
level 3
轰天雷sss 楼主
我们知道在复平面中解析区域内取任何一个回路进行积分,当回路中没有奇点时积分结果应该为0。我们取被积函数func[\[Beta]_, i_] := \[Beta]^i/(2 \[Pi] I ),其中含一个指数项。我们选取的路径保证这个函数始终没有任何奇点。当选取单位圆积分时,结果如图1,没有问题;当选取一个平移后的半径为1的圆时(图2),积分结果在i较大时出现了一个拐点,随后保持相同的斜率增大,造成了明显的数值问题(图3)。根据个人经验,原因应该是积分路径一部分在单位圆之外一部分在之内,对应复数的模一部分大于1一部分小于1,因此当指数很大时,总有一部分被放大,如果路径完全在单位圆内(图4)或外(图5)则不会出数值问题。现在想请教一下这个数值问题该怎么解决(让图3不要出现向上的拐点,一直保持斜率减小),谢谢!
2023年07月02日 09点07分 1
level 3
轰天雷sss 楼主
func[\[Beta]_, i_] := \[Beta]^i/(2 \[Pi] I );
Gi50 = NIntegrate[
func[Cos[x] + 0.5 + I Sin[x], i], {x, -\[Pi], \[Pi]}];
Gi = Table[Norm[Gi50], {i, 1, 150, 1}];
ListLogPlot[Gi]
2023年07月02日 09点07分 2
吧务
level 10
狠狠加精度应该有效,不过可能不甚聪明
2023年07月02日 19点07分 5
1