函数在任意三角区域二重积分的计算

函数在任意三角区域二重积分的计算

三角区域变换

设有三角形 △ A B C \triangle ABC ABC其中 A : ( x 1 , y 1 ) , B : ( x 2 , y 2 ) , C ( x 3 , y 3 ) A:(x_1,y_1),B:(x_2,y_2),C(x_3,y_3) A:(x1,y1),B:(x2,y2),C(x3,y3),现在我们将三角形以点 A A A为定点,旋转三角形 △ A B C \triangle ABC ABC一定角度 θ \theta θ,记旋转后的三角形为 △ A ′ B ′ C ′ \triangle A'B'C' ABC,使得边 A ′ B ′ A'B' AB y y y 轴平行(即 x 1 ′ = x 2 ′ x_1'=x_2' x1=x2)且 y 1 ′ < y 2 ′ y_1'<y_2' y1<y2,其中 △ A B C ≅ △ A ′ B ′ C ′ , x 1 = x 1 ′ , y 1 = y 1 ′ \triangle ABC\cong\triangle A'B'C',x_1=x_1',y_1=y_1' ABCABC,x1=x1,y1=y1

  • 目的:使得变换后的三角形从纵向上看,边 A ∗ C ∗ A^*C^* AC为下边界, B ∗ C ∗ B^*C^* BC为上边界。

旋转变换:

设点 P : ( x , y ) P:(x,y) P:(x,y)围绕点 A ( x 1 , y 2 ) A(x_1,y_2) A(x1,y2)旋转角度 θ \theta θ后得到 P ′ : ( x ′ , y ′ ) P':(x',y') P:(x,y),则有

[ x ′ y ′ ] = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] [ x − x 1 y − y 1 ] + [ x 1 y 1 ] \begin{bmatrix}x' \\y' \end{bmatrix}=\begin{bmatrix}\cos\theta&-\sin\theta \\\sin\theta &\cos\theta\end{bmatrix}\begin{bmatrix}x-x_1 \\y-y_1 \end{bmatrix}+\begin{bmatrix}x_1 \\y_1 \end{bmatrix} [xy]=[cosθsinθsinθcosθ][xx1yy1]+[x1y1]

对应的逆变换为(这个后面求 J a c o b i Jacobi Jacobi行列式时会使用到,其实这个变换的 J a c o b i Jacobi Jacobi行列式为 1 1 1):

[ x y ] = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] [ x ′ − x 1 y ′ − y 1 ] + [ x 1 y 1 ] \begin{bmatrix}x \\y \end{bmatrix}=\begin{bmatrix}\cos\theta&\sin\theta \\-\sin\theta &\cos\theta\end{bmatrix}\begin{bmatrix}x'-x_1 \\y'-y_1 \end{bmatrix}+\begin{bmatrix}x_1 \\y_1 \end{bmatrix} [xy]=[cosθsinθsinθcosθ][xx1yy1]+[x1y1]

