用微元思想求解三重积分——基于Matlab

仅作自己学习使用


1. 题目

求解下列三重积分,其中A,μ,r都是常数。
在这里插入图片描述
求解的准确性可以用下式进行评估:
在这里插入图片描述
听过考研数一张宇课程的朋友应该指导,求解三重积分就是就一个面包,我们将面包无限细分为一个小块,我在代码中是将其细分为一个立方体,这样方便计算,通过设置不同的划分长度,可以获得不同的精度,但是随着划分区间的减少,计算量也会成倍增加。

2. Matlab实现代码

clc
clearA = 10;     % 源强密度
miu = 0.15;
m = 10;     % 布点数r = linspace(0,200,m);
dr = r(2)-r(1);theta = linspace(0,2*pi,m);
dtheta = theta(2)-theta(1);fia = linspace(0,pi,m);
dfia = fia(2)-fia(1);fx = 0;
for i = 1 : length(r)rr = r(i);suma = 0;for j = 1:length(fia)sumb = 0;jj = fia(j);for k = 1:length(theta)sumb = sumb + (A/(4*pi))*exp(-miu*rr)*sin(jj)*dtheta;endsuma = suma + sumb*dfia;endfx = fx + suma*dr;
endfx % 解析解
real = (A/miu)*(1-exp(-miu*max(r))) % 数值解

注意代码中的r,theta,fia我是直接通过linspace函数将其划分为了(m-1)个小的区间,计算的时候通过索引即可求解。其实代码中最重要的还是那三个for循环,如果不好想象的话可以从外到里逐步填空,具体思路如下:
step1:

%% step 1
fx = 0;
for i = 1:length(r)rr = rr(i);suma = 0; % 第二个for整体的微元for j = 1:length(fia)%% 填空endfx = fx + suma * dr;	% 注意这一步df = fx * dx ,这是微元法的精髓
end

step2: 开始填空,这里就相当于是一个二重积分了,把里边的循环补充完整,就假设有无数个循环,里边个循环的写法和外边个循环的写法一样,直接模仿填空即可

fx = 0;
for i = 1:length(r)rr = rr(i);suma = 0; % 第二个for整体的微元for j = 1:length(fia)jj = fia(j);sumb = 0;for k = 1:length(theta)%% 填空endsuma = suma + sumb*dfia;endfx = fx + suma * dr;	% 注意这一步df = fx * dx ,这是微元法的精髓
end

step3: 继续填空,里边个循环最简单了,现在就只是一个简单的积分了,注意里边的积分变量是theta,所以把其他都当作是常数来看待

fx = 0;
for i = 1:length(r)rr = rr(i);suma = 0; % 第二个for整体的微元for j = 1:length(fia)jj = fia(j);sumb = 0;for k = 1:length(theta)sumb = sumb + (A/(4*pi))*exp(-miu*rr)*sin(jj)*dtheta;endsuma = suma + sumb*dfia;endfx = fx + suma * dr;	% 注意这一步df = fx * dx ,这是微元法的精髓
end

3. 结果

m(区间个数-1)fx(解析解)real(数值解)
10078.051166.6667
30070.300866.6667
60068.464066.6667
100067.740466.6667

4. 问题

我是总感觉代码还有一点bug,也就是这行代码:

sumb = sumb + (A/(4*pi))*exp(-miu*rr)*sin(jj)*dtheta;

可能首末点的取值不正确,还请有知道的朋友多多批评指教!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/266375.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JAVA基础】----第一天

【JAVA基础】----第一天 命名规则注释方式对HelloWorld代码进行解释常量,进制转换和机器码展现计算过程常量类型1.字符串常量2.整数常量 提供了四种表现形式2.1 二进制2.2 八进制2.3 十进制2.4 十六进制2.5 进制之间的转化2.5.1 其他进制转化为十进制2.5.2 十进制转…

天津大数据培训机构品牌 数据分析师的发展方向

大数据专业还是有一定难度的,毕竟大数据开发技术所包含的编程技术知识是比较杂且多的如果是计算机专业的学生或者自身有一定基础的人学,相对来说会比较容易,但对于零基础小伙伴学习来说,想要学习大数据,难度还是很高的…

基于SpringBoot+Vue前后端分离的商城管理系统(Java毕业设计)

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

RT-Thread 工程创建(1)

方式一, 利用已经有的bsp进行创建 距离BearPi IOT Std 板 1. 下载 RT-Thread 官方 Env工具a. 下载 [Env 工具下载](https://www.rt-thread.org/download.html#download-rt-thread-env-tool) , 并解压缩b. 将env注册到系统中, 这样就在右键菜单中出现&am…

【C++】POCO学习总结(十二):流(文本编解码、数据压缩、文件读写流等)

【C】郭老二博文之:C目录 1、说明 POCO提供了多种流类,与标准c IOStreams兼容。 大多数POCO流类被实现为过滤器,这意味着它们不写入或读取设备,而是从它们连接的另一个流。 2、文本编解码 2.1 说明 POCO提供了用于编码和解码…

Javaweb之前端工程打包部署的详细解析

6 打包部署 我们的前端工程开发好了,但是我们需要发布,那么如何发布呢?主要分为2步: 前端工程打包 通过nginx服务器发布前端工程 6.1 前端工程打包 接下来我们先来对前端工程进行打包 我们直接通过VS Code的NPM脚本中提供的…

Javascript 数组array赋值与取值

Javascript 数组array赋值与取值 目录 Javascript 数组array赋值与取值 一、数组元素的赋值 1、在创建Array对象时直接赋值 2、利用Array对象的元素下标对数组进行赋值 二、数组元素的获取 一、数组元素的赋值 对数组元素赋值共有2种方法: (1&am…

Viewport Meta 标记:让网页适应各种设备的魔法符号

在我们用手机或平板电脑浏览网页时,你是否曾发现有些网页能够很好地适应屏幕,而有些却需要左右滑动才能完整显示内容?这就涉及到一个神奇的东西——Viewport Meta 标记。 最近本人在研究自适应的各自实现方法,比如media媒体查询、…

【jitterbuffer】2:OnCompleteFrameCallback 送去FrameBuffer 处理的流程

【jitterbuffer】2:OnCompleteFrameCallback 送去FrameBuffer 处理的流程 基于m98版本。 WebRtc Video Receiver(六)-FrameBuffer原理 大神有个详细的论述。 Finder的FID设计 H.264 没有FID,使用RtpSeqNumOnlyRefFinder ,比较复杂,要做出决定 RtpSeqNumOnlyRefFinder cla…

Linux(17):认识与分析登录档

什么是登录档 【详细而确实的分析以及备份系统的登录文件】是一个系统管理员应该要进行的任务之一。 登录档 就是记录系统活动信息的几个文件,例如:何时、何地(来源IP)、何人(什么服务名称)、做了什么动作(讯息登录啰)。 换句话说就是:记录系…

这样的软件测试面试题,谁面试遇到谁淘汰!!!

88 11.6 自动化测试用例的来源 手工编写测试用例 把原来手工的测试用例,当成自动化测试用例 11.7 自动化测试的优点与缺点 优点: 1、对程序的回归测试更方便 2、可以运行更多更繁琐的测试 3、提高测试效率和准确性,节约时间成本 4、可以执行一些手工测试…

【力扣】234.回文链表

嗯,今天这道题是我自己写的哦~,哒哒哒。今天还是很不错滴~ 234.回文链表 说一下我的解题思路,首先我的想法很简单就是将这个链表反转,然后将反转之后的链表与原链表进行对比。相等就返回true,不相等就返回false。所以我就想到了昨…