根据几何定义使用计算机编程求定积分的值
问题:通过编程,求∫01x2dx\int_{0}^{1} x^2\mathrm{d}x∫01x2dx的近似值.
在数学上,这是一道很简单的定积分的题目。使用数学方法,可以进行以下计算:
∫12x2dx=x33∣01=133−033=13=0.333333...\int_{1}^{2} x^2\mathrm{d}x = \left.\frac{x^3}{3}\right|_0^1=\frac{1^3}{3}-\frac{0^3}{3}=\frac{1}{3}=0.333333...∫12x2dx=3x3∣∣∣01=313−303=31=0.333333...
然而如果使用程序计算,很难按积分的相关公式来进行计算。所以,我们换个思路,直接利用定积分的定义进行求解。
如上图所示(注:本图由LaTeX\LaTeXLATEX 的TikZ包绘制,具体方法参见 这里),曲线为函数 y=x2y = x^2y=x2,而 ∫12x2dx\int_{1}^{2} x^2\mathrm{d}x∫12x2dx 的值实际上曲线在[0, 1] 上与 X轴的夹成的区域,即图中阴影区域的面积。为了通用性,设开始点为x1x_1x1结束点为x2x_2x2。我们将阴影垂直切分成nnn份,则每一份的长度为 Δx\Delta xΔx,其值为
Δx=(x2−x1)n\Delta x = \frac{(x_2-x_1)}{n}Δx=n(x2−x1).
则对于其中一份的面积,可以近似看为一个矩形,高为f(x1+iΔx)f(x_1 + i\Delta x)f(x1+iΔx),宽度为 Δx\Delta xΔx,即图中蓝色区域,故面积为 f(x1+iΔx)Δxf(x_1 + i\Delta x)\Delta xf(x1+iΔx)Δx。将所有面积求和可得
∑i=1nf(xi)Δx\sum_{i=1}^{n}f(x_i)\Delta xi=1∑nf(xi)Δx其中 xi=x1+iΔx_i = x_1 + i \Deltaxi=x1+iΔ。当 n→∞n \rightarrow \inftyn→∞ 时,可以等于原值,即:
limn→∞∑i=1nf(xi)Δx=∫x1x2f(x)dx\lim_{n \rightarrow \infty}\sum_{i=1}^{n}f(x_i)\Delta x = \int_{x_1}^{x_2} f(x) \mathrm{d}x n→∞limi=1∑nf(xi)Δx=∫x1x2f(x)dx
根据这个公式,当 nnn 取得比较大的时候,我们可以很很容易求得比较接近的原值。
不过用矩形计算,由于忽略的面积比较多,如上图所未,红色区域都被忽略了,所以近似度有限(即收敛慢)。为了提高精度,如果我们将矩形改成梯型。如上图的几何含义,计算结果显然会更接近真实值,所以公式可以改为如下:
∑i=1nf(xi)+f(xi+1)2Δx\sum_{i=1}^{n}\frac{f(x_i) + f(x_{i+1})}{2}\Delta xi=1∑n2f(xi)+f(xi+1)Δx
根据以上分析,对两种计算方式进行了编码实现(见附录一)。
取nnn等于10000,可以获得以下两种结果。
result1: 0.33328333499999957
result2: 0.33333333500000084
显然,第二种取梯形的结果更接近真实值。
结论与展望
利用以上公式,我们可以快速求定积分的值,尤其是在函数 y=f(x)y = f(x)y=f(x) 比较复杂,使用现有的计算公式难以取得其值的情况下,使用计算机会非常方便。在实际工程计算中,只需要将nnn取到足够大,即可满足绝大部分的需求。
附一:源代码
public class Integration {public static void main(String[] args) {double x1 = 0;double x2 = 1;int interval = 10000;double delta = (x2 - x1) / interval;double result1 = 0; double result2 = 0;// 以矩形进行求和。for (int i = 0; i < interval; i++) {result1 += f(x1 + delta * i) * delta;}// 以梯形进行求和for (int i = 0; i < interval; i++) {result2 += (f(x1 + delta * i) + f(x1 + delta * i + delta)) * delta / 2;}System.out.println("result1: " + result1);System.out.println("result2: " + result2);}static double f(double x) {return x * x;}
}
根据几何定义使用计算机编程求定积分的值相关推荐
- 计算机编程求最大公约数与最小公倍数,这是一个常见的简单算法
计算最大公约数和最小公倍数是简单常见的算法,他有多种方式实现,比如:穷举法.辗转相除法.相减法等等,方法很多,目的相同,下面就用其中一种方法,辗转相除法来完成这个算法,下面将用计算机编程的方式实现. ...
- c语言分母多项乘积怎么算,C++编程 用梯形求积公式求解定积分∫3lnxdx积分区间为(1,2, C语言,用梯形法编程求定积分x^3+x/2+1的值...
问题标题 C++编程 用梯形求积公式求解定积分∫3lnxdx积分区间为(1,2, C语言,用梯形法编程求定积分x^3+x/2+1的值 2019-8-16来自ip:15.179.13.64的网友咨询 浏 ...
- 有一个m行n列的矩阵,编程求出其中值最大的那个元素,以及其所在的行号和列号。
[题目描述] 有一个m行n列的矩阵,编程求出其中值最大的那个元素,以及其所在的行号和列号.(如果最大数有多个,则显示第一个出现的数据的信息). [输入] 有多行.第1行是两个整数,m(m≤10)和n( ...
- 用梯形法求定积分的值
一.梯形法求解定积分的过程 1.求定积分值存在的问题 计算定积分是数值计算领域内的一个重要内容.对于能够得到原函数的被积函数,如: , 其定积分可以直接计算. 但对于不易得到原函数的被积函数,可以考虑 ...
- 辅修计算机编程,求帮忙~计算机C语言的编程题!大学选的辅修课没去过,要考试了不会? 爱问知识人...
楼主 我来拯救你~~~~ 10道题全部奉上~~!!! 有些题别人已经给出了,我引用一下啊(懒得重写了),大家不要喷我哦~~~~~ 第一题 #include int main() { int d1,d2 ...
- c语言用矩形法求定积分的值,写一个用矩形法求定积分的通用函数,分别求:...
2015-01-22 06:30:01 阅读( 513 ) 解: #include main() { float integral(float(8p)(float),float a,float b, ...
- 用计算机程序求n,计算机编程 算法 求n!.doc
计算机编程 算法 求n!.doc 算法:求n! 任务 通过对"n!"(n阶乘)这个算法的描述以及程序实现的方法,了解循环结构算法的特征,掌握"累乘器"的算法及程 ...
- 编程题:带参数的宏定义来实现,求圆的周长和面积。
编程题:带参数的宏定义来实现,求圆的周长和面积. #include<stdio.h> #define PI 3.14159 #define L(r) 2*PI*(r) #define S( ...
- 宏定义编程软件_什么是计算机编程? 定义软件开发。
宏定义编程软件 My five year old son, Ramy, approached me one day while I was working from home and asked, & ...
- 【编程实践】什么是计算机编程?定义软件开发。What is Computer Programming? Defining Software Development.
目录 什么是计算机编程?定义软件开发.What is Computer Programming? Defining Software Development. What is Computer Pro ...
最新文章
- 盘点2015跨境电商:硝烟下的机遇与变革
- MySQL 架构组成—存储引擎
- 官方博客明确了 .NET Core RC2/RTM 时间表
- java基础IO流使用读取一个文件中的文字输出到控制台上
- Remainders Game (中国剩余定理)
- 腾讯否认微信测试语音消息进度调节​;监证会同意蚂蚁集团科创板IPO注册;React 17 正式版发布|极客头条
- HttpComponents之httpclient基本使用方法
- Learn the object-c on MAC(中译本: Object-C 基础教程 ) 学习笔记
- Daily scrum 10.12
- [转]Chrome 错误代码:ERR_UNSAFE_PORT
- 使用ELK在DC / OS中进行日志管理
- 【电力负荷预测】基于matlab GUI粒子群优化支持向量机短期电力负荷预测【含Matlab源码 751期】
- boolean到底占几个字节?
- 用C++实现定积分运算
- 200多个电脑修复工具问你要不要?
- java日记 简单Java家庭记账系统
- 计算机类毕业设计评语导师评语,毕业设计指导老师评语
- 13.敏捷组织转型四步法之3 - 通过MoMoKo模型推进业务敏捷
- Swift网络请求 - RXSwift + PromiseKit + Moya
- amd显卡风扇调节_amd显卡风扇速度设置linux版本
热门文章
- 水晶头(网线)的线序
- 面对互联网寒冬,程序员能够做什么?
- 大数据讲课笔记2.1 初探大数据
- Hexo博客之速度优化
- 会员运营是什么?会员运营体系有哪些类别?
- matplotlib画图去掉边缘空白
- manul_css.css:1 Failed to load resource: the server responded with a status of 404 ()
- TI C64X+通用库函数使用手册
- NameNode故障处理之数据恢复
- trans系列是sci几区_怎么确定SCI是几区的?