永发信息网

求教matlab四重积分

答案:3  悬赏:0  手机版
解决时间 2021-03-15 02:55
  • 提问者网友:萌卜娃娃
  • 2021-03-14 15:08
我打算用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秒,如果四个变量都在分母上时间无法估量。不知道有没有什么更好的方法。
最佳答案
  • 五星知识达人网友:山有枢
  • 2021-03-14 15:43
我仿照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)必要的话可跟踪程序运行,看为什么出这样的错,再想解决办法。
全部回答
  • 1楼网友:过活
  • 2021-03-14 18:28
可以考虑数值积分。quad,dblquad,triplequad,数值积分肯定要比先求出原函数要快很多,不过据我所知matlab中有1重、二重、三重数值积分,没见过四重数值积分的。只希望能给你提供一个思路
  • 2楼网友:千夜
  • 2021-03-14 17:02
先说你的积分类型,是不是把积分顺序搞错了!, 按照你的积分类型最后积分出来的是一个关于x2,x3的函数,而不是一个数值! 这你让计算机如何算。。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