当前位置:文档之家› 利用MATLAB求解微积分的方法

利用MATLAB求解微积分的方法

利用MATLAB求解微积分的方法
利用MATLAB求解微积分的方法

第 3 章 (1)M A T L A B 微积分

极限与级数的符号运算

M A T L A B 的极限与级数运算在符号系统中进行

◆极限运算

● l i m i t (f , x , a ) 求符号函数f 的极限 ● l i m i t (f , x , a , ’r i g h t ’) 求符号函数f 的右极限 ● l i m i t (f , x , a , ’l e f t ’) 求符号函数f 的左极限

说明:上述命令中的a 可以是无穷大 i n f 或 -i n f

?说明:多元函数的极限需要使用累次极限来计算 举例

◆级数运算

● s y m s u m (a n , n , i , j ) 求符号通项a n 的和

其中,当j 为无穷大i n f 时,即为无穷级数。 举例

◆级数运算

● t a y l o r (f , n , a , x )

求符号函数f 在点a 关于变量x 的n -1阶泰勒多项式 举例

● t a y l o r t o o l 泰勒工具 举例

微积分的符号运算

◆导函数与偏导函数

● d i f f (f , x ) 求符号函数f 对x 的一阶导函数或偏导函数 ● d i f f (f , x , n ) 求符号函数f 对x 的n 阶导函数或偏导函数 ● 注:d i f f 是d i f f e r e n t i a l (微分)的缩写

lim ()

x a

f x +

→lim ()

x a f x -

→lim ()x

a f x →j

n

n i

a =∑

例:计算

? 问:如何求符号函数在给定点的导数值或偏导数值?

求完导函数或偏导函数之后,使用符号替换命令 s u b s 可以求得导函数值或偏导函数值

◆不定积分与定积分

● i n t (f , x )

求符号函数f 关于变量x 的不定积分 ● 注:i n t 是i n t e g r a t i o n (积分)的缩写 ● i n t (f , x , a , b )

求符号函数f 关于变量x 的定积分,a 、b 分别是积分下限和上限,a 、b 可以是函数表达式,也可以是无穷大i n f 或-i n f 举例

● 对于定积分,当系统求不出精确解时,如果被积函数中不含待定符号,可以使用v p a 命令给出近似解 例如: s y m s x a =i n t (s i n (s i n (x )), 1, 2) v p a (a )

?说明: ● 参数方程求导和隐函数求导需要使用相关数学公式(见教材66-67页) ● 重积分、曲线积分与曲面积分需要使用数学方法转化为累次积分来计算

微积分的数值运算

◆微积分的数值运算特点

采用数值算法,主要用于解决导数和定积分的近似计算问题 还可以解决离散数据的相关计算问题

● 实例:某河床的横断面如图所示,试根据图示的测量数据(单位: m ),计算各测量点的坡度和横断面的面积。

)ln(2

22

3xy y x y

x +???,)1

