函数在任意三角区域二重积分的计算
函数在任意三角区域二重积分的计算
三角区域变换
设有三角形△ABC\triangle ABC△ABC其中A:(x1,y1),B:(x2,y2),C(x3,y3)A:(x_1,y_1),B:(x_2,y_2),C(x_3,y_3)A:(x1,y1),B:(x2,y2),C(x3,y3),现在我们将三角形以点AAA为定点,旋转三角形△ABC\triangle ABC△ABC一定角度θ\thetaθ,记旋转后的三角形为△A′B′C′\triangle A'B'C'△A′B′C′,使得边A′B′A'B'A′B′与 yyy 轴平行(即x1′=x2′x_1'=x_2'x1′=x2′)且y1′<y2′y_1'<y_2'y1′<y2′,其中△ABC≅△A′B′C′,x1=x1′,y1=y1′\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(x1,y2)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−x1y−y1]+[x1y1]\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]
对应的逆变换为(这个后面求JacobiJacobiJacobi行列式时会使用到,其实这个变换的JacobiJacobiJacobi行列式为111):
[xy]=[cosθsinθ−sinθcosθ][x′−x1y′−y1]+[x1y1]\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]
进而旋转三角形是简单的,只需以AAA点为定点,角度θ\thetaθ由向量AB⃗=(x2−x1,y2−y1)\vec{AB}=(x_2-x_1,y_2-y_1)AB=(x2−x1,y2−y1)与yyy的正半轴的夹角确定,CCC围绕AAA旋转θ\thetaθ角度即可。
- 当x2−x1>0x_2-x_1>0x2−x1>0时,α=arctany2−y1x2−x1\alpha = \arctan\frac{y_2-y_1}{x_2-x_1}α=arctanx2−x1y2−y1是向量AB⃗\vec{AB}AB与xxx正半轴的夹角,此时AB⃗\vec{AB}AB需要旋转θ=π/2−α\theta=\pi/2-\alphaθ=π/2−α方能满足条件(条件:x1′=x2′x_1'=x_2'x1′=x2′且y1′<y2′y_1'<y_2'y1′<y2′);
- 当x2−x1<0x_2-x_1<0x2−x1<0时,α=arctany2−y1x2−x1\alpha = \arctan\frac{y_2-y_1}{x_2-x_1}α=arctanx2−x1y2−y1是向量AB⃗\vec{AB}AB与xxx负半轴的夹角,此时AB⃗\vec{AB}AB需要旋转θ=−π/2−α\theta=-\pi/2-\alphaθ=−π/2−α方能满足条件(条件:x1′=x2′x_1'=x_2'x1′=x2′且y1′<y2′y_1'<y_2'y1′<y2′);
- 当x2−x1=0x_2-x_1=0x2−x1=0时,(1)若y1<y2y_1<y_2y1<y2,令θ=0\theta=0θ=0 ,即此时满足条件,无需选择;(2)若y1>y2y_1>y_2y1>y2,令θ=pi\theta=piθ=pi ,即将三角形以AAA为定点旋转角度π\piπ即可满足条件(条件:x1′=x2′x_1'=x_2'x1′=x2′且y1′<y2′y_1'<y_2'y1′<y2′)。
实验例子1
绘制AB⃗=(x2−x1,y2−y1)\vec{AB}=(x_2-x_1,y_2-y_1)AB=(x2−x1,y2−y1)的四种情况的三角形以及旋转后的三角形
x2−x1>0,y2−y1>0x_2-x_1>0,y_2-y_1>0x2−x1>0,y2−y1>0 | x2−x1<0,y2−y1>0x_2-x_1<0,y_2-y_1>0x2−x1<0,y2−y1>0 |
---|---|
x2−x1<0,y2−y1<0x_2-x_1<0,y_2-y_1<0x2−x1<0,y2−y1<0 | x2−x1>0,y2−y1<0x_2-x_1>0,y_2-y_1<0x2−x1>0,y2−y1<0 |
---|---|
实验例子2
绘制AB⃗=(x2−x1,y2−y1)\vec{AB}=(x_2-x_1,y_2-y_1)AB=(x2−x1,y2−y1)的两种一般情况的三角形以及旋转后的三角形
x2−x1=0,y2−y1>0x_2-x_1=0,y_2-y_1>0x2−x1=0,y2−y1>0 | x2−x1=0,y2−y1<0x_2-x_1=0,y_2-y_1<0x2−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)>0sita = pi/2-atan(Y(1)/X(1));
elseif X(1)<0sita = -pi/2-atan(Y(1)/X(1));
elseif Y(1)>0sita = 0;elsesita = 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:3text(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=integral2(fun,xmin,xmax,ymin,ymax)I = integral2(fun,xmin,xmax,ymin,ymax)I=integral2(fun,xmin,xmax,ymin,ymax) 在平面区域 xmin≤x≤xmaxx_{min} ≤ x ≤ x_{max}xmin≤x≤xmax 和 $y_{min(x)} ≤ y ≤ y_{max(x)} $上逼近函数 z=fun(x,y)z = fun(x,y)z=fun(x,y)的积分。
记旋转后的三角形为△A′B′C′\triangle A'B'C'△A′B′C′其中A:(x1′,y1′),B:(x2′,y2′),C(x3′,y3′)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′所在直线方程为y1(x′)=a1x′+b1y_1(x')=a_1x'+b_1y1(x′)=a1x′+b1,B′C′B'C'B′C′所在直线方程为y2(x′)=a2x′+b2y_2(x')=a_2x'+b_2y2(x′)=a2x′+b2,根据上述三角形的变换,可以将变换后的三角区域书写为Ω1={(x′,y′)∣min(x1′,x2′,x3′)≤x′≤max(x1′,x2′,x3′),y1(x′)≤y′≤y2(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)dxdy=∬Ω1f(x(x′,y′),y(x′,y′))∣∂x/∂x′∂x/∂y′∂y/∂x′∂y/∂y′∣dx′dy′\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′
其中
[xy]=[cosθsinθ−sinθcosθ][x′−x1y′−y1]+[x1y1]\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=integral2(fun,xmin,xmax,ymin,ymax)I = integral2(fun,xmin,xmax,ymin,ymax)I=integral2(fun,xmin,xmax,ymin,ymax) ,其中:
{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′))\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′))
实验例子:
这里我们就随意举个例子,算三角形的面积,即fun(x,y)=1fun(x,y)=1fun(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),该三角形的面积为555,下面是代码跑出来的结果:
实例代码
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)>0sita = pi/2-atan(Y(1)/X(1));
elseif X(1)<0sita = -pi/2-atan(Y(1)/X(1));
elseif Y(1)>0sita = 0;elsesita = 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)
最后,附上代码中关于注释所说的错误,我们仅仅将fff写为f=@(t,s)1f=@(t,s) 1f=@(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)的情形),那么是不存在上述的错误类型的。
函数在任意三角区域二重积分的计算相关推荐
- 如何将图片中的一个任意四边形区域的图像转化为矩形【附源码】
将一幅图像中的任意四边形区域映射为矩形区域.比如,我们有时拍照片,因为角度的问题,本来是矩形的广告牌,在照片中可能表现为一个任意的四边形.事实上,在现实中本来是矩形的物体,在照片中往往呈现为任意四边形 ...
- 第十章 第二节二重积分的计算(同济版)
第二节 二重积分的计算 一.平面区域的表示--其实就是线性规划 平面区域的表示{X型区域Y型区域平面区域的表示 \left\{ \begin{matrix} X型区域\\ Y型区域 \end{matr ...
- 在Excel中通过VBA实现不定区域的标准差计算
需求:在excel中计算固定区域的均值有很多实现方式,但是对于跟随一定条件变化的区域,要求解标准差却很难实现. 解决方案:通过VBA的程序,根据条件改变选定的单元格区域,实现不定区域的标准差计算. 程 ...
- python区域找图命令_python读取图片任意范围区域
使用python进行图片处理,现在需要读出图片的任意一块区域,并将其转化为一维数组,方便后续卷积操作的使用. 下面使用两种方法进行处理: convert 函数 from PIL import Imag ...
- python显示图片列表_python读取图片任意范围区域
使用python进行图片处理,现在需要读出图片的任意一块区域,并将其转化为一维数组,方便后续卷积操作的使用. 下面使用两种方法进行处理: convert 函数 from PIL import Imag ...
- 高数 07.08 二重积分的计算
§第七章第八节二重积分的计算 \color{blue}{\S 第七章 第八节 二重积分的计算} 一.利用直角坐标计算二重积分 二.利用极坐标计算二重积分 一.利用直角坐标计算二重积分 \color{b ...
- 定义一个三角形类(TRI)及其派生类三角柱体类(COL)。其中三角形类可以计算三角形的面积和周长;三角柱体类可以计算柱体的体积和表面积。其具体要求如下: (1)TRI的成员如下: 私有数据成员
题目要求: 定义一个三角形类(TRI)及其派生类三角柱体类(COL).其中三角形类可以计算三角形的面积和周长:三角柱体类可以计算柱体的体积和表面积.其具体要求如下: (1)TRI的成员如下: 私有数据 ...
- 13. 区域间距离计算
区域间距离计算 1.点和点之间的距离计算 distance_pp (Row1,Column1 ,Row2 ,Column2 , Distance) 2.点到直线的距离 distance_pl() 3. ...
- 设计一个用于填充n阶方阵的上三角区域的程序。填充规则是:使用1,2,3...的自然数列,从左上角开始, 按照顺时针方向螺旋填充
题目7:方阵的主对角线之上称为"上三角". 请你设计一个用于填充n阶方阵的上三角区域的程序.填充规则是:使用1,2,3-的自然数列,从左上角开始, 按照顺时针方向螺旋填充. 例如: ...
最新文章
- mysql 去掉复合索引_MySQL性能优化[实践篇]-复合索引实例
- 傅里叶,请再帮我们一次吧....
- python空字典对象相当于false吗_python怎么判断某一对象是否为字典
- jQuery插件之Cookie
- 二十、Threaded I/O模型
- 解决ajax劫持,Ajax实现检测网站劫持的方法
- Executors创建的4种线程池的使用
- hdu-2955(01背包)Robberies
- cocos2d-x游戏开发(六)自动释放池
- python 清空文件夹_Python初学者请注意!别这样直接运行python命令,否则电脑等于“裸奔”...
- python获取当前目录_又有几个Python小技巧分享
- html怎样在一张图片里写字,用HTML代码在图片上写字
- 图书馆管理系统项目思路
- Ubuntu中让SSH自动重连
- 显卡(N卡)内存被占用如何处理?
- c语言topic函数,ROS学习笔记(一) 话题topic的定义与使用(publisher 和 subscriber)
- mysql 异常码1903_Mysql 异常。 寻求帮助
- 诸侯安置 简单的递推
- JPA 关联表添加关联条件@Where、@WhereJoinTable()
- Teradata到GBase 8a迁移总结
热门文章
- (附源码)springboot建材市场销售管理系统 毕业设计 191544
- vue项目搭建及打包运行
- java Python+Django的工厂设备管理系统 Pycharm
- 热门光学软件之初体验网络课程系列大纲2
- 一个创业公司的融资流程?
- Linux切换用户su root 与 su - root 的区别
- c语言中-128补码,-128 的 原码,反码,补码
- php微信分享带缩略图,静态页面实现微信分享带缩略图、标题和描述
- python url中文转码_python实现中文转换url编码的方法
- CC js----android 平台 java与js互调 , ios平台 Objective-c与js互调的例子