matlab计算积分积分有问题

matlab simulink中积分器的积分区间下限t0是怎么设定的?做了个实验,发现我对积分器的认识有问题。。。如图,被积函数是e^(-t),对积分器做了点设置,限制了输出上限为1,并设置了溢出提_百度作业帮
matlab simulink中积分器的积分区间下限t0是怎么设定的?做了个实验,发现我对积分器的认识有问题。。。如图,被积函数是e^(-t),对积分器做了点设置,限制了输出上限为1,并设置了溢出提
matlab simulink中积分器的积分区间下限t0是怎么设定的?做了个实验,发现我对积分器的认识有问题。。。如图,被积函数是e^(-t),对积分器做了点设置,限制了输出上限为1,并设置了溢出提示,这个提示接到示波器上。当输出值大于设定值时,示波器会输出1。按理说被积分后该是1-e^(-t),不能大于1,示波器该是一直为0。但结果就像图里的一样,大于1了。看了help,说积分器的积分区间是t0到t,并不是想象的从0到t。想问一下这t0是指什么,怎么设定?
楼上的回答有点想当然了(说的比较直接,抱歉)。这个问题是由浮点数的表示精度引起的。尽管理论上积分结果不会大于1,但会很接近1,由于浮点数的表示精度所限,在t较大时,就会等于1,而只要等于积分器的饱和值,Saturation&port就会输出1。积分器的积分区间t0的问题:是指模型仿真参数设置中,开始时间你设的不是0。&附加讨论:关于何时Saturation&port会输出1:照理说,应该是exp(t)&=eps,这样算出来t大约为36秒,但从仿真结果看,在十几秒的时候就饱和了。我的理解,这可能受到仿真参数中误差限制的影响——默认绝对误差为1e-6,这样求出来-log(1e-6)大约是13.8秒。当然,结果还会受到相对误差的影响,更深入的分析您感兴趣的话可以继续,我只给提供一点思路,抛砖引玉。
字数不够。。&追问1-----------------------------------谢谢帮助& &其实它不是等于1,而是大于1。如果用1减去那个积分再在示波器中显示,会发现t大于一定值时输出了负数。最核心的问题就怎么才能得出正确的数学上的答案。。如果t0是指开始的时间,那应该是0。源的开始时间没改动。&如此看来,问题就出在积分器的算法上了。。。
试了一下,你说的结果大于1的情况确实会出现。这是数值计算不能避免的事,可以使用我上面所说的误差控制将其控制在很小的范围(例如10^-14量级)。如果关注的不是可以将误差控制到多么小,而是在意误差的极性,那就只能建议你采用更好的表达方式了——例如,对于现在研究的这个问题,你既然知道积分得到的结果是1-e^(-t),那么不妨直接用fcn模块实现这个表达式。前面所说的开始时间t0,不是指Ramp模块的,而是整个模型的仿真时间中的Start&time。尽管这个t0对解决你的问题没有什么作用,但既然你的提问是关于t0的,那就有必要再说明一下。
。。。怎么发评论上了。
非常不好意思还得再追问个。。为了说明积分器有问题才用了e^(-t),但真正要用的函数就没指数函数这么简单了。换一个复杂函数,我就没法区分真实数据和误差了。。原本以为问题出在t0上,所以才这么问的。真正关心的怎样才能正确算出积分式子,至少极性要对啊,大于1和小于1差太多了。
数值计算只能在一定范围内保证你的计算精度,而在精度范围内,误差是不分极性的。
对于绝大多数场合,大于1还是小于1没那么重要(在满足精度的条件下),如果你遇到的问题对这个非常敏感,那就根据具体问题再想办法吧。
你想的有问题,e^(-t)是一个大于1的函数,那么积分时间越长,积分值将越大。大于1是肯定的。这个积分不是数学上的积分。matlab作业 重积分_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
matlab作业 重积分
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩14页未读,继续阅读
你可能喜欢查看: 2121|回复: 11|关注: 0
MATLAB双重积分求解,上下限为变量
本帖最后由 棒棒沙漏 于
21:59 编辑
求教,各位大神能不能帮我求解下面的方程? 求解文字下面的复杂公式, 顺便把求解过程也给一下,此方程是关于x,z的函数,其余三个参数可以当做常数来看。谢谢大家了。<font color="#ff前面有一个“=”,图中漏掉了。
无标题.png (1.85 MB, 下载次数: 0)
23:13 上传
关注者: 148
用数值积分先写成关于求解变量的函数形式,然后用 fsolve 数值求解
这么长的式子,你至少先自己动手写写,有问题了,别人也好在其基础上帮你修改。不要指望别人完全帮你做
我在matlab里面写了的,把公式贴上来是觉得这是最原始的,看得比较清楚。。。我在matlab里面是把公式分成几部分求解的,其中一部分求解结果如下:&&
fh=inline('6.25*(1-z/13.75).^0.5','z');
fl=inline('-6.25*(1-z/13.75).^0.5','z');
f=inline('3.879*0.39.*z./((13.75-z).^1.5).*(((1-4*(3.708.*x./12.5./(13.75-z).^0.5).^2).*exp(-2.*(3.708.*x./12.5./(13.75-z).^0.5).^2)-exp(-2.5^2/2)).^2+(x./(13.75-z).*(0.75.*((-1.333.*(3.708.*x./12.5./(13.75-z).^0.5).^2).*exp(-2.*(3.708.*x./12.5./(13.75-z).^0.5).^2)-exp(-2.5^2/2))+55*(13.75-z)./156.25.*exp(-2.*(3.708.*x./12.5./(13.75-z).^0.5).^2)))).*0.5','x','z');
z=quad2dggen(f,fl,fh,0,13.75,eps),
Integral did not converge--singularity likely
&&164.3753
关于Integral did not converge--singularity likely这句英文,我不知道求出来的结果是不是能用??我想问一下这个结果能用吗??谢谢
关注者: 7
我在matlab里面写了的,把公式贴上来是觉得这是最原始的,看得比较清楚。。。我在matlab里面是把公式分成几 ...
1. 提示信息表明,积分是发散的。如果在数值求解中遇到这种情况,基本上表明这个积分是不能求的。
2. 可以试试用integral2做积分看看。较新版本的matlab里支持这个函数。
3. 我看了一下原始表达式,似乎是有好几个积分的积与和组成的,建议分别来求。从最简单的开始。
本帖最后由 棒棒沙漏 于
10:06 编辑
1. 提示信息表明,积分是发散的。如果在数值求解中遇到这种情况,基本上表明这个积分是不能求的。
我没有找到关于integral2函数的用法,请问,能不能发给我一个关于此函数的用法的?一个完整的例子?谢谢
关注者: 7
我没有找到关于integral2函数的用法,请问,能不能发给我一个关于此函数的用法的?一个完整的例子?谢谢 ...
那就是lz的matlab版本不够新,需要更新了。
我的2013b版本截图:
无标题.png (89.26 KB, 下载次数: 0)
10:32 上传
那就是lz的matlab版本不够新,需要更新了。
我的2013b版本截图:
我用了函数integral2,得到如下:
fun=@(z,x) 3.879*0.39.*z./((13.75-z).^1.5).*(((1-4*(3.708.*x./12.5./(13.75-z).^0.5).^2).*exp(-2.*(3.708.*x./12.5./(13.75-z).^0.5).^2)-exp(-2.5^2/2)).^2+(x./(13.75-z).*(0.75.*((-1.333.*(3.708.*x./12.5./(13.75-z).^0.5).^2).*exp(-2.*(3.708.*x./12.5./(13.75-z).^0.5).^2)-exp(-2.5^2/2))+55*(13.75-z)./156.25.*exp(-2.*(3.708.*x./12.5./(13.75-z).^0.5).^2)))).*0.5;
&&&&xmin=@(z) -6.25*(1-z/13.75).^0.5;
xmax=@(z) 6.25*(1-z/13.75).^0.5;
&& Q=integral2(fun,0,13.75,xmin,xmax)
Warning: Reached the maximum number of function evaluations (10000). The result fails the global error
& In funfun\private\integral2Calc&integral2t at 130
&&In funfun\private\integral2Calc at 10
&&In integral2 at 107
& &2.2656e+05
不明白方程怎么求不出来???麻烦你帮忙看看可以么??谢谢
关注者: 7
我用了函数integral2,得到如下:
fun=@(z,x) 3.879*0.39.*z./((13.75-z).^1.5).*(((1-4*(3.708.*x./12 ...
1. 可能lz写的方程有误。请lz仔细检查。
2. 试试把.^0.5都改成sqrt函数。
1. 可能lz写的方程有误。请lz仔细检查。
2. 试试把.^0.5都改成sqrt函数。
把.^0.5改成sqrt函数后运行了一下,没有什么用,得到的结果和没改之前是一样的,如下:
fun=@(z,x) 3.879*0.39.*z./((13.75-z).^1.5).*(((1-4*(3.708.*x./12.5./sqrt(13.75-z)).^2).*exp(-2.*(3.708.*x./12.5./sqrt(13.75-z)).^2)-exp(-2.5^2/2)).^2+(x./(13.75-z).*(0.75.*((-1.333.*(3.708.*x./12.5./sqrt(13.75-z)).^2).*exp(-2.*(3.708.*x./12.5./sqrt(13.75-z)).^2)-exp(-2.5^2/2))+55*(13.75-z)./156.25.*exp(-2.*(3.708.*x./12.5./sqrt(13.75-z)).^2)))).*0.5;
xmax=@(z) 6.25*sqrt(1-z/13.75);
Q=integral2(fun,0,13.75,0,xmax)
Warning: Reached the maximum number of function evaluations (10000). The result fails the global error
& In funfun\private\integral2Calc&integral2t at 130
&&In funfun\private\integral2Calc at 10
&&In integral2 at 107
&&-1.5354e+05
至于方程是不是写错,我用函数quad2dggen运行过,结果是不收敛,所以我不知道是哪的问题?会不会是编的步骤不对?
站长推荐 /1
Powered by其他回答(1)
请原谅我不懂。
园豆:2020
&&&您需要以后才能回答,未注册用户请先。用Matlab计算积分函数方法!
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
Matlab积分
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 matlab求定积分 的文章

 

随机推荐