数值积分与微分方程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.3 数值积分

2.3.1 一元函数的数值积分

函数1 quad 、quadl 、quad8

功能 数值定积分,自适应Simpleson 积分法。

格式 q = quad(fun,a,b) %近似地从a 到b 计算函数fun 的数值积分,误差为10-6。

若给fun 输入向量x ,应返回向量y ,即fun 是一单值函数。

q = quad(fun,a,b,tol) %用指定的绝对误差tol 代替缺省误差。tol 越大,函数计

算的次数越少,速度越快,但结果精度变小。

q = quad(fun,a,b,tol,trace,p1,p2,…) %将可选参数p1,p2,…等传递给函数

fun(x,p1,p2,…),再作数值积分。若tol=[]或trace=[],则用缺省值进行计算。

[q,n] = quad(fun,a,b,…) %同时返回函数计算的次数n

… = quadl(fun,a,b,…) %用高精度进行计算,效率可能比quad 更好。 … = quad8(fun,a,b,…) %该命令是将废弃的命令,用quadl 代替。 例2-40

>>fun = inline(‘3*x.^2./(x.^3-2*x.^2+3)’); equivalent to: function y=funn(x)

y=3*x.^2./(x.^3-2*x.^2+3);

>>Q1 = quad(fun,0,2) >>Q2 = quadl(fun,0,2)

计算结果为:

Q1 =

3.7224 Q2 =

3.7224

补充:复化simpson 积分法程序

程序名称 Simpson.m

调用格式 I=Simpson('f_name',a,b,n)

程序功能 用复化Simpson 公式求定积分值

输入变量 f_name 为用户自己编写给定函数()y f x 的M 函数而命名的程序文件名 a 为积分下限

b 为积分上限

n 为积分区间[,]a b 划分成小区间的等份数 输出变量 I 为定积分值 程序

function I=simpson(f_name,a,b,n) h=(b-a)/n; x=a+(0:n)*h; f=feval(f_name,x); N=length(f)-1;

if N==1

fprintf('Data has only one interval') return; end if N==2

I=h/3*(f(1)+4*f(2)+f(3)); return; end if N==3

I=3/8*h*(f(1)+3*f(2)+3*f(3)+f(4)); return; end I=0;

if 2*floor(N/2)==N

I=h/3*(2*f(N-2)+2*f(N-1)+4*f(N)+f(N+1)); m=N-3; else m=N; end

I=I+(h/3)*(f(1)+4*sum(f(2:2:m))+2*f(m+1)); if m>2

I=I+(h/3)*2*sum(f(3:2:m)); end

例题 求0

sin I xdx π

=

解 先编制sin y x =的M 函数。程序文件命名为sin_x.m 。

function y=sin_x(x) y=sin(x)

将区间4等份,调用格式为

I=Simpson (’sin _x’,0,pi,4)

计算结果为

y =

0 0.7071 1.0000 0.7071 0.0000

I =

2.0046

将区间20等份,调用格式为

I=Simpson (’sin _x’,0,pi,20)

计算结果为

y =

0 0.1564 0.3090 0.4540 0.5878 0.7071 0.8090

0.8910 0.9511 0.9877 1.0000 0.9877 0.9511 0.8910 0.8090 0.7071 0.5878 0.4540 0.3090 0.1564 0.0000

I =

2.0000

重做上例2—40:simpson('funn',0,2,100)

函数2 trapz

功能 梯形法数值积分

格式 T = trapz(Y) %用等距梯形法近似计算Y 的积分。若Y 是一向量,则trapz(Y)

为Y 的积分;若Y 是一矩阵,则trapz(Y)为Y 的每一列的积分;若Y 是一多维阵列,则trapz(Y)沿着Y 的第一个非单元集的方向进行计算。

T = trapz(X,Y) %用梯形法计算Y 在X 点上的积分。若X 为一列向量,Y 为

矩阵,且size(Y,1) = length(X),则trapz(X,Y)通过Y 的第一个非单元集方向进行计算。

T = trapz(…,dim) %沿着dim 指定的方向对Y 进行积分。若参量中包含X ,则

应有length(X)=size(Y ,dim)。

例2-41

>>X = -1:.1:1;

>>Y = 1./(1+25*X.^2); >>T = trapz(X,Y)

计算结果为:

T =

0.5492

补充: 复化梯形积分法程序

程序名称 Trapezd.m

调用格式 I=Trapezd('f_name',a,b,n) 程序功能 用复化梯形公式求定积分值

输入变量 f_name 为用户自己编写给定函数()y f x 的M 函数而命名的程序文件名 a 为积分下限

b 为积分上限

n 为积分区间[,]a b 划分成小区间的等份数 输出变量 I 为定积分值 程序

function I=Trapezd(f_name,a,b,n) h=(b-a)/n;

相关文档
最新文档