进而旋转三角形是简单的,只需以 A A A点为定点,角度 θ \theta θ由向量 A B ⃗ = ( x 2 − x 1 , y 2 − y 1 ) \vec{AB}=(x_2-x_1,y_2-y_1) AB =(x2x1,y2y1) y y y的正半轴的夹角确定, C C C围绕 A A A旋转 θ \theta θ角度即可。

  1. x 2 − x 1 > 0 x_2-x_1>0 x2x1>0时, α = arctan ⁡ y 2 − y 1 x 2 − x 1 \alpha = \arctan\frac{y_2-y_1}{x_2-x_1} α=arctanx2x1y2y1是向量 A B ⃗ \vec{AB} AB x x x正半轴的夹角,此时 A B ⃗ \vec{AB} AB 需要旋转 θ = π / 2 − α \theta=\pi/2-\alpha θ=π/2α方能满足条件(条件: x 1 ′ = x 2 ′ x_1'=x_2' x1=x2 y 1 ′ < y 2 ′ y_1'<y_2' y1<y2);
  2. x 2 − x 1 < 0 x_2-x_1<0 x2x1<0时, α = arctan ⁡ y 2 − y 1 x 2 − x 1 \alpha = \arctan\frac{y_2-y_1}{x_2-x_1} α=arctanx2x1y2y1是向量 A B ⃗ \vec{AB} AB x x x负半轴的夹角,此时 A B ⃗ \vec{AB} AB 需要旋转 θ = − π / 2 − α \theta=-\pi/2-\alpha θ=π/2α方能满足条件(条件: x 1 ′ = x 2 ′ x_1'=x_2' x1=x2 y 1 ′ < y 2 ′ y_1'<y_2' y1<y2);
  3. x 2 − x 1 = 0 x_2-x_1=0 x2x1=0时,(1)若 y 1 < y 2 y_1<y_2 y1<y2,令 θ = 0 \theta=0 θ=0 ,即此时满足条件,无需选择;(2)若 y 1 > y 2 y_1>y_2 y1>y2,令 θ = p i \theta=pi θ=pi ,即将三角形以 A A A为定点旋转角度 π \pi π即可满足条件(条件: x 1 ′ = x 2 ′ x_1'=x_2' x1=x2 y 1 ′ < y 2 ′ y_1'<y_2' y1<y2)。
实验例子1

绘制 A B ⃗ = ( x 2 − x 1 , y 2 − y 1 ) \vec{AB}=(x_2-x_1,y_2-y_1) AB =(x2x1,y2y1)的四种情况的三角形以及旋转后的三角形

x 2 − x 1 > 0 , y 2 − y 1 > 0 x_2-x_1>0,y_2-y_1>0 x2x1>0,y2y1>0 x 2 − x 1 < 0 , y 2 − y 1 > 0 x_2-x_1<0,y_2-y_1>0 x2x1<0,y2y1>0
在这里插入图片描述在这里插入图片描述
x 2 − x 1 < 0 , y 2 − y 1 < 0 x_2-x_1<0,y_2-y_1<0 x2x1<0,y2y1<0 x 2 − x 1 > 0 , y 2 − y 1 < 0 x_2-x_1>0,y_2-y_1<0 x2x1>0,y2y1<0
在这里插入图片描述在这里插入图片描述
实验例子2

绘制 A B ⃗ = ( x 2 − x 1 , y 2 − y 1 ) \vec{AB}=(x_2-x_1,y_2-y_1) AB =(x2x1,y2y1)的两种一般情况的三角形以及旋转后的三角形

x 2 − x 1 = 0 , y 2 − y 1 > 0 x_2-x_1=0,y_2-y_1>0 x2x1=0,y2y1>0 x 2 − x 1 = 0 , y 2 − y 1 < 0 x_2-x_1=0,y_2-y_1<0 x2x1=0,y2y1<0
在这里插入图片描述在这里插入图片描述
  • 从图中易得对于变换后的三角形能够契合上述目的,即边 A ′ C ′ A'C' AC为下边界, B ′ C ′ B'C' BC为上边界。
实例代码
clc,clear
% x = [1 3 4 1];
% y = [1 2 -1 1];
% x = [1 -3 -4 1];
% y = [1 2 -1 1];
% x = [1 -2 -4 1];
% y = [1 -4 3 1];
% x = [1 3 -4 1];
% y = [1 -2 1 1];
% x = [1 1 3 1];
% y = [1 2 2 1];
x = [1,1,3,1];
y = [1,-2,2,1];
X = x(2:end)-x(1);
Y = y(2:end)-y(1);
if X(1)>0
    sita = pi/2-atan(Y(1)/X(1));
elseif X(1)<0
    sita = -pi/2-atan(Y(1)/X(1));
else
    if Y(1)>0
        sita = 0;
    else
        sita = pi;
    end
end
A = [cos(sita) -sin(sita)
     sin(sita) cos(sita)];
