matlab的积分函数

1.trapz函数

MATLAB中的trapz()函数是基于复化梯形公式设计编写的,其一般调用格式为:
I=trpaz(x,y,dim)
其中x,y是观测数据,x可以为行向量或列向量,y可以为向量或矩阵,y的行数应等于x向量的元素个数;dim表示按维进行求积,若dim=1(缺省值),则按行求积,若dim=2,则按列求积。

如:计算函数y=x^3-2x-3,为了计算在[0,1]上的积分

x=0:0.05:1;
y=x.^3-2.*x-3;
trapz(x,y)
ans =
   -3.7494

2.cumtrapz函数

如上一个积分所示,trapz其实就是trapezoidal(梯形的简写),cumtrapz函数和trapz函数使用方法类似,但是返回的结果不一样。前面的cum是cumulation的意思,也就是累积,相当于是不断地从第一个值累积到当前的结果。

输入

x=0:0.05:1;
y=x.^3-2.*x-3;
cumtrapz(x,y)

ans =


  Columns 1 through 7


         0   -0.1525   -0.3100   -0.4724   -0.6396   -0.8115   -0.9879


  Columns 8 through 14


   -1.1687   -1.3535   -1.5421   -1.7342   -1.9294   -2.1274   -2.3276


  Columns 15 through 21


   -2.5297   -2.7330   -2.9372   -3.1415   -3.3455   -3.5483   -3.7494

3.quad函数

MATLAB提供的quad()函数是基于自适应辛普森法设计的,该函数的调用格式为:
[q,fcnt] = quad(fun,a,b,tol,trace,p1,p2,...)
其中fun是被积函数,可以是字符表达式、内联函数、匿名函数和M函数;a,b是定积分的上限和下限;tol为指定的误差限,缺省值为;trace提供中间输出[fcnt a b-a q],若trace=[],则quad不提供中间输出;p1,p2,...是函数fun的附加参数。q是返回的数值积分;fcnt返回函数评估的次数。
另外,MATLAB还提供了一个新的函数quadl()。其调用格式与quad()函数完全一致,使用的算法是自适应Lobatto算法,其精度和速度均远高于quad()函数,所以在追求高精度数值解时建议使用该函数。 

如:

To compute the integral

201x32x5dx,

write a function myfun that computes the integrand:

function y = myfun(x) 
y = 1./(x.^3-2*x-5);

Then pass @myfun, a function handle to myfun, to quad, along with the limits of integration, 0 to2:

Q = quad(@myfun,0,2)

Q =

   -0.4605
function y = myfun(x) 
y = 1./(x.^3-2*x-5);
end
在命令行中输入Q=quad(@myfun,0,2),输出

Q =
   -0.4605

4.quadgk函数

quadgk()函数是MATLAB R2007b版本提供的基于Gauss-Kronrod算法实现的数值积分函数,该函数可以用来求解振荡函数的积分、广义积分甚至是复数积分,其一般调用格式为:
[q,errbnd] = quadgk(fun,a,b,param1,val1,param2,val2,...)
其中fun是被积函数,可以是字符表达式、内联函数、匿名函数和M函数;a,b是积分的上限和下限,它们可以为-inf和inf;parami,vali是指相关属性名及其属性值,具体的值见书本。

5.dblquad()函数

MATLAB提供的dblquad()函数是用来求解长方形区域的双重积分的。其一般调用格式为:
q = dblquad(fun,xmin,xmax,ymin,ymax,tol,@quadl,p1,p2,...) 
其中,输入参数@quadl为具体求解一元积分的数值函数,也可以选择@quad甚至用户自己编写的数值积分求解函数,但要求其调用格式与quadl()函数完全一致,其余参数大致同函数quadl()。
对于一般区域的二重积分,MATLAB提供了quad2d() 函数来求取。该函数的一般调用格式为:
q = quad2d(fun,a,b,c,d,param1,val1,param2,val2,...) 

6.现在在新的matlab版本一般用integral,精确度也比较高,可以doc intergral来查看,下面给一个例子:

function f =g(x)
e1 = 0.01;e2 = 0.02;
y_2diff = (-1.*(x+2019.3)/(3189.94^2-((x+2019.38).^2).^(1/2))+1).^(1/2);
f = y_2diff/10/7*(10*(1-e2)*(450-(3189.94^2-((x+2019.38).^2)).^(1/2)+2019.38)-e1*y_2diff*x);
end 
命令行中输入
integral(@g,0,450,'ArrayValued',true)

输出

ans= 1.3214e+04。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没想好叫什么名字

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值