sin (2+x e x

dx d

◆数值导数

● g r a d i e n t (f , x )

该命令求一元函数 f 的数值导数f ’(x )

其中,x 是自变量的一组取值(离散数据),f 是因变量的对应取值(离散数据) ,计算结果是各离散数据点的导数值(近似解)。

?说明:

x 的取值越密集,得到的导数值就越精确。 该命令常用于求解离散型数据的变化率。

● 例:计算前例中的坡度

x =[0,4,10,12,15,22,28,34,40]; f =[0,-1,-3,-6,-8,-9,-5,-3,0]; f x =g r a d i e n t (f ,x )

● 例:求函数y =x 2s i n x 在区间[-3,3]的一阶和二阶数值导数,作出原函数与一、二阶导函数的图形,并观察函数的单调性、凹凸性、极值、拐点与一、二阶导数之间的关系。 x =-3:0.01:3; f =x .^2.*s i n (x );

f x =

g r a d i e n t (f ,x ) f x x =g r a d i e n t (f x ,x ) p l o t (x ,f , x ,f x ,'r --', x ,f x x ,'k --'), g r i d o n

? 思考:怎样求函数在指定点的数值导数?

比如:上面函数在x =1.5和x =1.501的数值导数是多少? f (f i n d (x ==1.5)) 或者 f (x ==1.5) 一般方法:[p ,q ]=m i n (a b s (x -x 0)); f (q )

◆数值偏导数

● [f x , f y ]=g r a d i e n t (f , x , y )

该命令求二元函数f 的数值偏导数f ’x 和f ’y

4 10 12 1

5 22 28 34 40

1

3

6

8

9

5

3

其中,x,y分别是自变量x和y的一组取值(向量表示);

f是定义在x-y平面点集区域上的函数值(矩阵表示),平面点集区域可以使用

m e s h g r i d命令生成;

f x和f y分别得到每个点处偏x和偏y的偏导数值(矩阵表示)。

?说明:x和y的取值越密集,得到的偏导数值就越精确;该命令常用于求解离散型数据的方向导数、梯度、散度、旋度等。

●举例

◆数值定积分

●梯形法数值积分:t r a p z(x,y)

其中x表示自变量在积分区间的一组取值,y表示被积函数对应于x的一

组函数值。

●例:计算前面例题中的横断面积

x=[0,4,10,12,15,22,28,34,40];

y=[0,1,3,6,8,9,5,3,0];

s=t r a p z(x,y)

●例:求积分

解:x=-1:0.1:1;y=e x p(-x.^2);t r a p z(x,y)

●高精度数值积分:q u a d(f,a,b)或q u a d l(f,a,b)

求函数f在区间[a,b]上的定积分,其中:f使用字符串函数表达式或内

联函数,定义函数的乘、除、乘方时要使用点运算。积分限a、b必

须是常量。

q u a d采用自适应步长S i m p s o n积分法

q u a d l采用高精度L o b a t t o积分法

●例求积分

解:z=q u a d l('e x p(-x.^2)',-1,1)

●注意:t r a p z,q u a d,q u a d l都不能用于求反常积分。

◆数值重积分

●矩形区域上的二重积分和立方体区域上的三重积分:

→二重积分命令d b l q u a d(f,a1,a2,b1,b2)

f 为被积函数, 积分区域为矩形[a 1, a 2; b 1, b 2] →三重积分命令 t r i p l e q u a d (f , a 1, a 2, b 1, b 2 , c 1, c 2)

f 为被积函数, 积分区域为立方体[a 1, a 2; b 1, b 2; c 1, c 2]

说明:①被积函数使用字符串函数表达式或内联函数;②乘、除、乘方要用点运算;③积分限必须是常量;④f 是字符串函数表达式时,积分的顺序按照自变量的字典顺序进行,f 是内联函数时,积分的顺序按照自变量的定义顺序进行。

● 积分顺序举例

d b l q u a d ('s i n (t ./r .^2)',1,2,6,9)

即 二重积分

f =i n l i n e ('s i n (t ./r .^2)', 't ', 'r ') d b l q u a d (f ,1,2,6,9)

即 二重积分

微积分的数值运算

◆数值重积分

● 例 计算重积分

92261sin t

dt dr r ?

?9

2

26

1

sin t dr dt r

?

?

用递推公式计算定积分(matlab版)

用递推公式计算定积分 实验目的: 1.充分理解不稳定的计算方法会造成误差的积累,在计算过程中会导致误差的迅速增加,从而使结果产生较大的误差。 2.在选择数值计算公式来进行近似计算时,应学会选用那些在计算过程中不会导致误差迅速增长的计算公式。 3.理解不稳定的计算公式造成误差积累的来源及具体过程; 4.掌握简单的matlab语言进行数值计算的方法。 实验题目: 对n=0,1,2,…,20,计算定积分: 实验原理: 由于y(n)= = – 在计算时有两种迭代方法,如下: 方法一: y(n)=– 5*y(n-1),n=1,2,3, (20) 取y(0)= = ln6-ln5 ≈ 0.182322 方法二: 利用递推公式:y(n-1)=-*y(n),n=20,19, (1) 而且,由 = * ≤≤* =

可取:y(20)≈*()≈0.008730. 实验容: 对算法一,程序代码如下: function [y,n]=funa() syms k n t; t=0.182322; n=0; y=zeros(1,20); y(1)=t; for k=2:20 y(k)=1/k-5*y(k-1); n=n+1; end y(1:6) y(7:11) 对算法二,程序代码如下: %计算定积分; %n--表示迭代次数; %y用来存储结果; function [y,n]=f(); syms k y_20;

y=zeros(21,1); n=1; y_20=(1/105+1/126)/2; y(21)=y_20; for k=21:-1:2 y(k-1)=1/(5*(k-1))-y(k)/5; n=n+1; end 实验结果: 由于计算过程中,前11个数字太小,后9个数字比较大,造成前面几个数字只显示0.0000的现象,所以先输出前6个,再输出7—11个,这样就能全部显示出来了。 算法一结果: [y,n]=funa %先显示一y(1)—y(6) ans = 0.1823 -0.4116 2.3914 -11.7069 58.7346

【数学建模学习】Matlab的数值积分

Matlab 的数值积分问题 (1)求和命令sum 调用格式. 如果x 是向量,则sum(x) 给出x 的各个元素的累加和;如果x 是矩阵,则sum(x)是一个元素为x 的每列列和的行向量. 例3.1 调用命令sum 求向量x 的各个元素的累加和。 解:输入 x=[1,2,3,4,5,6,7,8,9,10]; sum(x) 得到 ans=55 例3.2 调用命令sum 求矩阵x 的各列元素的累加和。 解:输入 x=[1,2,3;4,5,6;7,8,9] x= 1 2 3 4 5 6 7 8 9 sum(x) 得到 ans=12 15 18 2.定积分的概念. 定积分是一个积分和的极限. 例如取x e x f =)(,求定积分?10dx e x 的近似值。 积分区间为[0,1],等距划分为20个子区间, x=linspace(0,1,21); 选取每个子区间的端点,并计算端点处的函数值. y=exp(x); 取区间的左端点处的函数值乘以区间长度全部加起来. y1=y(1:20); s1=sum(y1)/20 s1=1.6757 s1可作为定积分?10dx e x 的近似值。 若选取右端点: y2=y(2:21); s2=sum(y2)/20 s2=1.7616 s2也可以作为定积分?10dx e x 的近似值。 下面我们画出图象. plot(x,y);hold on for i=1:20 fill([x(i),x(i+1),x(i+1),x(i),x(i)],[0,0,y(i),y(i),0],'b')

end 如果选取右端点,则可画出图象. for i=1:20 fill([x(i),x(i+1),x(i+1),x(i),x(i)],[0,0,y(i+1),y(i+1),0],'b') hold on end plot(x,y,'r') 在上边的语句中,for … end 是循环语句,执行语句体内的命令20次,fill 命令可以填充多边形,在本例中,用的是兰色(blue)填充. 可试取50个子区间看一看结果怎样.下面按等分区间计算。 syms k n s=symsum(exp(k/n)/n,k,1,n); limit(s,n,inf) 得结果 ans=exp(1)-1 3.计算定积分 例3.6 计算?10dx e x . 解:输入命令: syms x; int(exp(x),0,1) 得结果 ans=exp(1)-1. 这与我们上面的运算结果是一致的. ⒈ 由给定数据进行梯形求积 假设已经建立起向量T N T N y y y y x x x x ],,,[,],,,[2121 ==,则可用以下语句进行梯形求积: sum((2*y(1:end-1,:)+diff(y)).*diff(x))/2 MATLAB 提供的trapz()函数也可直接用梯形法求解积分问题,该函数调用格式为 S=trapz(x,y) [例1-6-17] 试用梯形法求出),0(π∈x 区间内,函数sin(x),cos(x),sin(x/2)的定积分值。 [求解] >> x1=[0:pi/30:pi]'; y=[sin(x1) cos(x1) sin(x1/2)]; x=[x1 x1 x1]; S=sum((2*y(1:end-1,:)+diff(y)).*diff(x))/2 >> S1=trapz(x1,y) [例1-6-18] 用定步长方法求解积分?2 /30)15cos(πdx x 。 [求解] 鉴于求解区域内被积函数有很强的振荡,可先用下述语句绘制被积函数的曲线。 >> x=[0:0.01:3*pi/2,3*pi/2]; y=cos(15*x); plot(x,y) 采用不同的步距,可分别得到积分近似结果。 >> syms x, A=int(cos(15*x),0,3*pi/2) % 求理论值 >> h0=[0.1,0.01,0.001,0.0001,0.00001,0.000001]; v=[]

matlab微积分基本运算

matlab 微积分基本运算 §1 解方程和方程组解 1. 线性方程组求解 对于方程 AX = B ,其中 A 是( m ×n )的矩阵有三种情形: 1)当n=m 且A 非奇异时,此方程为“恰定”方程组。 2)当 n > m 时,此方程为“超定”方程组。 3)当n

