-
2021-04-18 06:08:29
MATLAB求数值积分的方法
2008年12月第20卷第6期石家庄职业技术学院学报
JournalofShijiazhuangVocationalTechnologyInstituteDec.2008Vol.20 No.6
文章编号:100924873(2008)0620058203
用MATLAB求数值积分的方法
陈佩宁a, 刘 竞b
Ξ
(石家庄职业技术学院a.信息工程系;b.机电工程系,河北石家庄 050081)
摘 要:介绍了数值积分法的几种计算公式及相应的MATLAB命令,并给出了用MATLAB编程求数值积分的实例.
关键词:MATLAB;数值积分;矩形公式;梯形公式;辛普森公式中图分类号:O172 文献标识码:A
1 引言
(4)f(x),只有一些由
在一元微积分学中,若已知函数f(x)在闭区间[a,b]上连续且其原函数为F(x),求f(x)区间上的定积分可用牛顿∫
a
b
f(x)dx)|
a
(b)-F(a).而在
的方法求).2用数值积分的方法求一个函数在区间[a,b]上的定积分,可利用定积分的定义来求解:
I=
MATLABint求
∫
a
b
f(x)dx,
该命令格式为:
int(f,x,a,b) %求函数f在区间[a,b]上的
∫
a
b
n
n→∞k=1
f(x)dx=lim
n
ξf(k)∑
,n
设In=
k=1
ξf(k)∑
,则I=limIn.
n→∞n
定积分.
例1 求
sinxdx.
∫
2
此时称In为数值积分.显然,数值积分In就是I的近似值,并且当n越大,In就越接近于精确值I.由
[2]
于ξk取值不同,数值积分In的结果会有所不同.数值积分的计算公式也有多种:
(1)矩形公式
解 输入命令:>>symsx>>I=int(sin(x),x,0,pi/2),结果显示为:I=1.
用牛顿-莱布尼兹公式计算定积分的方法在理论上和解决实际问题中起到了很大的作用,但它并不能解决定积分计算的所有问题.在工程技术领域常遇到十分复杂的情况而无法用牛顿-莱布尼兹公式求解.其可能出现的情况[1]有:
(1)某些被积函数f(x),其原函数无法用初等函数表示,如exdx,
将积分区间[a,b]n等分,每个小区间宽度均为h=(b-a)/n,h称为积分步长.
记a=x0
n-1
∫x
2
Ln=hRn=h
dx等.
k=0n
f(xk),h∑f(xk),h∑
==
nn
①②
(2)函数f(x)结构复杂,求其原函数非常困难.(3)函数f(x)的结构虽然简单且其原函数存
k=1
在,但其原函数的结构相对复杂.
Ξ收稿日期:2007212224
称公式①,②分别为左、右矩形公式,两个矩形面积分别小于和大于所求曲边梯形的面积
.
作者简介:陈佩宁(19712),女,河北望都人,石家庄职业技术学院讲师.
更多相关内容 -
差分法数值求解一维热传导偏微分方程代码及文档
2022-03-03 21:43:00使用差分法求解一维的热传导偏微分方程,也可以求解类似热传导的偏微分方程。分别推导了显式和隐式的差分离散格式,并使用matlab编写了显式和隐式的求解代码。压缩包中包含了详细的推导文档和带有注释的代码,可供... -
差分法求函数值
2019-03-02 18:15:56matlab实现差分法求函数值,函数。 -
武汉理工大学-数值分析-(4)方程求根的数值方法
2021-01-06 20:56:40文章目录实验目标编程语言与扩展库二分法求根牛顿法求根弦截法求根写在最后 实验目标 用编程语言编程实现以下...# 二分求根法 求解f(x)=0 def Dicphoni(a,b,tol): # 初始值 y0 = f(a) # 迭代直到区间小于tol while -
复化梯形求积分实例——用Python进行数值计算
2021-01-02 21:43:33用程序来求积分的方法有很多,这篇文章主要是有关牛顿-科特斯公式。 学过插值算法的同学最容易想到的就是用插值函数代替被积分函数来求积分,但实际上在大部分场景下这是行不通的。 插值函数一般是一个不超过n次的... -
基于有限差分的油水两相渗流方程求解油藏数值模拟毕业设计.doc
2021-07-04 12:55:22基于有限差分的油水两相渗流方程求解油藏数值模拟毕业设计 -
应用数值计算热传导三维matlab图像,代码,有限差分法
2020-10-19 19:31:17- 调用显式求温度矩阵函数 - 调用画图函数 - heatExplict:显式实现温度矩阵求解函数 ----实现方案均来自于教材。简单说明一下matlab实现。 - Dirichlet boundary - 圆形边界分8种情况讨论,两个临近网格点... -
热传导方程几种差分格式的MATLAB数值解法比较.pdf
2021-07-03 11:32:24热传导方程几种差分格式的MATLAB数值解法比较.pdf -
偏微分方程数值解五点差分格式代码
2019-04-29 09:48:52差分格式是数值计算方法中微分以及偏微分导数的一种离散化方法,即用相邻两个或者多个数值点的差分取代偏微分方程中导数或者偏导数的一种算法。 选择差分格式是离散化偏微分方程的第一步。本文是五点差分格式代码 -
偏微分方程数值解差分方法c++程序代码
2020-04-30 20:25:38包含椭圆,抛物线,双曲线偏微分方程数值解法,隐式格式,显示格式等,应用于大学偏微分方程数值解报告的撰写 -
[计算机数值分析]二分查找求根法
2021-03-26 22:56:33二分查找求根法 给定一个闭区间,我们假设函数f(x)在该区间内有且仅有一个零点,则令f(x) = 0,在该区间内不断折半区间,根据有根的判别条件f(x1) x f(x2) < 0,则经过不断地折半,我们总能找到一个给定了精度的根...问题描述
给定一个闭区间,我们假设函数f(x)在该区间内有且仅有一个零点,则令f(x) = 0,在该区间内不断折半区间,根据有根的判别条件f(x₁) × f(x₂) < 0,则经过不断地折半,我们总能找到一个给定了精度的根,并且有理由相信,该根x关于精度是 “准确” 的。在实际操作过程中,我们用在精度控制下找到有根区间的中点的值作为方程的近似解。
例:用二分法求方程x³ - x - 1 = 0 在区间[1,1.5]内的一个实根,要求误差不超过0.005。
运行示例
源码
//实现用二分查找求根法:求出给定精度给定方程的根 #include<iostream> #include<cmath> using namespace std; //函数名:function //参数:用户输入的值x //返回值:输入参数值的函数值 //功能:求解给定值的函数值 double function(double x) //用户自定义的函数,可修改 { double result; //求解自定义函数值的函数 result = pow(x, 3) - x - 1; return result; } int main(void) { double low, up, mid=0, accuracy; //区间上下限、中点、精度 int i=0; cout << "请输入区间上、下限:"; cin >> low; cin >> up; cout << "请输入精度:"; cin >> accuracy; cout << endl; do { //区间取半 mid = (low + up) / 2; //判断根的位置 if ((function(low) * function(mid)) < 0) //根在前半区间 { up = mid; //将区间中点值赋值给区间上限 i++; //折半查找次数自增1 cout << "第" << i << "次折半!" << endl ; cout << "根位于前半区间!" << endl<<endl; } else //根在后半区间 { low = mid; //将区间中点的值赋值给区间下限 i++; //折半查找次数自增1 cout << "第" << i << "次折半!" << endl ; cout << "根位于后半区间!" << endl << endl; } } while ((up - low) > accuracy); //若i次二分区间后,区间长度小于精确度,则二分结束,找到近似根 cout << "解为:"; //用区间中点的值作为根的近似解 cout << mid << endl; return 0; }
-
数值分析程序代码(MATLAB)_牛顿插值法_三次样条插值多项式_插值型求积_多项式插值_样条插值_
2021-10-01 08:17:24本文件针对于数值分析课程,主要内容是数值分析课程实验,包括:牛顿法求函数零点、牛顿插值法、求三次样条插值多项式、通用多项式拟合、插值型求积公式、Runge-Kutta 4阶算法等。本文件仅为个人课程实验程序代码,... -
MATLAB实战应用案例:薛定谔方程的建立及线性变分法求数值解(含代码).zip
2022-04-21 11:19:33MATLAB实战应用案例:薛定谔方程的建立及线性变分法求数值解(含代码).zip -
C语言实验-求出两个非零正整数的最大公约数,并作为函数值返回
2021-05-26 16:40:15求出两个非零正整数的最大公约数,并作为函数值返回(要求:数据的输入、输出在主函数中实现,例如:若给num1和num2分别输入49和21,则输出的最大公约数为7。 -
matlab中心差分 数值分析 常微分方程
2018-11-20 09:53:30MATLAB 常微分方程数值解法--中心差分法、向前差分、向后差分 -
MATLAB数值积分求值实验报告_计算方法数值实验实验报告
2020-08-06 00:29:31学号 班级 统计1001 姓名 指导教师 易昆南 实验题目 用多种方法计算数值积分 评 分 1设计实习目的 了解MATLAB在实际问题中的应用 通过实践加深对这门语言中M文件的了解 熟悉简单程序结构如循环结构for循环while循环... -
CDF 分位数:根据 CDF 确定分位数或分位数值,表示为值的加权向量。-matlab开发
2021-05-29 10:40:01用于根据累积分布函数 (CDF) 确定分位数和相关值的实用程序,该函数表示为数值向量和可选的数值权重向量。 可以将分位数向量转换为关联 CDF 值的向量。 也可以将 CDF 值的向量转换为相关的分位数。 -
用改进欧拉法求一阶常微分方程的数值解
2018-11-15 12:52:46用改进欧拉法求一阶常微分方程的数值解,计算结果精确 -
6.12 C语言练习([C语言训练]求函数值:按如下递归公式求函数值。 )
2020-06-12 18:40:20 -
抛物型偏微分方程数值求解MATLAB程序
2022-02-23 10:43:30【内容介绍】本资源主要利用MATLAB的实时脚本编程实现了抛物型偏微分方程数值求解,以图-文-代码三者互相嵌套的形式介绍实现过程,一目了然。包括对迭代的误差分析。 【适用对象】工科生、数学专业等。 【算法涵盖】... -
欧拉公式求圆周率的matlab代码-Numerical-Analysis:用python编写的一些常见数值方法
2021-05-23 14:12:07欧拉公式求长期率的matlab代码数值分析 python中一些常用的数值方法。 包括: 割线法 斯蒂芬森方法 隆堡整合 修正牛顿法 牛顿的分差 艾肯的Delta ^ 2方法 自适应正交 求解微分方程组的Runge-Kutta方法 亚当斯步长... -
数值分析牛顿法MATLAB
2019-01-17 15:58:31该资源为数值分析里面经典的牛顿法用于非线性方程的求根的方法,虽然不是很难的方法,但是可以用于学习,使用的MATLAB编程,需要一定的MATLAB基础。 -
数值分析之二分法、试值法 python
2021-01-20 03:07:26@ 数值分析之非线性方程求解 文章目录二分法、试值法的本质(1) 二分法求利率题目输入输出格式举例输入:输出:思路和要点代码结果(2)试值法法求利率题目输入输出格式举例输入:输出:思路和要点代码结果 二分法、试... -
[计算机数值积分]龙贝格公式求数值积分
2021-04-24 08:22:06[数值积分]龙贝格公式求数值积分 梯形递推的变步长求积公式虽然算法简单,但精度低,收敛的速度慢,因此,研究收敛速度快、精度高的龙贝格算法显得尤为重要。 例:用龙贝格算法求f(x) = sin(x) / x 在区间[0,1]的...梯形递推的变步长求积公式虽然算法简单,但精度低,收敛的速度慢,因此,研究收敛速度快、精度高的龙贝格算法显得尤为重要。
例:用龙贝格算法求f(x) = sin(x) / x 在区间[0,1]的数值积分,精度要求为1e-6.
- 加工流程:
- 程序框图设计:
- 运行示例:
- 源码:
#include<iostream> #include<cmath> double f(double x); //自定义函数 using namespace std; int main(void) { double a, b, accuracy; //a为区间下限,b为区间上限,accuracy为精度 cout << "请输入积分区间:"; //输入提示 cin >> a >> b; cout << "请输入精度:"; //输入提示 cin >> accuracy; double h; //步长 h = b - a; double T1, T2; //T1:二分前的梯形法积分值;T2:二分后的梯形法积分值; T1 = h / 2 * (1 + f(b)); T2 = 0; int k = 1; //记录二分次数 cout << "T" << pow(2, 0) << " = " << T1 << endl; double S1, S2; //对T1与T2加权平均,得辛普森积分值 double C1, C2; //对S1与S2加权平均,得柯特斯积分值 double R1, R2; //对C1,C2加权平均,得龙贝格积分值 int flag = 1; //flag作为循环控制标志性变量 while (flag == 1) { double sum = 0; //各分点的函数值和 double x = a + h / 2; //分点值 while (x < b) //在区间上限范围内求各分点的函数值和 { sum += f(x); x += h; } T2 = T1 / 2 + h / 2 * sum; //计算梯形序列得下一个二分结果 cout << "T" << pow(2, k) << " = " << T2 << endl; S2 = T2 + 1.0 / 3 * (T2 - T1); //线性组合外推值simpson cout << "S" << pow(2, k - 1) << " = " << S2 << endl; if (k == 1) //至少外推2次得出S1,S2 { k++; h /= 2; T1 = T2; S1 = S2; continue; } else { C2 = S2 + 1.0 / 15 * (S2 - S1); //线性组合外推值Cotes cout << "C" << pow(2, k - 2) << " = " << C2 << endl; if (k == 2) //至少外推3次得出C1,C2 { C1 = C2; k++; h /= 2; T1 = T2; S1 = S2; continue; } else { R2 = C2 + 1.0 / 63 * (C2 - C1); //线性组合外推至Romberg cout << "R" << pow(2, k - 3) << " = " << R2 << endl; if (k == 3) //至少外推4次得出R1,R2 { R1 = R2; C1 = C2; k++; h /= 2; T1 = T2; S1 = S2; continue; } else if (abs(R2 - R1) >= accuracy) //精度仍然不符合要求,继续二分步长、继续外推 { R1 = R2; C1 = C2; k = k + 1; h = h / 2; T1 = T2; S1 = S2; } else //精度符合要求,修改flag为0,跳出while循环 { flag = 0; cout << "Romber算法求得数值积分结果为:" << R2 << endl; } } } } return 0; } double f(double x) //自定义被积函数 { double result; result = sin(x) / x; return result; }
-
2017级数值分析第四次次作业.docx
2020-05-07 12:18:50一、(40分)已知线性方程组如下 用列主元高斯消元法进行第一次消元时,所使用的主元是__________________;(5分) 用列主元高斯消元法解此线性方程组;(20分) 并求出系数矩阵A的行列式(即detA)值;(5分) 在将系数... -
差分法数值求解热传导偏微分方程
2022-03-03 21:47:47使用差分法求解一维的热传导偏微分方程,也可以求解类似热传导的偏微分方程。分别推导了显式和隐式的差分离散格式,并使用matlab编写了显式和隐式的求解代码。压缩包中包含了详细的推导文档和带有注释的代码,可供... -
matlab离散差分数值解偏微分方程
2019-05-31 10:35:40matlab求解偏微分方程,相比较把偏微分转成长分为方程再调用ode函数,利用离散差分法,使用迎风格式迭代求解数值解。 -
对分法求方程的根MATLAB完整代码
2017-12-06 20:40:55数值分析中,用对分法求方程根的完整MATLAB代码。首先是对分法的完整代码,,文件中举了一个函数的例子函数可以更改。是数值分析课程很好的实验案例 -
《数值分析》作者:李星 主编 出版时间:2014年
2019-06-07 19:23:3221世纪大学数学创新教材》共9章,主要内容包括:误差及有效数字等概念、插值与拟合、数值积分、解线性方程组的直接法和迭代法、非线性方程和方程组求根、矩阵特征值和特征向量求解、常微分方程和偏微分方程数值解法... -
高斯求积代码matlab-Numerical-Analysis:数值分析
2021-05-23 18:02:56高斯求积代码matlab ...牛顿除数差分插值多项式和带有Chebyshev节点的多项式插值 数值积分 梯形法,辛普森法则,高斯求积 数值线性代数 高斯消除,LU分解,SVD,迭代方法(Gauss-Seidel,连续过松弛,Jacobi)