matlab int函数没有显式积分 vpa
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/18 18:54:14
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是通过什么算法得到数值解的?那么,这个结果什么时候是正确的?
两个例子:
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稍小,但不至于差太多.
再问: 我又去试了试,现在的提示是 Error using mupadmex Error in MuPAD command: Recursive definition. [See ?MAXDEPTH] Evaluating: hastype Error in sym/int (line 124) rSym = mupadmex('symobj::intdef',f.s,x.s,a.s,b.s,options); 不过当时确实是算出3.4441的。。。我也不清楚为什么。。。 我也知道dblquad的数值结果没问题,只是好奇vpa到底是什么原理。。。
我用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稍小,但不至于差太多.
再问: 我又去试了试,现在的提示是 Error using mupadmex Error in MuPAD command: Recursive definition. [See ?MAXDEPTH] Evaluating: hastype Error in sym/int (line 124) rSym = mupadmex('symobj::intdef',f.s,x.s,a.s,b.s,options); 不过当时确实是算出3.4441的。。。我也不清楚为什么。。。 我也知道dblquad的数值结果没问题,只是好奇vpa到底是什么原理。。。