MATLAB 中的二重积分

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

我试图找到高斯光束孔径中的功率,其中孔径偏离光束中心。解决方案是以下方程(参考)(抱歉,这里没有 LaTeX):

enter image description here

Wz 是一个常数,还有 ar。我不知道如何使用 MATLAB 做这样的事情。有人有建议吗?我知道有一个

dblquad()
函数,但它假设积分的限制是固定的,并且不相互依赖。

matlab numerical-integration
4个回答
3
投票

使用一点数学技巧,您可以将二重积分简化为一次积分(尽管包含误差函数),这应该更容易在 MATLAB 中进行数值计算:

enter image description here

(如有错误,请自行检查计算结果。)


3
投票

事实证明,更新版本的 MATLAB 现在有一个

quad2d()
函数,它可以在曲面上进行二维积分。参考页面上的示例 2 详细介绍了进行此类集成的示例。

我的代码最终看起来像这样:

powerIntegral = @(x,y) 2/(pi*W^2)*exp(-2*((x - offsetDist).^2 + y.^2)/(W^2)); 
ymin = @(x) -sqrt(radius.^2 - x.^2);
ymax = @(x) sqrt(radius.^2 - x.^2);
powerRatioGaussian = quad2d(powerIntegral,-radius,radius,ymin,ymax);

非常漂亮。感谢您的帮助。


1
投票

我不确定,但我认为符号工具箱可以在这里帮助你。它适合解决此类问题。您可以使用 syms 命令将变量定义为符号变量,并以符号方式计算积分。然后,您可以分配变量值并找到实际值。

免责声明:我自己从未真正使用过它。


0
投票

一般来说,对于数值积分,您可以通过乘以一个函数,将具有相关边界条件的积分转换为具有独立边界的积分,如果在原始边界内部,则为 1,如果在原始边界外部,则为 0。然后将你的极限作为包含你的原始条件的正方形。换句话说,在这里你将乘以

g(x,y) = ((x^2 + y^2) < a^2)

你的极限是 -a

您必须对积分方法中的连续性假设稍微小心,但除非出现非常奇怪的情况,否则应该没问题。您始终可以通过更改像元大小并确保计算的积分值不会改变来进行检查。

在这种特殊情况下,您还可以进行从笛卡尔坐标到极坐标的转换;

x = rcos(t)

y = rsin(t)

dxdy = rdrdt

那么你的积分极限就是 r 从 0 到 a,t 从 0 到 2*pi

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