回 帖 发 新 帖 刷新版面

主题:[原创]Matlab求解积分问题探讨

论坛上常看到有人问及积分方面问题,类型相似,特总结如下方法希望对各位学习有所帮助.有错误之处还望各位不吝提出.

一.相关函数:
%符号积分
int(f,v)
int(f,v,a,b)
%数值积分
trapz(x,y) %梯形法沿列方向求函数Y关于自变量X的积分
cumtrapz(x,y) %梯形法沿列方向求函数Y关于自变量X的累计积分
quad(fun,a,b,tol) %采用递推自适应Simpson法计算积分
quad1(fun,a,b,tol) %采用递推自适应Lobatto法求数值积分 
dbquad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol) %二重(闭型)数值积分指令
triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol) %三重(闭型)数值积分指令

二.示例:
例1:计算f(t)=exp(-t^2)在[0,1]上的定积分
本例演示:计算定积分常用方法
>> syms x
int(exp(-x^2),0,1)
 
ans =
 
1/2*erf(1)*pi^(1/2)   %erf为误差函数
>> vpa(int(exp(-x^2),0,1))
 
ans =
 
.7468241328124270
>> d=0.001;x=0:d:1;d*trapz(exp(-x.^2))

ans =

    0.7468

>> quad('exp(-x.^2)',0,1,1e-8)

ans =

    0.7468

例2:计算f(t)=1/log(t)在[0,x],0<x<1上的积分
注意:被积函数于x=0无义,在x-->1^-处为负无穷
本例演示:用特殊函数表示的积分结果,如何用mfun指令
(1)
syms t x
ft=1/log(t);
sx=int(ft,t,0,x)  
sx =
-Ei(1,-log(x))  %完全椭圆函数

(2)
x=0.5:0.1:0.9
sx_n=-mfun('Ei',1,-log(x))              
x =
    0.5000    0.6000    0.7000    0.8000    0.9000
sx_n =
   -0.3787   -0.5469   -0.7809   -1.1340   -1.7758  
(3)%图示被函数和积分函数
clf
ezplot('1/log(t)',[0.1,0.9])            
grid on
hold on
plot(x,sx_n,'LineWidth',3)                
Char1='1/ln(t)';
Char2='{\int_0^x} 1/ln(t) dt';        
title([Char1,'   and    ',Char2])    
legend(Char1,Char2,'Location','SouthWest')  

例3:计算f(t)=exp(-sin(t))在[0,4]上的定积分
注意:本题被函数之原函数无"封闭解析表达式",符号计算无法解题!
本例演示:符号计算有限性
(1)符号计算解法
syms t x
ft=exp(-sin(t))
sx=int(ft,t,0,4)  
ft =exp(-sin(t))

Warning: Explicit integral could not be found.

> In sym.int at 58
sx =
int(exp(-sin(t)),t = 0 .. 4)  

(2)数值计算解法
dt=0.05;                    %采样间隔            
t=0:dt:4;                       %数值计算适合于有限区间上,取有限个采样点               
Ft=exp(-sin(t));        
Sx=dt*cumtrapz(Ft);            %计算区间内曲线下图形面积,为小矩形面积累加得
Sx(end)                %所求定积分值
                                %图示
plot(t,Ft,'*r','MarkerSize',4)
hold on
plot(t,Sx,'.k','MarkerSize',15)
hold off
xlabel('x')
legend('Ft','Sx') 

>>ans =
 3.0632

例4:绘制积分图形,y=2/3*exp(-t/2)*cos(sqrt(3)/2*t);积分s(x)=int(y,t,0,x)于[0,4*pi]上
syms t tao
y=2/3*exp(-t/2)*cos(sqrt(3)/2*t);    
s=subs(int(y,t,0,tao),tao,t);     %获得积分函数            
subplot(2,1,1)                            
                                            %
ezplot(y,[0,4*pi]),ylim([-0.2,0.7])  %单变量符号函数可视化,多变量用ezsurf
grid on                                    
subplot(2,1,2)                            
ezplot(s,[0,4*pi])
grid on
title('s = \inty(t)dt')                    

-------------------- * End * Edited by Guassfans 2007.09.14------------------

回复列表 (共34个回复)

21 楼


是用梯形面积的和在求积分吧。

22 楼


  我遇到一个和1楼类似的问题,正在解当中。如果那位曾经做过类似的可否介绍一个下过程,或者指点一下方向。
  下面是积分式子:
S=(-1./x).*exp((-1.*((Q./x)-1).^2)./(2.*y^2)).*(1./(sqrt(2*pi).*y))
  其中Q,y是符号。对x积分,x服从正态分布。积分限为(0,inf)
 谢谢。

23 楼

还有一般区域的双重积分quad2dggen

24 楼


 通过计算 应该是无穷大
 而且用公式法可以得到 结果也是无穷大
 不知道是否正确 我也是新手

25 楼

我也遇到了积分的问题,各位仁兄能否帮忙看一下
积分函数为:exp(-j*k0*sqrt(5^2+(x-3)^2))/sin(k0*sqrt(5^2+(x-3)^2))积分上限下限分别为2和3
积分中含有矩阵的又改如何定义呢?非常感谢

26 楼

最近写论文写不出来,程序老出错,不知哪位高手有对数周期天线的程序,帮帮忙,回帖或发到我的信箱wylansezszs@163.com,非常感谢!

27 楼

学习学习

28 楼


[em2]谢谢提供!
对于我初学者还不错啊,呵呵!

29 楼

25楼
我用数值计算自己做的积分程序给你算了下结果如下6172615360306147/72057594037927936*Re(exp(-1/9007199254740992*i*k0*2103984370106651101508978835448169^(1/2))/sin(1/9007199254740992*k0*2103984370106651101508978835448169^(1/2)))+i*(-6172615360306147/144115188075855872*i*(exp(-1/9007199254740992*i*k0*2103984370106651101508978835448169^(1/2))-conj(exp(-1/9007199254740992*i*k0*2103984370106651101508978835448169^(1/2))/sin(1/9007199254740992*k0*2103984370106651101508978835448169^(1/2)))*sin(1/9007199254740992*k0*2103984370106651101508978835448169^(1/2)))/sin(1/9007199254740992*k0*2103984370106651101508978835448169^(1/2)))
算法高斯勒让德,其中i是虚数单位,k0是按复数变量处理的,导致结果复杂。此结果又9阶精度,你可以找具体的k0值试下正确不。我也是新手刚接触matlab一个多月,以前都是C

30 楼

分数阶积分,楼主能否给大家介绍一下。

我来回复

您尚未登录,请登录后再回复。点此登录或注册