0.3188 两种方法所求方程组的解相同。 (2)MATLAB 解超定方程AX=B 的方法 对于方程 AX = B ,其中 A 是( m ×n )的矩阵, n > m ,如果A 列满秩,则此方程是没有精确解的。然而在实际工程应用中,求得其最小二乘解也是有意义的。基本解法有: 1)采用求伪逆运算解方程 x=pinv(A)*B 说明:此解为最小二乘解x=inv(A ’*A)*A*B,这里pinv(A) =inv(A ’*A)*A. 2)采用左除运算解方程 x=A\B 例2 “求伪逆”法和“左除”法求下列方程组的解 ??? ??=+=+=+1 221421 221 2121x x x x x x 命令如下: >> a=[1 2;2 4;2 2]; >> b=[1,1,1]'; >> xc=a\b %用左除运算解方程 运行得结果: xc = 0.4000 0.1000 >> xd=pinv(a)*b %用求伪逆运算解方程 运行得结果: xd = 0.4000 0.1000 >> a*xc-b %xc 是否满足方程ax=b 运行得结果: ans = -0.4000 0.2000 0.0000 可见xc 并不是方程的精确解。 (3) MATLAB 解欠定方程AX=B 的方法 欠定方程从理论上说是有无穷多个解的,如果利用求“伪逆”法和“左除”法来求解,只能得到其中一个解。基本方法: 1)采用求伪逆运算解方程 x=pinv(A)*B 2)采用左除运算解方程

数值积分的matlab实现

