函数在任意三角区域二重积分的计算
三角区域变换
设有三角形 △ 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' △A′B′C′,使得边 A ′ B ′ A'B' A′B′与 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' △ABC≅△A′B′C′,x1=x1′,y1=y1′。
- 目的:使得变换后的三角形从纵向上看,边 A ∗ C ∗ A^*C^* A∗C∗为下边界, B ∗ C ∗ B^*C^* B∗C∗为上边界。
旋转变换:
设点 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} [x′y′]=[cosθsinθ−sinθcosθ][x−x1y−y1]+[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θ][x′−x1y′−y1]+[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=(x2−x1,y2−y1)与 y y y的正半轴的夹角确定, C C C围绕 A A A旋转 θ \theta θ角度即可。
- 当 x 2 − x 1 > 0 x_2-x_1>0 x2−x1>0时, α = arctan y 2 − y 1 x 2 − x 1 \alpha = \arctan\frac{y_2-y_1}{x_2-x_1} α=arctanx2−x1y2−y1是向量 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′);
- 当 x 2 − x 1 < 0 x_2-x_1<0 x2−x1<0时, α = arctan y 2 − y 1 x 2 − x 1 \alpha = \arctan\frac{y_2-y_1}{x_2-x_1} α=arctanx2−x1y2−y1是向量 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′);
- 当 x 2 − x 1 = 0 x_2-x_1=0 x2−x1=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=(x2−x1,y2−y1)的四种情况的三角形以及旋转后的三角形
x 2 − x 1 > 0 , y 2 − y 1 > 0 x_2-x_1>0,y_2-y_1>0 x2−x1>0,y2−y1>0 | x 2 − x 1 < 0 , y 2 − y 1 > 0 x_2-x_1<0,y_2-y_1>0 x2−x1<0,y2−y1>0 |
---|---|
![]() | ![]() |
x 2 − x 1 < 0 , y 2 − y 1 < 0 x_2-x_1<0,y_2-y_1<0 x2−x1<0,y2−y1<0 | x 2 − x 1 > 0 , y 2 − y 1 < 0 x_2-x_1>0,y_2-y_1<0 x2−x1>0,y2−y1<0 |
---|---|
![]() | ![]() |
实验例子2
绘制 A B ⃗ = ( x 2 − x 1 , y 2 − y 1 ) \vec{AB}=(x_2-x_1,y_2-y_1) AB=(x2−x1,y2−y1)的两种一般情况的三角形以及旋转后的三角形
x 2 − x 1 = 0 , y 2 − y 1 > 0 x_2-x_1=0,y_2-y_1>0 x2−x1=0,y2−y1>0 | x 2 − x 1 = 0 , y 2 − y 1 < 0 x_2-x_1=0,y_2-y_1<0 x2−x1=0,y2−y1<0 |
---|---|
![]() | ![]() |
- 从图中易得对于变换后的三角形能够契合上述目的,即边 A ′ C ′ A'C' A′C′为下边界, B ′ C ′ B'C' B′C′为上边界。
实例代码
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} xmin≤x≤xmax 和 $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' △A′B′C′其中 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' A′C′所在直线方程为 y 1 ( x ′ ) = a 1 x ′ + b 1 y_1(x')=a_1x'+b_1 y1(x′)=a1x′+b1, B ′ C ′ B'C' B′C′所在直线方程为 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′)≤x′≤max(x1′,x2′,x3′),y1(x′)≤y′≤y2(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/∂x′∂y/∂x′∂x/∂y′∂y/∂y′∣∣∣∣dx′dy′
其中
[ 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θ][x′−x1y′−y1]+[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/∂x′∂y/∂x′∂x/∂y′∂y/∂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)的情形),那么是不存在上述的错误类型的。