P =A*([x;y]-[x(1);y(1)])+[x(1);y(1)];
plot(x,y)
hold on
plot(P(1,:),P(2,:))
tag1 = {'A','B','C'};
tag2 = ["A'","B'","C'"];
for i = 1:3
    text(x(i),y(i),tag1{i},...
        'HorizontalAlignment','right',...
        'Color','black')
    text(P(1,i),P(2,i),tag2{i},...
        'HorizontalAlignment','left',...
        'Color','red')
end
axis equal
三角区域的二重积分

使用到的内置函数:integral2

函数基本用法及所需参数: I = i n t e g r a l 2 ( f u n , x m i n , x m a x , y m i n , y m a x ) I = integral2(fun,xmin,xmax,ymin,ymax) I=integral2(fun,xmin,xmax,ymin,ymax) 在平面区域 x m i n ≤ x ≤ x m a x x_{min} ≤ x ≤ x_{max} xminxxmax 和 $y_{min(x)} ≤ y ≤ y_{max(x)} $上逼近函数 z = f u n ( x , y ) z = fun(x,y) z=fun(x,y)的积分。

记旋转后的三角形为 △ A ′ B ′ C ′ \triangle A'B'C' ABC其中 A : ( x 1 ′ , y 1 ′ ) , B : ( x 2 ′ , y 2 ′ ) , C ( x 3 ′ , y 3 ′ ) A:(x_1',y_1'),B:(x_2',y_2'),C(x_3',y_3') A:(x1,y1),B:(x2,y2),C(x3,y3),设边 A ′ C ′ A'C' AC所在直线方程为 y 1 ( x ′ ) = a 1 x ′ + b 1 y_1(x')=a_1x'+b_1 y1(x)=a1x+b1 B ′ C ′ B'C' BC所在直线方程为 y 2 ( x ′ ) = a 2 x ′ + b 2 y_2(x')=a_2x'+b_2 y2(x)=a2x+b2,根据上述三角形的变换,可以将变换后的三角区域书写为 Ω 1 = { ( x ′ , y ′ ) ∣ m i n ( x 1 ′ , x 2 ′ , x 3 ′ ) ≤ x ′ ≤ m a x ( x 1 ′ , x 2 ′ , x 3 ′ ) , y 1 ( x ′ ) ≤ y ′ ≤ y 2 ( x ′ ) } \Omega_1=\{(x',y')|min(x_1',x_2',x_3')≤x' ≤ max(x_1',x_2',x_3'),y_1(x') ≤ y' ≤ y_2(x')\} Ω1={(x,y)min(x1,x2,x3)xmax(x1,x2,x3),y1(x)yy2(x)}

根据积分的变量替换规则有

∬ Ω f ( x , y ) d x d y = ∬ Ω 1 f ( x ( x ′ , y ′ ) , y ( x ′ , y ′ ) ) ∣ ∂ x / ∂ x ′ ∂ x / ∂ y ′ ∂ y / ∂ x ′ ∂ y / ∂ y ′ ∣ d x ′ d y ′ \iint_{\Omega}f(x,y)dxdy=\iint_{\Omega_1}f(x(x',y'),y(x',y'))\begin{vmatrix} \partial x/\partial x'& \partial x/\partial y'\\ \partial y/\partial x'& \partial y/\partial y' \end{vmatrix}dx'dy' Ωf(x,y)dxdy=Ω1f(x(x,y),y(x,y))x/xy/xx/yy/ydxdy

其中

[ x y ] = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] [ x ′ − x 1 y ′ − y 1 ] + [ x 1 y 1 ] \begin{bmatrix}x \\y \end{bmatrix}=\begin{bmatrix}\cos\theta&\sin\theta \\-\sin\theta &\cos\theta\end{bmatrix}\begin{bmatrix}x'-x_1 \\y'-y_1 \end{bmatrix}+\begin{bmatrix}x_1 \\y_1 \end{bmatrix} [xy]=[cosθsinθsinθcosθ][xx1yy1]+[x1y1]

因此

∣ ∂ x / ∂ x ′ ∂ x / ∂ y ′ ∂ y / ∂ x ′ ∂ y / ∂ y ′ ∣ = 1 \begin{vmatrix} \partial x/\partial x'& \partial x/\partial y'\\ \partial y/\partial x'& \partial y/\partial y' \end{vmatrix}=1 x/xy/xx/yy/y=1

所以三角区域上 f ( x , y ) f(x,y) f(x,y)二重积分为 I = i n t e g r a l 2 ( f u n , x m i n , x m a x , y m i n , y m a x ) I = integral2(fun,xmin,xmax,ymin,ymax) I=integral2(fun,xmin,xmax,ymin,ymax) ,其中:

{ x m i n = m i n ( x 1 ′ , x 2 ′ , x 3 ′ ) x m a x = m a x ( x 1 ′ , x 2 ′ , x 3 ′ ) y m i n = y 1 ( x ′ ) y m a x = y 2 ( x ′ ) f u n ( x , y ) = f u n ( x ( x ′ , y ′ ) , y ( x ′ , y ′ ) ) \left\{\begin{matrix} xmin= min(x_1',x_2',x_3')\\ xmax = max(x_1',x_2',x_3')\\ ymin = y_1(x')\\ymax = y_2(x')\\fun(x,y)=fun(x(x',y'),y(x',y'))\end{matrix}\right. xmin=min(x1,x2,x3)xmax=max(x1,x2,x3)ymin=y1(x)ymax=y2(x)fun(x,y)=fun(x(x,y),y(x,y))

实验例子:

这里我们就随意举个例子,算三角形的面积,即 f u n ( x , y ) = 1 fun(x,y)=1 fun(x,y)=1,三角形的三个顶点为 A : ( 1 , 1 ) , B : ( 3 , 4 ) , C ( 5 , 2 ) A:(1,1),B:(3,4),C(5,2) A:(1,1),B:(3,4),C(5,2),该三角形的面积为 5 5 5,下面是代码跑出来的结果:
在这里插入图片描述

实例代码
clc,clear
% 该函数用于求三角区域上函数的积分
point = [1,3,5;1,4,2];
x = point(1,:);
y = point(2,:);
X = x(2:3) - x(1);
Y = y(2:3) - y(1);
if X(1)>0
    sita = pi/2-atan(Y(1)/X(1));
elseif X(1)<0
    sita = -pi/2-atan(Y(1)/X(1));
else
    if Y(1)>0
        sita = 0;
    else
        sita = pi;
    end
end
A = [cos(sita) -sin(sita)
     sin(sita) cos(sita)];
P =A*([x;y]-[x(1);y(1)])+[x(1);y(1)];
xp = P(1,:);
yp = P(2,:);
f = @(t,s) t-t+s-s+1;
% 本来上面的f应该写为 f = @(t,s) 1的,但是为了保证输入和输出具有相同的维度,我们做了如上的处理
% 不然在调用integral2函数时会报输入与输出大小不匹配的错误,导致程序崩溃。
fun = @(t,s) f(cos(sita)*(t-x(1))+sin(sita)*(s-y(1))+x(1),-sin(sita)*(t-x(1))+cos(sita)*(s-y(1))+y(1));
y_down = @(t) (yp(3)-yp(1))/(xp(3)-xp(1)).*(t-xp(1)) + yp(1);
y_up = @(t) (yp(3)-yp(2))/(xp(3)-xp(2)).*(t-xp(2)) + yp(2);
I = integral2(fun,min(xp),max(xp),y_down,y_up);
disp('积分值')
disp(I)

最后,附上代码中关于注释所说的错误,我们仅仅将 f f f写为 f = @ ( t , s ) 1 f=@(t,s) 1 f=@(t,s)1;
在这里插入图片描述
有兴趣的小伙伴可以自己修改了观察。当然,如果你给出的 f ( x , y ) f(x,y) f(x,y)不是常数,也不是单变量函数(即 f ( x , y ) = f ( x ) f(x,y) = f(x) f(x,y)=f(x)或者 f ( x , y ) = f ( y ) f(x,y)=f(y) f(x,y)=f(y)的情形),那么是不存在上述的错误类型的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值