问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MATLAB求定积分时,int()和integral()的区别在哪?

发布网友 发布时间:2022-04-22 01:39

我来回答

1个回答

热心网友 时间:2023-09-21 10:28

一、符号积分符号积分由函数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
>>Isim=quad(fun,0,1) %辛普生法Isim = 0.746824180726425 IL=quadl(fun,0,1) %牛顿-柯特斯法IL = 0.746824133988447 三、梯形法求向量积分trapz(x,y)—梯形法沿列方向求函数Y关于自变量X的积分(向量形式,数值方法)。>>d=0.001; >>x=0:d:1; >>S=d*trapz(exp(-x.^2)) S= 0.7468 或:>>format long g >>x=0:0.001:1; %x向量,也可以是不等间距>>y=exp(-x.^2); %y向量,也可以不是由已知函数生成的向量>>S=trapz(x,y); %求向量积分S = 0.746824071499185 int的积分可以是定积分,也可以是不定积分(即有没有积分上下限都可以积)可以得到解析的解,比如你对x^2积分,得到的结果是1/3*x^3,这是通过解析的方法来解的。如果int(x^2,x,1,2)得到的结果是7/3 quad是数值积分,它只能是定积分(就是有积分上下限的积分),它是通过simpson数值积分来求得的(并不是通过解析的方法得到解析解,再将上下限代入,而是用小梯形的面积求和得到的)。如果f=inline('x.^2');quad(f,1,2)得到的结果是2.333333,这个数并不是7/3 int是符号解,无任何误差,唯一问题是计算速度;quad是数值解,有计算精度*,优点是总是能有一定的速度,即总能在一定时间内给出一个一定精度的解。[FROM: 58.192.116.*] 对于y=exp(-(x.^2+x+1)/(1+x)),被积函数之原函数无"封闭解析表达式",符号计算无法解题,这是符号计算有限性,结果如下:>> syms x >>y=exp(-(x.^2+x+1)/(1+x)) >>s=int(y,x,0,inf) y = exp((-x^2-x-1)/(1+x))
Warning: Explicit integral could not be found. >> In sym.int at 58 s = int(exp((-x^2-x-1)/(1+x)),x = 0 .. Inf) 只有通过数值计算解法>> dx=0.05; %采样间隔>>x=0:dx:1000; %数值计算适合于有限区间上,取有限个采样点,只要终值足够大,精度不受影响>>y=exp(-(x.^2+x+1)./(1+x)); >>S=dx*cumtrapz(y); %计算区间内曲线下图形面积,为小矩形面积累加得>>S(end) ans = 0.5641 %所求定积分值或进行编程,积分上限人工输入,程序如下:%表达式保存为函数文件function y=fxy(x) y=exp(-(x.^2+x+1)./(1+x)); % save fxy.m % main --------主程序clear,clc h=.001;p=0;a=0; R=input('请输入积分上限,R=') while a<R p=p+(fxy(a)+fxy(a+h))*h/2; a=a+h; end p=vpa(p,10) 运行主程序后得到结果:请输入积分上限,R=1000 R = 1000 p = .5641346055 其它结果如下:0-1: int=.3067601686 0-2: int=.4599633159 0-5: int=.5583068217 0-10: int=.5640928975 0-100: int=.5641346055 0-1000: int=.5641346055 [FROM: 211.65.33.*]
在积分函数中, sqrt(e1*e2*e3)*cos(n1*pi*x/12).*cos(n2*pi*y/11).*cos(n3*pi*z/9);已知变量e1,e2,e3,n1,n2,n3通过函数参数输入,如果直接用inline或字符串的形式,则表达式中的未知数有9个,分别是e1,e2,e3,n1,n2,n3,x,y,z。而用匿名函数时,已知变量e1,e2,e3,n1,n2,n3就会以常数看待,未知数就只有x,y,z了,可以求三重积分了。完整函数程序:function Fn(n1,n2,n3) if n1==0 e1=1; else if n1>0 e1=2; end end if n2==0 e2=1; else if n2>0 e2=2; end end if n3==0 e3=1; else if n3>0 e3=2; end end F=@(x,y,z)sqrt(e1*e2*e3)*cos(n1*pi*x/12).*cos(n2*pi*y/11).*cos(n3*pi*z/9); S=triplequad(F,-6,6,-5.5,5.5,-4.5,4.5) %求三重数值积分将以上代码保存为Fn.m程序文件,即m文件,然后运行:>> Fn(1,1,1) S = 866.9655 [FROM: 211.65.33.*] 三重积分请用三重积分函数triplequad,与三个积分上下限对应,即x=triplequad(F,-6,6,-5.5,5.5,-4.5,4.5)
其中被积函数F用"匿名函数"来表达,即F=@(x,y,z)sqrt(e1*e2*e3)*cos(n1*pi*x/12).*cos(n2*pi*y/11).*cos(n3*pi*z/9); 如果直接用inline或字符串的形式,则表达式中的未知数有9个,分别是e1,e2,e3,n1,n2,n3,x,y,z。而用匿名函数时,已知变量e1,e2,e3,n1,n2,n3就会以常数看待,未知数就只有x,y,z了。完整函数程序:function Fn(n1,n2,n3) if n1==0 e1=1; else if n1>0 e1=2; end end if n2==0 e2=1; else if n2>0 e2=2; end end if n3==0 e3=1; else if n3>0 e3=2; end end F=@(x,y,z)sqrt(e1*e2*e3)*cos(n1*pi*x/12).*cos(n2*pi*y/11).*cos(n3*pi*z/9); x=triplequad(F,-6,6,-5.5,5.5,-4.5,4.5) >> Fn(1,1,1) x = 866.9655 [FROM: 58.192.116.*]
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? matlab中syms和int 函数都是表示啥意思呀?? clear,eval,title,diff,int,plot分别在matlab中有... win10系统怎么建立连接 Matlab中怎么使用 int 函数啊?这样用对吗?int(n/... Win10系统怎么新建网络 matlab int函数用法 win10系统网络怎么设置为专用网络 matlab中syms和int 函数都是表示啥意思呀? 什么是?Win10专业版下连接不上怎么办 matlab中syms和int 函数都是表示什么意思呀? matlab中int函数怎么运用? win10怎么设置创建虚拟专用拨号 win10系统怎么设置专用网络 matlab中int函数怎样用 win10自带的有什么用处? Matlab中Int函数的使用 Win10怎么创建虚拟专用网络连接 竹子长霉斑怎么处理活? 竹子流水器长霉怎么处理? 竹制品可以怎么样防止发霉 win10系统添加连接服务器名称或地址填什么 matlabint函数是什么意思 无法上网,Win10系统宽带连接错误633怎么解决 matlab int 函数 matlab中ployint的用法 win10微软商店无法联网 matlab中ints是什么 Win10系统怎么新建网络 MATLAB中 intvar(5,10)是什么意思? Win10系统怎么新建网络 为什么matlab用int积分时结果还含有int? win10的添加中连接名称怎么填? MATLAB中int32(L*1000)是什么意思 matlab中x=int8(50)什么意思 matlab 为何用int函数积分后结果还是用int表示呢 matlab为什么输入的是int,输出的还是int 黄芪和山楂能天天喝吗 黄芪和山楂能一起泡水喝吗 黄芪山楂枸杞泡水喝的功效与副作用是什么? 黄芪山楂泡水喝可以吗