实验10 数值积分 实验目的: 1.了解数值积分的基本原理; 2.熟练掌握数值积分的MATLAB 实现; 3.会用数值积分方法解决一些实际问题。 实验内容: 积分是数学中的一个基本概念,在实际问题中也有很广泛的应用。同微分一样,在《微积分》中,它也是通过极限定义的,由于实际问题中遇到的函数一般都以列表形式给出,所以常常不能用来直接进行积分。此外有些函数虽然有解析式,但其原函数不是初等函数,所以仍然得不到积分的精确值,如不定积分?1 0 d sin x x x 。这时我们一般考虑用数值方法计算其 近似值,称为数值积分。 10.1 数值微分简介 设函数()y f x =在* x 可导,则其导数为 h x f h x f x f h ) ()(lim )(**0* -+='→ (10.1) 如果函数()y f x =以列表形式给出(见表10-1),则其精确值无法求得,但可由下式求得其近似值 h x f h x f x f ) ()()(*** -+≈' (10.2) 表 10-1 一般的,步长h 越小,所得结果越精确。(10.2)式右端项的分子称为函数()y f x =在 *x 的差分,分母称为自变量在*x 的差分,所以右端项又称为差商。数值微分即用差商近似 代替微商。常用的差商公式为: 000()() ()2f x h f x h f x h +--'≈ (10.3) h y y y x f 243)(2 100-+-≈ ' (10.4)

h y y y x f n n n n 234)(12+-≈ '-- (10.5) 其误差均为2 ()O h ,称为统称三点公式。 10.2 数值微分的MATLAB 实现 MATLAB 提供了一个指令求解一阶向前差分,其使用格式为: dx=diff(x) 其中x 是n 维数组,dx 为1n -维数组[]21321,, ,n x x x x x x ---,这样基于两点的数值导 数可通过指令diff(x)/h 实现。对于三点公式,读者可参考例1的M 函数文件diff3.m 。 例1 用三点公式计算()y f x =在=x 1.0,1.2,1.4处的导数值,()f x 的值由下表给 解:建立三点公式的M 函数文件diff3.m 如下: function f=diff3(x,y) n=length(x);h=x(2)-x(1); f(1)=(-3*y(1)+4*y(2)-y(3))/(2*h); for j=2:n-1 f(j)=(y(j+1)-y(j-1))/(2*h); end f(n)=(y(n-2)-4*y(n-1)+3*y(n))/(2*h); 在MATLAB 指令窗中输入指令: x=[1.0,1.1,1.2,1.3,1.4];y=[0.2500,0.2268,0.2066,0.1890,0.1736];diff3(x,y) 运行得各点的导数值为:-0.2470,-0.2170,-0.1890,-0.1650,-0.0014。所以()y f x =在=x 1.0,1.2,1.4处的导数值分别为-0.2470,-0.1890和-0.0014。 对于高阶导数,MATLAB 提供了几个指令借助于样条函数进行求导,详细使用步骤如下: step1:对给定数据点(x,y ),利用指令pp=spline(x,y),获得三次样条函数数据pp ,供后面ppval 等指令使用。其中,pp 是一个分段多项式所对应的行向量,它包含此多项式的阶数、段数、节点的横坐标值和各段多项式的系数。 step2:对于上面所求的数据向量pp ,利用指令[breaks,coefs,m,n]=unmkpp(pp)进行处理,生成几个有序的分段多项式pp 。 step3:对各个分段多项式pp 的系数,利用函数ppval 生成其相应导数分段多项式的系数,再利用指令mkpp 生成相应的导数分段多项式 step4:将待求点xx 代入此导数多项式,即得样条导数值。 上述过程可建立M 函数文件ppd.m 实现如下: function dy=ppd(pp) [breaks,coefs,m]=unmkpp(pp);

数值积分算法与MATLAB实现陈悦5133201讲解

东北大学秦皇岛分校 数值计算课程设计报告 数值积分算法及MATLAB实现 学院数学与统计学院 专业信息与计算科学 学号5133201 姓名陈悦 指导教师姜玉山张建波 成绩 教师评语: 指导教师签字: 2015年07月14日

1 绪论 数值分析是计算数学的一个主要部分,计算数学是数学科学的一个分支,它研究用计算机求解各种数学问题的数值检索方其理论与软件的实现.而数值分析主要研究数值计算. 现科学技术的发展与进步提出了越来越多的复杂的数值计算问题,这些问题的圆满解决已远人工手算所能胜任,必须依靠电子计算机快速准确的数据处理能力.这种用计算机处理数值问题的方法,成为科学计算.今天,科学计算的应用范围非常广泛,天气预报、工程设计、流体计算、经济规划和预测以及国防尖端的一些科研项目,如核武器的研制、导弹和火箭的发射等,始终是科学计算最为活跃的领域. 1.1 数值积分介绍 数值积分是数值分析的重要环节,实际问题当中常常需要计算积分,有些数值方法,如微分方程和积分方程的求解,也都和积分计算相联系. 求某函数的定积分时,在多数情况下,被积函数的原函数很难用初等函数表达出来,因此能够借助微积分学的牛顿-莱布尼兹公式计算定积分的机会是不多的.另外,许多实际问题中的被积函数往往是列表函数或其他形式的非连续函数,对这类函数的定积分,也不能用不定积分方法求解.由于以上原因,数值积分的理论与方法一直是计算数学研究的基本课题.对微积分学做出杰出贡献的数学大师,如I.牛顿、L.欧拉、C.F.高斯、拉格朗日等人都在数值积分这个领域作出了各自的贡献,并奠定了这个分支的理论基础. 构造数值积分公式最通常的方法是用积分区间上的n 次插值多项式代替被积函数,由此导出的求积公式称为插值型求积公式.特别在节点分布等距的情形称为牛顿-科特斯公式,例如梯形公式(Trapezoidal Approximations)与抛物线公式(Approximations Using Parabolas)就是最基本的近似公式.但它们的精度较差.龙贝格算法是在区间逐次分半过程中,对梯形公式的近似值进行加权平均获得准确程度较高的积分近似值的一种方法,它具有公式简练、计算结果准确、使用方便、稳定性好等优点,因此在等距情形宜采用龙贝格求积公式(Rhomberg Integration).当用不等距节点进行计算时,常用高斯型求积公式计算,它在节点数目相同情况下,准确程度较高,稳定性好,而且还可以计算无穷积分.数值积分还是微分方程数值解法的重要依据.许多重要公式都可以用数值积分方程导出.现探讨数值积分算法以及运用MATLAB软件的具体实现

matlab求定积分之实例说明

一、符号积分 符号积分由函数int来实现。该函数的一般调用格式为: int(s):没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式s求不定积分; int(s,v):以v为自变量,对被积函数或符号表达式s求不定积分; int(s,v,a,b):求定积分运算。a,b分别表示定积分的下限和上限。该函数求被积函数在区间[a,b]上的定积分。a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。当函数f关于变量x在闭区间[a,b]上可积时,函数返回一个定积分结果。当a,b中有一个是inf时,函数返回一个广义积分。当a,b中有一个符号表达式时,函数返回一个符号函数。 例: 求函数x^2+y^2+z^2的三重积分。内积分上下限都是函数,对z积分下限是sqrt(x*y),积分上限是x^2*y;对y积分下限是sqrt(x),积分上限是x^2;对x的积分下限1,上限是2,求解如下: >>syms x y z %定义符号变量 >>F2=int(int(int(x^2+y^2+z^2,z,sqrt(x*y),x^2*y),y,sqrt(x),x^2),x,1,2) %注意定积分的书写格式 F2 = 1610027357/6563700-6072064/348075*2^(1/2)+14912/4641*2^(1/4)+64/225*2 ^(3/4) %给出有理数解 >>VF2=vpa(F2) %给出默认精度的数值解 VF2 = 224.92153573331143159790710032805 二、数值积分 1.数值积分基本原理 求解定积分的数值方法多种多样,如简单的梯形法、辛普生(Simpson)?法、牛顿-柯特斯(Newton-Cotes)法等都是经常采用的方法。它们的基本思想都是将整个积分区间[a,b]分成n个子区间[xi,xi+1],i=1,2,…,n,其中x1=a,xn+1=b。这样求定积分问题就分解为求和问题。 2.数值积分的实现方法 基于变步长辛普生法,MATLAB给出了quad函数来求定积分。该函数的调用格式为: [I,n]=quad('fname',a,b,tol,trace) 基于变步长、牛顿-柯特斯(Newton-Cotes)法,MATLAB给出了quadl函数来求定积分。该函数的调用格式为: [I,n]=quadl('fname',a,b,tol,trace) 其中fname是被积函数名。a和b分别是定积分的下限和上限。tol用来控制积分精度,缺省时取tol=0.001。trace控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,缺省时取trace=0。返回参数I即定积分值,n为被积函数的调用次数。 例: 求函数'exp(-x*x)的定积分,积分下限为0,积分上限为1。 >>fun=inline('exp(-x.*x)','x'); %用内联函数定义被积函数fname

数值积分用matlab实现

数值积分用m a t l a b实 现

东北大学秦皇岛分校 数值计算课程设计报告 数值积分及Matlab实现 学院数学与统计学院 专业信息与计算科学 学号5133117 姓名楚文玉 指导教师张建波姜玉山 成绩 教师评语: 指导教师签字: 2015年07月14日

1 绪论 在科研计算中,经常会碰到一些很难用公式定理直接求出精确解的积分问题,对于这类问题,我们一般转化为数值积分问题,用计算机来实现求解问题. 1.1 课题的背景 对于定积分()b a f x dx ?在求某函数的定积分时,在一定条件下,虽然有牛顿-莱布里 茨公式()()()b a I f x dx F b F a ==-?可以计算定积分的值,但在很多情况下的原函数() f x 不易求出或非常复杂.被积函数的原函数很难用初等函数表达出来,例如 2 sin (),x x f x e x -= 等;有的函数()f x 的原函数()F x 存在,但其表达式太复杂,计算量太大,有的甚至无法有解析表达式.因此能够借助牛顿-莱布尼兹公式计算定积分的情形是不多的.另外,许多实际问题中的被积函数()f x 往往是列表函数或其他形式的非连续函数,对这类函数的定积分,也不能用不定积分方法求解,只能设法求其近似值.因此,探讨近似计算的数值积分方法是有明显的实际意义的,即有必要研究定积分的数值计算方法,以解决定积分的近似计算.而数值积分就是解决此类问题的一种有效的方法,它的特点是利用被积函数在一些节点上的信息求出定积分的近似值.微积分的发明是人类科学史上一项伟大的成就,在科学技术中,积分是经常遇到的一个重要计算环节数值积分是数学上重要的课题之一,是数值分析中重要的内容之一.随着计算机的出现,近几十年来,对于数值积分问题的研究已经成为一个很活跃的研究领域.现在,数值积分在计算机图形学,积分方程,工程计算,金融数学等应用科学领域都有着相当重要的应用,所以研究数值积分问题有着很重要的意义.国内外众多学者在数值积分应用领域也提出了许多新方法.在很多实际应用中,只能知道积分函数在某些特定点的取值,比如天气测量中的气温、湿度、气压等,医学测量中的血压、浓度等等.通过这个课题的研究,我们将会更好地掌握运用数值积分算法求出特殊积分函数的定积分的一些基本方法、理论基础;并且通过Matlab 软件编程的实现,应用于实际生活中. 1.2 课题的主要内容框架

实验一B Matlab基本操作与微积分计算

实验一Matlab基本操作与微积分计算 实验目的 1.进一步理解导数概念及其几何意义. 2.学习matlab的求导命令与求导法. 3.通过本实验加深理解积分理论中分割、近似、求和、取极限的思想方法. 4.学习并掌握用matlab求不定积分、定积分、二重积分、曲线积分的方法. 5.学习matlab命令sum、symsum与int. 实验内容 一、变量 1、变量 MA TLAB中变量的命名规则是: (1)变量名必须是不含空格的单个词; (2)变量名区分大小写; (3)变量名最多不超过19个字符; (4)变量名必须以字母打头,之后可以是任意字母、数字或下划线,变量名中不允许使用标点符号. 1、创建简单的数组 x=[a b c d e f ]创建包含指定元素的行向量 x=first:step: last创建从first起,逐步加step计数,last结束的行向量, step缺省默认值为1 x=linspace(first,last,n)创建从first开始,到last结束,有n个元素的行向量 x=logspace(first,last,n)创建从first开始,到last结束,有n个元素的对数分隔行向量. 注:以空格或逗号分隔的元素指定的是不同列的元素,而以分号分隔的元素指定了不同行的元素. 2、数组元素的访问 (1)访问一个元素: x(i)表示访问数组x的第i个元素. (2)访问一块元素: x(a :b :c)表示访问数组x的从第a个元素开始,以步长为b到第c个元素(但

不超过c),b可以为负数,b缺损时为1. (3)直接使用元素编址序号: x ([a b c d]) 表示提取数组x的第a、b、c、d个元素构成一个新的数组[x (a) x (b) x(c) x(d)]. 3、数组的运算 (1)标量-数组运算 数组对标量的加、减、乘、除、乘方是数组的每个元素对该标量施加相应的加、减、乘、除、乘方运算. 设:a=[a1,a2,…,an], c=标量, 则: a+c=[a1+c,a2+c,…,an+c] a .*c=[a1*c,a2*c,…,an*c] a ./c= [a1/c,a2/c,…,an/c](右除) a .\c= [c/a1,c/a2,…,c/an] (左除) a .^c= [a1^c,a2^c,…,an^c] c .^a= [c^a1,c^a2,…,c^an] (2)数组-数组运算 当两个数组有相同维数时,加、减、乘、除、幂运算可按元素对元素方式进行的,不同大小或维数的数组是不能进行运算的. 设:a=[a1,a2,…,an], b=[b1,b2,…,bn], 则: a +b= [a1+b1,a2+b2,…,an+bn] a .*b= [a1*b1,a2*b2,…,an*bn] a ./b= [a1/b1,a2/b2,…,an/bn] a .\b=[b1/a1,b2/a2,…,bn/an] a .^b=[a1^b1,a2^b2,…,an^bn] 三、矩阵 1、矩阵的建立 矩阵直接输入:从“[ ” 开始,元素之间用逗号“,”(或空格),行之间用分号“;”(或回车),用“ ]”结束. 特殊矩阵的建立: a=[ ] 产生一个空矩阵,当对一项操作无结果时,返回空矩阵,空矩阵的大小为零. b=zeros (m,n) 产生一个m行、n列的零矩阵 c=ones (m,n) 产生一个m行、n列的元素全为1的矩阵 d=eye (m,n) 产生一个m行、n列的单位矩阵 eye (n) %生成n维的单位向量 eye (size (A)) %生成与A同维的单位阵 2、矩阵中元素的操作 (1)矩阵A的第r行A(r,:) (2)矩阵A的第r列A(:,r) (3)依次提取矩阵A的每一列,将A拉伸为一个列向量A(:) (4)取矩阵A的第i1~i2行、第j1~j2列构成新矩阵:A(i1:i2, j1:j2) (5)以逆序提取矩阵A的第i1~i2行,构成新矩阵:A(i2:-1:i1,:) (6)以逆序提取矩阵A的第j1~j2列,构成新矩阵:A(:, j2:-1:j1 ) (7)删除A的第i1~i2行,构成新矩阵:A(i1:i2,:)=[ ] (8)删除A的第j1~j2列,构成新矩阵:A(:, j1:j2)=[ ] (9)将矩阵A和B拼接成新矩阵:[A B];[A;B] 3、矩阵的运算 (1)标量-矩阵运算同标量-数组运算. (2)矩阵-矩阵运算 a. 元素对元素的运算,同数组-数组运算.(A/B %A右除B; B\A%A左除B) b. 矩阵运算: 矩阵加法:A+B 矩阵乘法:A*B 方阵的行列式:det(A) 方阵的逆:inv(A)

详解Matlab求积分的各种方法

详解Matlab求积分的各种方法 一、符号积分由函数int来实现。 该函数的一般调用格式为: int(s): 没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式s求不定积分;int(s,v): 以v为自变量,对被积函数或符号表达式s求不定积分;int(s,v,a,b): 求定积分运算。 a,b分别表示定积分的下限和上限。 该函数求被积函数在区间[a,b]上的定积分。 a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。 当函数f关于变量x在闭区间[a,b]上可积时,函数返回一个定积分结果。 当a,b中有一个是inf时,函数返回一个广义积分。 当a,b中有一个符号表达式时,函数返回一个符号函数。 例: 求函数x^2+y^2+z^2的三重积分。 内积分上下限都是函数,对z积分下限是sqrt(x*y),积分上限是x^2*y;对y积分下限是sqrt(x),积分上限是x^2;对x的积分下限1,上限是2,求解如下: >>syms x y z %定义符号变 量>>F2=int(int(int(x^2+y^2+z^2,z,sqrt(x*y),x^2*y),y,sqrt(x),x^2),x,1,2) %注意定积分的书写格式F2 =57/-

/348075*2^(1/2)+14912/4641*2^(1/4)+64/225*2^(3/4) %给出有理数 解>>VF2=vpa(F2) %给出默认精度的数值解VF2 = 224.9 232805二、数值积分 1.数值积分基本原理求解定积分的数值方法多种多样,如简单的梯形法、辛普生(Simpson)?法、牛顿-柯特斯(Newton-Cotes)法等都是经常采用的方法。 它们的基本思想都是将整个积分区间[a,b]分成n个子区间[xi,xi+1], i=1,2,…,n,其中x1=a,xn+1=b。 这样求定积分问题就分解为求和问题。 2.数值积分的实现方法基于变步长辛普生法,MATLAB给出了quad函数来求定积分。 该函数的调用格式为: [I,n]=quad('fname',a,b,tol,trace)基于变步长、牛顿-柯特斯(Newton-Cotes)法,MATLAB给出了quadl函数来求定积分。 该函数的调用格式为: [I,n]=quadl('fname',a,b,tol,trace)其中fname是被积函数名。 a和b分别是定积分的下限和上限。 tol用来控制积分精度,缺省时取tol= 0.0 01。 trace控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,缺省时取trace= 0。

MATLAB计算积分

函数的积分和椭圆的周长 1.正弦函数的积分 [问题]求正弦函数从0到π的积分 y = sin x 当x = 0时,积分为0,画出积分的函数曲线。 [数学模型] 定积分的结果为 ππ00 sin d cos 2S x x x ==-=? 不定积分的结果为 sin d cos I x x x C ==-+? 其中C 是积分常量,由初始条件决定。当x = 0时,积分为I = 0,必有C = 1。结果为 I = -cos x + 1 [算法]根据积分的基本概念,将积分区域分为多份,用矩形法求曲线下的近似面积表示积分的近似值 1()n i i S f x x ==?∑ 矩形法的函数是sum(f)。 用梯形法求曲线下的近似面积表示积分的近似值 1 101[()()]2 n i i i S f x f x x -+==+?∑ 梯形法的函数是trapz(f)。 用数值积分的函数是quad 和quadl ,常用使用格式是 S = quad(f,a,b) 其中,f 表示被积函数,a 表示积分的下限,b 表示积分的下限。 用符号的函数是int ,常用使用格式是 S = int(f,a,b) [程序]zqy4_1.m 如下。 %正弦函数的积分 clear %清除变量 x=linspace(0,pi); %自变量向量 dx=x(2); %间隔 y=sin(x); %被积函数 s1=sum(y)*dx %矩形法积分 s2=trapz(y)*dx %梯形法积分 f=inline('sin(x)'); %被积的内线函数 s3=quad(f,0,pi) %数值定积分

s4=int('sin(x)',0,pi) %符号积分 sc1=cumsum(y)*dx; %矩形法累积积分(精度稍差) sc2=cumtrapz(y)*dx; %梯形法累积积分 figure %创建图形窗口 plot(x,-cos(x)+1,x,sc1,'.',x,sc2,'o') %画解析式和矩阵法以及梯形法积分曲线 s=int('sin(x)') %符号积分 sc3=subs(s,'x',x); %替换数值求符号积分的值 C=-sc3(1) %求积分常数 hold on %保持图像 plot(x,sc3+C,'c*') %画符号法积分曲线 grid on %加网格 fs=16; %字体大小 xlabel('\itx','FontSize',fs) %横坐标 ylabel('\intsin\itx\rmd\itx','FontSize',fs)%纵坐标 title('正弦函数的积分','FontSize',fs) %标题 legend('解析解','矩形法','梯形法','符号法')%图例 zqy4.1图 zqy4.2图 2.三角函数和指数的积分 [问题]求如下函数的积分 y = e ax sin bx 其中a = 0.5,b = 2。积分下限为0。画出积分的函数曲线。 [数学模型] 设 11e sin d sin de {e sin e cos d }ax ax ax ax I bx x bx bx b bx x a a == =-??? 11{e sin cos de }{e sin [e cos e sin d ]}ax ax ax ax ax b b bx bx bx bx b bx x a a a a =-=-+?? 因此不定积分为 221e (sin cos )ax I a bx b bx C a b =-++ 当x = 0时,I 应该为零,所以 22b C a b =+

数值积分算法与MATLAB实现

数值积分算法与MATLAB实现 本文从网络收集而来,上传到平台为了帮到更多的人,如果您需要使用本文档,请点击下载按钮下载本文档(有偿下载),另外祝您生活愉快,工作顺利,万事如意! 摘要:在求一些函数的定积分时,由于原函数十分复杂难以求出或用初等函数表达,导致积分很难精确求出,只能设法求其近似值,因此能够直接借助牛顿-莱布尼兹公式计算定积分的情形是不多的。数值积分就是解决此类问题的一种行之有效的方法。积分的数值计算是数值分析的一个重要分支;因此,探讨近似计算的数值积分方法是有着明显的实际意义的。本文从数值积分问题的产生出发,详细介绍了一些数值积分的重要方法。 本文较详细地介绍了牛顿-科特斯求积公式,以及为了提高积分计算精度的高精度数值积分公式,即龙贝格求积公式和高斯-勒让德求积公式。除了研究这些数值积分算法的理论外,本文还将这些数值积分算法在计算机上通过MATLAB软件编程实现,并通过实例用各种求积公式进行运算,分析比较了各种求积公式的计算误差。 【关键词】数值积分牛顿-科特斯求积公式高精度求积公式MATLAB软件

前言 对于定积分,在求某函数的定积分时,在一定条件下,虽然有牛顿-莱布里茨公式可以计算定积分的值,但在很多情况下的原函数不易求出或非常复杂。被积函数的原函数很难用初等函数表达出来,例如等;有的函数的原函数存在,但其表达式太复杂,计算量太大,有的甚至无法有解析表达式。因此能够借助牛顿-莱布尼兹公式计算定积分的情形是不多的。另外,许多实际问题中的被积函数往往是列表函数或其他形式的非连续函数,对这类函数的定积分,也不能用不定积分方法求解,只能设法求其近似值。因此,探讨近似计算的数值积分方法是有明显的实际意义的,即有必要研究定积分的数值计算方法,以解决定积分的近似计算。而数值积分就是解决此类问题的一种有效的方法,它的特点是利用被积函数在一些节点上的信息求出定积分的近似值。 微积分的发明是人类科学史上一项伟大的成就,在科学技术中,积分是经常遇到的一个重要计算环节。数值积分是数学上重要的课题之一,是数值分析中重要的内容之一,也是应用数学研究的重点。随着计算机的出现,近几十年来,对于数值积分问题的研究已经成为一个很活跃的研究领域。现在,数值积分在计算

matlab实现数值分析报告插值及积分

Matlab实现数值分析插值及积分 摘要: 数值分析(numerical analysis)是研究分析用计算机求解数学计算问题的数值计算方法及其理论的学科,是数学的一个分支,它以数字计算机求解数学问题的理论和方法为研究对象。在实际生产实践中,常常将实际问题转化为数学模型来解决,这个过程就是数学建模。学习数值分析这门课程可以让我们学到很多的数学建模方法。 分别运用matlab数学软件编程来解决插值问题和数值积分问题。题目中的要求是计算差值和积分,对于问题一,可以分别利用朗格朗日插值公式,牛顿插值公式,埃特金逐次线性插值公式来进行编程求解,具体matlab代码见正文。编程求解出来的结果为:=+。 其中Aitken插值计算的结果图如下: 对于问题二,可以分别利用复化梯形公式,复化的辛卜生公式,复化的柯特斯公式编写程序来进行求解,具体matlab代码见正文。编程求解出来的结果为: 0.6932 其中复化梯形公式计算的结果图如下:

问题重述 问题一:已知列表函数 表格 1 分别用拉格朗日,牛顿,埃特金插值方法计算。 问题二:用复化的梯形公式,复化的辛卜生公式,复化的柯特斯公式计算积分,使精度小于5。 问题解决 问题一:插值方法 对于问题一,用三种差值方法:拉格朗日,牛顿,埃特金差值方法来解决。 一、拉格朗日插值法: 拉格朗日插值多项式如下: 首先构造1+n 个插值节点n x x x ,,,10 上的n 插值基函数,对任一点i x 所对应的插值基函数 )(x l i ,由于在所有),,1,1,,1,0(n i i j x j +-=取零值,因此)(x l i 有因子 )())(()(110n i i x x x x x x x x ----+- 。又因)(x l i 是一个次数不超过n 的多项式,所以只 可能相差一个常数因子,固)(x l i 可表示成: )())(()()(110n i i i x x x x x x x x A x l ----=+- 利用1)(=i i x l 得:

Matlab数值积分与数值微分

M a t l a b数值积分与数值微分 Matlab数值积分 1.一重数值积分的实现方法 变步长辛普森法、高斯-克朗罗德法、梯形积分法 1.1变步长辛普森法 Matlab提供了quad函数和quadl函数用于实现变步长 辛普森法求数值积分.调用格式为: [I,n]=Quad(@fname,a,b,tol,trace) [I,n]=Quadl(@fname,a,b,tol,trace) Fname是函数文件名,a,b分别为积分下限、积分上限; tol为精度控制,默认为1.0×10-6,trace控制是否展 开积分过程,若为0则不展开,非0则展开,默认不展开. 返回值I为积分数值;n为调用函数的次数. --------------------------------------------------------------------- 例如:求 ∫e0.5x sin(x+π )dx 3π 的值. 先建立函数文件 fesin.m function f=fesin(x) f=exp(-0.5*x).*sin(x+(pi/6));再调用quad函数

[I,n]=quad(@fesin,0,3*pi,1e-10) I= 0.9008 n= 365 --------------------------------------------------------------------- 例如:分别用quad函数和quadl函数求积分 ∫e0.5x sin(x+π 6 )dx 3π 的近似值,比较函数调用的次数. 先建立函数文件 fesin.m function f=fesin(x) f=exp(-0.5*x).*sin(x+(pi/6)); formatlong [I,n]=quadl(@fesin,0,3*pi,1e-10) I= n= 198 [I,n]=quad(@fesin,0,3*pi,1e-10) I= n= 365 --------------------------------------------------------------------- 可以发现quadl函数调用原函数的次数比quad少,并 且比quad函数求得的数值解更精确. 1.2高斯-克朗罗德法

利用Matlab实现Romberg数值积分算法----系统建模与仿真结课作业

利用Matlab 实现Romberg 数值积分算法 一、内容摘要 针对于某些多项式积分,利用Newton —Leibniz 积分公式求解时有困难,可以采用数值积分的方法,求解指定精度的近似解,本文利用Matlab 中的.m 文件编写了复化梯形公式与Romberg 的数值积分算法的程序,求解多项式的数值积分,比较两者的收敛速度。 二、数值积分公式 1.复化梯形公式求解数值积分的基础是将区间一等分时的Newton —Cotes 求积公式: I =(x)[f(a)f(b)]2 b a b a f dx -≈ +? 其几何意义是,利用区间端点的函数值、与端点构成的梯形面积来近似(x)f 在区间[a,b]上的积分值,截断误差为: 3" (b a)()12 f η-- (a,b)η∈ 具有一次的代数精度,很明显,这样的近似求解精度很难满足计算的要求,因而,可以采用将积分区间不停地对分,当区间足够小的时候,利用梯形公式求解每一个小区间的积分近似值,然后将所有的区间加起来,作为被求函数的积分,可以根据计算精度的要求,划分对分的区间个数,得到复化梯形公式: I =1 1 (b a)(b a) (x)dx [f(a)f(b)2(a )]2n b a k k f f n n -=--≈+++∑? 其截断误差为:

2" (b a)h ()12 R f η--= (a,b)η∈ 2.Romberg 数值积分算法 使用复化的梯形公式计算的数值积分,其收敛速度比减慢,为此,采用Romberg 数值积分。其思想主要是,根据I 的近似值2n T 加上I 与2n T 的近似误差,作为新的I 的近视,反复迭代,求出满足计算精度的近似解。 用2n T 近似I 所产生的误差可用下式进行估算: 12221 ()3 n n n I T T T -?=-=- 新的I 的近似值: 122 n n j T T -=?+ j =(0 1 2 ….) Romberg 数值积分算法计算顺序 i=0 (1) 002T i=1 (2) 102T (3) 012T i=2 (4) 202T (5) 112T (6) 022T i=3 (7) 302T (8) 212T (9) 122T (10) 032T i=4 (11) 402T (12) 312T (13) 222T (14) 132T … … … … 其中,第一列是二阶收敛的,第二列是四阶收敛的,第三列是六阶收敛的,第四列是八阶收敛的,即Romberg 序列。

高等数学实验报告matlab

西安交通大学 高等数学 实验报告 班级 组员与学号 2013年

实验名称:学生成绩管理 一、实验目的 二、实验内容 三、详细编程 clear for i=1:10 a{i}=89+i; b{i}=79+i; c{i}=69+i; d{i}=59+i; end c=[d,c]; Name=input('please input name:'); Score=input('please input score:'); n=length(Score); Rank=cell(1,n); S=struct('Name',Name,'Score',Score,'Rank',Rank); for i=1:n switch S(i).Score case 100 S(i).Rank='满分'; case a S(i).Rank='优秀'; case b S(i).Rank='良好'; case c S(i).Rank='及格'; otherwise S(i).Rank='不及格'; end end disp(['学生姓名 ','得分 ','等级']);

for i=1:n disp([S(i).Name,blanks(6),num2str(S(i).Score),blanks(6),S(i).Rank]); end s=0; for i=1:n s=S(i).Score+s; end averscore=s/n; t=S(1).Score; for i=1:(n-1) if(S(i).ScoreS(i+1).Score) m=S(i+1).Score; end end disp(['平均成绩']); disp([averscore]); disp(['最高分']); disp(t); disp(['最低分']); disp(m); 四、实验结果

相关主题
文本预览
相关文档 最新文档