罗兰在MATLAB的艺术gydF4y2Ba

把想法变成MATLABgydF4y2Ba

请注意gydF4y2Ba

罗兰在MATLAB的艺术gydF4y2Ba已经存档,不会被更新。gydF4y2Ba

二维集成在一个域gydF4y2Ba

有几个请求上gydF4y2BaMATLAB新闻组gydF4y2Ba计算非矩形域上的面积函数。MATLAB的函数gydF4y2BadblquadgydF4y2Ba使用这项技术,我今天要说明矩形域。我刚注意到gydF4y2Ba这个条目gydF4y2Ba在文件交换做二维正交非矩形域。听起来相似但我没有尝试过自己。gydF4y2Ba

内容gydF4y2Ba

先做一个小管家。gydF4y2Ba

s =警告(gydF4y2Ba“关闭”gydF4y2Ba,gydF4y2BaMATLAB: quadl: MinStepSizegydF4y2Ba);gydF4y2Ba

矩形区域gydF4y2Ba

通过集成计算矩形的面积,我们可以打电话gydF4y2BadblquadgydF4y2Ba正如我之前提到的。gydF4y2Ba

= 4;b = 3;dblquad (@ (x, y)的(大小(x)), 0, 0, b)gydF4y2Ba%gydF4y2Ba%,我们看到我们期望的结果:3 * 4 = 12。gydF4y2Ba
ans = 12gydF4y2Ba

矩形域gydF4y2Ba

集成在矩形区域更有趣的东西,我们只是提供一个不同的函数。例如,让我们来gydF4y2Bax * ygydF4y2Ba被积函数。我们可以先做这个分析。gydF4y2Ba

现在让我们评估数值积分gydF4y2BadblquadgydF4y2Ba并比较分析的答案。使用默认的宽容和我gydF4y2BaquadlgydF4y2Ba集成的方法。gydF4y2Ba

托尔= [];qnumeric = dblquad (@ (x, y) x * y, 0, 0, b,托尔,@quadl) qexact = (^ 2 * b ^ 2) / 4gydF4y2Ba
qnumeric = 36 qexact = 36gydF4y2Ba

椭圆域gydF4y2Ba

一个椭圆的方程可以写成:gydF4y2Ba

我们可以重写gydF4y2BaygydF4y2Ba的函数gydF4y2BaxgydF4y2Ba右上角的象限gydF4y2Ba

我们现在可以写椭圆的方程的区域通过集成身份被积函数从0到正确的每个值的限制gydF4y2BaxgydF4y2Ba。gydF4y2Ba

现在我们准备建立一个代表内积分函数处理。让我们画出函数。gydF4y2Ba

跳频= @ (x) quadl (@ (y)的(大小(y)), 0, b * sqrt (1 - (x / a) ^ 2));x = 0: / 100:;字母l = arrayfun (fh, x);情节(x, l形);标题(gydF4y2Ba“第一象限椭圆边界”gydF4y2Ba);轴gydF4y2Ba平等的gydF4y2Ba

我使用的原因gydF4y2BaarrayfungydF4y2Ba评估gydF4y2Ba跳频gydF4y2Ba以上是我不能使用相同的原因gydF4y2BaquadlgydF4y2Ba外的积分。gydF4y2Ba跳频gydF4y2Ba不是一个矢量函数,我不能使它成为一个。评估gydF4y2Ba跳频gydF4y2Ba为每个值gydF4y2BaxgydF4y2Ba,我计算积分每一点和集成是一个函数的极限gydF4y2BaxgydF4y2Ba。此外,对于每一个值gydF4y2BaxgydF4y2Ba时停止,集成方法的解决方案符合正确的数值标准,因此每次集成可能不执行相同数量的评估函数,他们一定也不会评估单独被积函数在同一位置。gydF4y2Ba

简单地调用gydF4y2BaquadlgydF4y2Ba定义的函数gydF4y2Ba跳频gydF4y2Ba以上行不通因为同样的原因,我不能只是vectorize函数被积函数的评估。相反,我们需要一个集成的方法,不假设被积函数是矢量化。这就是gydF4y2BaquadvecgydF4y2Ba,代码下,我要给你(和它的类似的内部运作gydF4y2BadblquadgydF4y2Ba)。gydF4y2Ba

dbtypegydF4y2BaquadvecgydF4y2Ba
1函数q = quadvec quadvec调用四(f,变长度输入宗量)2%,但假设你不能vectorize输入函数。3% QUADVEC相同的调用语法四但不要求4%被积函数是矢量化。双-这使得QUADVEC适合执行5%,三,和高阶积分非矩形域的6%。7% Q = QUADVEC(有趣,A, B)试图近似纯量值8%的积分函数的乐趣从A到B在一个错误的1。辛普森自适应正交e-6使用递归的9%。有趣的是一个函数处理。10% - 11%的例子:12%计算椭圆面积计算结果在一个象限和13%然后乘以4。注意,内部被积函数集成14%限制较明显的函数和椭圆的长轴15%,a和b。首先我们16%设置函数句柄内被积函数,跳频。17% = 4;b = 3;18% fh = @ (x) quadl (@ (y)的(大小(y)), 0, b * sqrt (1 - (x / a) ^ 2)); 19 % ea = 4 * quadvec(fh , 0, a); 20 % ea-pi*a*b % compare integration result to closed-form solution 21 22 q = quadl(@g, varargin{:}); % like quadl, but supplies g as the argument 23 function y = g(X) % make f into a "vectorized" function 24 y = zeros(size(X)); 25 for i = 1:numel(X) 26 y(i) = f(X(i)); % this f refers to the argument of quadvec 27 end 28 end 29 end

你可以看到,我们要确保我们所说的被积函数为每个值分别和我们实现这一目标通过函数处理“矢量”通过创建一个函数处理嵌套函数,并使用这个新功能,gydF4y2BaggydF4y2Ba被积函数。看着gydF4y2BaggydF4y2Ba中,您可以看到,在第25行开始,我们使用一个for循环遍历所有的输入值。gydF4y2Ba

我们现在准备计算椭圆的面积。记住,因为我们只在一个象限,我们需要将结果乘以4。gydF4y2Ba

ellipseArea = 4 * quadvec (fh, 0,)gydF4y2Ba
ellipseArea = 37.6991gydF4y2Ba

和我们比较分析公式:gydF4y2Ba

ellipseAreaAnalytic =π* a * bgydF4y2Ba
ellipseAreaAnalytic = 37.6991gydF4y2Ba

做一个最后的管家。gydF4y2Ba

警告(s);gydF4y2Ba

总结gydF4y2Ba

今天我向您展示了如何执行集成在更高的维度与引入MATLABgydF4y2BaquadvecgydF4y2Ba。你可以看到,gydF4y2BaquadvecgydF4y2Ba确保我们所说的被积函数一个元素允许我们覆盖情况下,被积函数不是矢量化。注意,您可以使用gydF4y2BaquadvecgydF4y2Ba被积函数在1尺寸,但是性能可能会比使用gydF4y2BaquadlgydF4y2Ba假设被积函数是矢量化。gydF4y2Ba


使用MATLAB®7.2发表gydF4y2Ba


  • 打印gydF4y2Ba

评论gydF4y2Ba

留下你的评论,请点击gydF4y2Ba在这里gydF4y2BaMathWorks账户登录或创建一个新的。gydF4y2Ba