早教吧 育儿知识 作业答案 考试题库 百科 知识分享

matlab int函数没有显式积分 vpa两个例子:1.y=x*log(x^4)*asin(1/x^2);int(y,x,1,3);提示没有解析解vpa(ans)得到数值结果,和quad函数的结果比较也是一样的.2.syms x yvpa(int( int( sqrt(1+x^2*sin(y)),x,0,1),y,0,2*pi)

题目详情
matlab int函数没有显式积分 vpa
两个例子:
1.y=x*log(x^4)*asin(1/x^2);
int(y,x,1,3);
提示没有解析解
vpa(ans)
得到数值结果,和quad函数的结果比较也是一样的.
2.
syms x y
vpa(int( int( sqrt(1+x^2*sin(y)),x,0,1),y,0,2*pi))
也提示没有显示解,得到数值结果
ans=3.4441;
但如果用dblquad函数求数值:
ans=6.1879;
这是什么原因呢?
我想知道,在没有解析解时,vpa是通过什么算法得到数值解的?那么,这个结果什么时候是正确的?
▼优质解答
答案和解析
楼主是用什么版本求出第2题的解是3.4441?

我用6.5、R2007b两个版本,等了好久都没有得到结果(R2007b算了好半天之后甚至干脆崩溃了),用R2012b计算,得到下面的结果:
intlib::intOverSet(piecewise([not 0 < sin(y) and (y/pi in Z_ or arg(sin(y)) == pi), int((sin(y)*x^2 + 1)^(1/2), x == 0..1)]), y, {0} union Dom::Interval([pi], [2*pi])) + 3.4441419676288028273509895776497

显然这个结果并不是3.4441,而是另外加上前面一大串的积分表达式.

6.5、R2007b符号计算内核是用Maple,R2012b符号计算内核是用MuPad,但不论用哪个内核,其内部的计算细节基本上是不可能知道的.

到目前为止,我使用vpa,在能得到具体结果时都是正确的,但有可能就像上面这样,得不到具体的数值,而是一个表达式.

用dblquad函数计算的结果是可信的,其实你用
ezmesh('sqrt(1+x^2*sin(y))',[0,1],[0,2*pi])
画出曲面来,可以看到,曲面的大部分高度值都接近1,其它突出的部分比起凹陷的部分应该稍微小一点,所以算出来的体积(该重积分的几何意义)应该比2*pi稍小,但不至于差太多.