问题:通过编程,求∫01x2dx\int_{0}^{1} x^2\mathrm{d}x∫01​x2dx的近似值.
在数学上,这是一道很简单的定积分的题目。使用数学方法,可以进行以下计算:
∫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...∫12​x2dx=3x3​∣∣∣​01​=313​−303​=31​=0.333333...
然而如果使用程序计算,很难按积分的相关公式来进行计算。所以,我们换个思路,直接利用定积分的定义进行求解。

如上图所示(注:本图由LaTeX\LaTeXLATE​X 的TikZ包绘制,具体方法参见 这里),曲线为函数 y=x2y = x^2y=x2,而 ∫12x2dx\int_{1}^{2} x^2\mathrm{d}x∫12​x2dx 的值实际上曲线在[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∑n​f(xi​)Δx其中 xi=x1+iΔx_i = x_1 + i \Deltaxi​=x1​+iΔ。当 n→∞n \rightarrow \inftyn→∞ 时,可以等于原值,即:
lim⁡n→∞∑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→∞lim​i=1∑n​f(xi​)Δx=∫x1​x2​​f(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∑n​2f(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;}
}

根据几何定义使用计算机编程求定积分的值相关推荐

  1. 计算机编程求最大公约数与最小公倍数,这是一个常见的简单算法

    计算最大公约数和最小公倍数是简单常见的算法,他有多种方式实现,比如:穷举法.辗转相除法.相减法等等,方法很多,目的相同,下面就用其中一种方法,辗转相除法来完成这个算法,下面将用计算机编程的方式实现. ...

  2. 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的网友咨询 浏 ...

  3. 有一个m行n列的矩阵,编程求出其中值最大的那个元素,以及其所在的行号和列号。

    [题目描述] 有一个m行n列的矩阵,编程求出其中值最大的那个元素,以及其所在的行号和列号.(如果最大数有多个,则显示第一个出现的数据的信息). [输入] 有多行.第1行是两个整数,m(m≤10)和n( ...

  4. 用梯形法求定积分​​​​​​的值

    一.梯形法求解定积分的过程 1.求定积分值存在的问题 计算定积分是数值计算领域内的一个重要内容.对于能够得到原函数的被积函数,如: , 其定积分可以直接计算. 但对于不易得到原函数的被积函数,可以考虑 ...

  5. 辅修计算机编程,求帮忙~计算机C语言的编程题!大学选的辅修课没去过,要考试了不会? 爱问知识人...

    楼主 我来拯救你~~~~ 10道题全部奉上~~!!! 有些题别人已经给出了,我引用一下啊(懒得重写了),大家不要喷我哦~~~~~ 第一题 #include int main() { int d1,d2 ...

  6. c语言用矩形法求定积分的值,写一个用矩形法求定积分的通用函数,分别求:...

    2015-01-22 06:30:01 阅读( 513 ) 解: #include main() {  float integral(float(8p)(float),float a,float b, ...

  7. 用计算机程序求n,计算机编程 算法 求n!.doc

    计算机编程 算法 求n!.doc 算法:求n! 任务 通过对"n!"(n阶乘)这个算法的描述以及程序实现的方法,了解循环结构算法的特征,掌握"累乘器"的算法及程 ...

  8. 编程题:带参数的宏定义来实现,求圆的周长和面积。

    编程题:带参数的宏定义来实现,求圆的周长和面积. #include<stdio.h> #define PI 3.14159 #define L(r) 2*PI*(r) #define S( ...

  9. 宏定义编程软件_什么是计算机编程? 定义软件开发。

    宏定义编程软件 My five year old son, Ramy, approached me one day while I was working from home and asked, & ...

  10. 【编程实践】什么是计算机编程?定义软件开发。What is Computer Programming? Defining Software Development.

    目录 什么是计算机编程?定义软件开发.What is Computer Programming? Defining Software Development. What is Computer Pro ...

最新文章

  1. 盘点2015跨境电商:硝烟下的机遇与变革
  2. MySQL 架构组成—存储引擎
  3. 官方博客明确了 .NET Core RC2/RTM 时间表
  4. java基础IO流使用读取一个文件中的文字输出到控制台上
  5. Remainders Game (中国剩余定理)
  6. 腾讯否认微信测试语音消息进度调节​;监证会同意蚂蚁集团科创板IPO注册;React 17 正式版发布|极客头条
  7. HttpComponents之httpclient基本使用方法
  8. Learn the object-c on MAC(中译本: Object-C 基础教程 ) 学习笔记
  9. Daily scrum 10.12
  10. [转]Chrome 错误代码:ERR_UNSAFE_PORT
  11. 使用ELK在DC / OS中进行日志管理
  12. 【电力负荷预测】基于matlab GUI粒子群优化支持向量机短期电力负荷预测【含Matlab源码 751期】
  13. boolean到底占几个字节?
  14. 用C++实现定积分运算
  15. 200多个电脑修复工具问你要不要?
  16. java日记 简单Java家庭记账系统
  17. 计算机类毕业设计评语导师评语,毕业设计指导老师评语
  18. 13.敏捷组织转型四步法之3 - 通过MoMoKo模型推进业务敏捷
  19. Swift网络请求 - RXSwift + PromiseKit + Moya
  20. amd显卡风扇调节_amd显卡风扇速度设置linux版本

热门文章

  1. 水晶头(网线)的线序
  2. 面对互联网寒冬,程序员能够做什么?
  3. 大数据讲课笔记2.1 初探大数据
  4. Hexo博客之速度优化
  5. 会员运营是什么?会员运营体系有哪些类别?
  6. matplotlib画图去掉边缘空白
  7. manul_css.css:1 Failed to load resource: the server responded with a status of 404 ()
  8. TI C64X+通用库函数使用手册
  9. NameNode故障处理之数据恢复
  10. trans系列是sci几区_怎么确定SCI是几区的?