求教matlab四重积分我打算用int函数做四重积分,如果是可分的比如被积函数是(1/s^2+1/t^2+n+m)一类的速度就很快,但是如果不可分就非常慢,比如我算syms s t m n;int(int(int(int((1/(s^2+1+t^2)+n+m),s,-0.15,0.15)
来源:学生作业帮助网 编辑:六六作业网 时间:2025/01/29 08:01:47
求教matlab四重积分我打算用int函数做四重积分,如果是可分的比如被积函数是(1/s^2+1/t^2+n+m)一类的速度就很快,但是如果不可分就非常慢,比如我算syms s t m n;int(int(int(int((1/(s^2+1+t^2)+n+m),s,-0.15,0.15)
求教matlab四重积分
我打算用int函数做四重积分,如果是可分的比如被积函数是(1/s^2+1/t^2+n+m)一类的速度就很快,但是如果不可分就非常慢,比如我算
syms s t m n;
int(int(int(int((1/(s^2+1+t^2)+n+m),s,-0.15,0.15),t,-0.15,0.15),n,-7,7),m,-9,9);
就用了129秒,如果四个变量都在分母上时间无法估量.不知道有没有什么更好的方法.
求教matlab四重积分我打算用int函数做四重积分,如果是可分的比如被积函数是(1/s^2+1/t^2+n+m)一类的速度就很快,但是如果不可分就非常慢,比如我算syms s t m n;int(int(int(int((1/(s^2+1+t^2)+n+m),s,-0.15,0.15)
我仿照dblquad和triplequad编了个四重积分的函数quad4:
function Q = quad4(intfcn,xmin,xmax,ymin,ymax,zmin,zmax,tmin,tmax,tol,quadf,varargin)% QUAD4 计算四重积分
if nargin < 9, error('Requires at least seven inputs'); end
if nargin < 10 | isempty(tol), tol = 1.e-6; end
if nargin < 11 | isempty(quadf), quadf = @quad; end
intfcn = fcnchk(intfcn);
trace = [];
Q = triplequad(@innerintegral, ymin, ymax, zmin, zmax, tmin, tmax, tol, trace, intfcn, ...
xmin, xmax, tol, quadf, varargin{:});
function Q = innerintegral(y, z, t, intfcn, xmin, xmax, tol, quadf, varargin)
Q = zeros(size(z));
trace = [];
for i = 1:length(y)
Q(i) = feval(quadf, intfcn, xmin, xmax, tol, trace, y(i), z, t, varargin{:});
end
使用这个函数计算1/(s^2+1+t^2)+n+m的积分比较容易:
f=inline('1./(s.^2+1+t.^2)+n+m','s','t','n','m')
quad4(f,-0.15,0.15,-0.15,0.15,-7,7,-9,9)
得到的结果是22.3468,和你使用四个int计算得到的结果相同(在6.5版上计算很快):
int(int(int(int((1/(s^2+1+t^2)+n+m),s,-0.15,0.15),t,-0.15,0.15),n,-7,7),m,-9,9)
double(ans)
但计算四个变量都在分母上的函数会遇到困难:
f=inline('1./(s.^2+1+t.^2+n+m)','s','t','n','m')
quad4(f,-0.15,0.15,-0.15,0.15,-7,7,-9,9)
限于时间精力,我没有做进一步研究,给你两个建议,供参考:
(1)确信你的这个积分有意义(积分给出的警告信息说可能因奇异点引起);
(2)必要的话可跟踪程序运行,看为什么出这样的错,再想解决办法.