24小时热门版块排行榜    

查看: 2618  |  回复: 1

tang3117022

金虫 (小有名气)

[求助] Matlab多重积分数值计算 已有1人参与

求助:

我想用matlab计算一个多重积分(目前是8重积分),用数值方式求解。

我想到一个思路,把一个8维的矩形空间区域均匀划分一下,分成许多个8维小区域,再计算求和。

但是不知道matlab有没有函数能快速划分多维区域。

另外,大家还有没有更好的思路?

谢谢!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wwhblue

铜虫 (初入文坛)

【答案】应助回帖

给你三重辛普森复化积分算法,8重积分依次自己补充吧

% 复化辛普森公式3D
function s = simpson3D(fname,a,b,h1,c,d,h2,e,f,h3)
fe = simpson2D(fname,a,b,h1,c,d,h2,e);
ff = simpson2D(fname,a,b,h1,c,d,h2,f);
s = fe - ff;
x = e;
n = ceil((f-e)/h3);
for k=1:n
    x= x + h3/2;  s = s + 4* simpson2D(fname,a,b,h1,c,d,h2,x);
    x= x + h3/2;  s = s + 2* simpson2D(fname,a,b,h1,c,d,h2,x);
end
s = s * h3 / 6;
return;


% 复化辛普森公式2D
function s = simpson2D(fname,a,b,h1,c,d,h2,zi)
fc = simpson1D(fname,a,b,h1,c,zi);
fd = simpson1D(fname,a,b,h1,d,zi);
s = fc - fd;
x = c;
n = ceil((d-c)/h2);
for k = 1:n
    x= x + h2/2;    s = s + 4* simpson1D(fname,a,b,h1,x,zi);
    x= x + h2/2;    s = s + 2* simpson1D(fname,a,b,h1,x,zi);
end
s = s * h2 / 6;
return;


% 复化辛普森公式1D
function s = simpson1D(fname,a,b,h1,yi,zi)
%fname为被积函数,a,b分别为下界和上界,h1步长
fa = feval(fname,a,yi,zi);
fb = feval(fname,b,yi,zi);
s = fa - fb;
x = a;
n = ceil((b-a)/h1);
for k = 1: n
    x= x + h1/2;    s = s + 4* feval(fname,x,yi,zi);
    x= x + h1/2;    s = s + 2* feval(fname,x,yi,zi);
end
s = s * h1 / 6;
return;
2楼2021-07-13 11:42:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 tang3117022 的主题更新
信息提示
请填处理意见