文档库 最新最全的文档下载
当前位置:文档库 › matlab求解微积分的问题

matlab求解微积分的问题

第3 章

微积分问题的计算机求解

?薛定宇、陈阳泉著《高等应用数学问题的MATLAB求解》,清华大学出版社2004

?CAI课件开发:刘莹莹、薛定宇

高等应用数学问题的MATLAB 求解

主要内容

?微积分问题的解析解

?函数的级数展开与级数求和问题求解?数值微分

?数值积分问题

?曲线积分与曲面积分的计算

?本章要点简介

高等应用数学问题的MATLAB 求解

3.1 微积分问题的解析解

?3.1.1 极限问题的解析解?3.1.2 函数导数的解析解?3.1.3 积分问题的解析解

高等应用数学问题的MATLAB 求解

高等应用数学问题的

MATLAB 求解

3.1.1 极限问题的解析解

3.1.1.1单变量函数的极限

【例3-1】试求解极限问题

高等应用数学问题的MATLAB 求解

高等应用数学问题的MATLAB

求解

【例3-2】求解单边极限问题

3.1.1.2 多变量函数的极限

高等应用数学问题的MATLAB 求解

【例3-3】求出二元函数极限值

高等应用数学问题的MATLAB 求解

3.1.2

函数导数的解析解

3.1.2.1 函数的导数和高阶导数

高等应用数学问题的MATLAB 求解

高等应用数学问题的

MATLAB

求解

【例

3-4】

高等应用数学问题的MATLAB 求解

3.1.2.2 多元函数的偏导

高等应用数学问题的MATLAB 求解

高等应用数学问题的

MATLAB 求解

【例

3-5】

三维曲面:

引力线:

高等应用数学问题的MATLAB 求解

高等应用数学问题的

MATLAB

求解

【例

3-6】

3.1.2.3 多元函数的Jacobi矩阵

高等应用数学问题的MATLAB 求解

高等应用数学问题的MATLAB 求解X 是自变量构成的向量,

Y 是由各个函数构成的向量。

高等应用数学问题的

MATLAB 求解【例

3-7】

试推导其Jacobi 矩阵

高等应用数学问题的

MATLAB

求解3.1.2.4 隐函数的偏导数

高等应用数学问题的MATLAB

求解

【例3-8】

用递推公式计算定积分(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数值微积分与方程数值求解

电子一班王申江 实验九数值微积分与方程数值求解 一、实验目的 1、掌握求数值导数和数值积分的方法 2、掌握代数方程数值求解的方法 3、掌握常微分方程数值求解的方法 二、实验内容 1、求函数在指定点的数值导数。 () 23 2 123,1,2,3 026 x x x f x x x x x == >>syms x >>f=[x x^2 x^3;1 2*x 3*x^2;0 2 6*x]; >>F=det(f) F=2*x^3 >>h=0.1 >>x=[0:h:4]; >>f=2*x^3; >>[dy,dx]=diff_ctr(f,h,1); >>y1=dy(dx==1) y1=6.0000 >>y2=dy(dx==2)

y2=24.0000 >>y3=dy(dx==3) y3=54.0000 2、用数值方法求定积分。 (1) 210I π =?的近似值 a=inline('sqrt(cos(t.^2)+4*sin((2*t).^2)+1)'); I=quadl(a,0,2*pi) I = 6.7992 + 3.1526i (2)()1 202ln 11x I dx x +=+? b=inline('log(1+x)./(1+x.^2)'); I=quadl(b,0,1) I = 0.2722 3、分别用3种不同的数值方法解线性方程组。 6525494133422139211 x y z u x y z u x y z u x y u +-+=-??-+-=??++-=??-+=? A=[6,5,-2,5;9,-1,4,-1;3,4,2,-2;3,-9,0,2]; b=[-4,13,1,11]'; x=A\b

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实现陈悦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数值微积分

4.1数值微积分 4.1.1近似数值极限及导数 Matlab 数值计算中,没有求极限指令,也没有求导指令,而是利用差分指令: 用一个简单矩阵表现diff和gradient指令计算方式。 差分: Dx=diff(X) 对向量: Dx=X(2:n)-X(1:n-1) 对矩阵: DX=X(2:n,:)-X(1:n-1,:) 长度小1. DIFF(X), for a vector X, is [X(2)-X(1) X(3)-X(2) ... X(n)-X(n-1)]. DIFF(X), for a matrix X, is the matrix of row differences, (结果缺少一行) [X(2:n,:) - X(1:n-1,:)]. DIFF(X,N,DIM) is the Nth difference function along dimension DIM. If N >= size(X,DIM), DIFF returns an empty array (N阶差分)

梯度: FX=gradient(F) Fx(1)=Fx(2)-Fx(1); F=[1,2,3;4,5,6;7,8,9] Dx=diff(F) (按行) Dx_2=diff(F,1,2) (按列) [FX,FY]=gradient(F) Fx(1)=Fx(2)-Fx(1), Fx(end)=F(end)-F(end-1) FX与F维数相同。 [FX_2,FY_2]=gradient(F,0.5) %采样间隔0.5 即: Fx(1)=(Fx(2)-Fx(1))/2 F = 1 2 3 4 5 6 7 8 9 Dx = 3 3 3 3 3 3 Dx_2 = 1 1 1 1 1 1 FX = 1 1 1

【数学建模学习】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=[]

实验一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数值积分与数值微分

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实现

实验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计算积分

函数的积分和椭圆的周长 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的科学计算—数值微积分1

科学计算—理论、方法 及其基于MATLAB 的实现与分析 数值微积分 §1 数值微分 对于给定的函数()x f y =,如果 1、()x f y =的函数关系式比较复杂时; 2、 ()x f y =未知,而仅仅知道()x f y =在1+n 个相异点k x , n k ,,1,0Λ=处 的函数值k y ; 则希望能用相对简单的计算方法,求得()x f y =导数的(近似)值。 基于上述考虑,选择的方法之一是利用函数()x f y =的插值多项式的导数作为函数()x f y =导数的近似值,例如Lagrange 插值多项式,由于 ()()()()∑==≈n k k k n x f x l x L x f 0 (1) 因而有 ()()x L x f n '≈' (2)

这里需要说明一点的是,尽管()x f 和()x L n 的函数值可能相差不多,但是它们的导数有可能相差很大,如下面的例子 例1: 考虑函数()2 2511x x f += 在区间[-1,1]的插值问题,取 区间[-1,1]的11个点 k x k ?+-=2.01,10,,1,0Λ=k ,作函数 ()2 2511x x f += 的10次插值多项式: ()18552.163597.1234338.3819095.4949417.220246810+-+-+-=x x x x x x L n 函数()x f 和插值多项式()x L n 的导数分别为 ()() 2 225150x x dx x df +-= ()x x x x x dx x dLn 7.334.4936.22883.39594.22093579-+-+-= 对函数()x f 和插值多项式()x L n 及其导数分别比较,结果如图所示: Derivative_Runge

数值积分算法与MATLAB实现

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

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

利用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); 四、实验结果

相关文档