最近遇到一个棘手的问题,面对这个三重的如何进行数值积分编程?
之前只进行过一重的数值积分代码如下
clear
clc
n=20;
d=0.1;
x=-0.2:0.0001:0.2;
N=length(x);
sum=0;
%trapz方法
for i=0:n
for ii=1:N
y=x(ii);
f(ii)=0.9.*(%函数)
end
S=trapz(x,f);
sum=sum+S;
end
sum
最近遇到一个棘手的问题,面对这个三重的如何进行数值积分编程?
之前只进行过一重的数值积分代码如下
clear
clc
n=20;
d=0.1;
x=-0.2:0.0001:0.2;
N=length(x);
sum=0;
%trapz方法
for i=0:n
for ii=1:N
y=x(ii);
f(ii)=0.9.*(%函数)
end
S=trapz(x,f);
sum=sum+S;
end
sum
这个最好用integral3函数
% 定义被积函数,注意用的是对应位置相乘的结果所以乘法、幂次和除法要加.号
F = @(u,w,v,i,d,n) 0.9*(d+0.15*i/n-w)./((v-u).^2+(d+0.15*i/n-w).^2).^(3/2)...
- 0.9*(d+0.15*i/n-w)./(0.025*0.025 + (v-u).^2 + (d+0.15*i/n-w).^2).^(3/2);
u1 = -0.022; u2 = 0.022; % 积分区间
w1 = -0.1; w2 = 0;% 积分区间
v1 = -0.2; v2 = 0.2;% 积分区间
n = 20;
i_arr = 0:n;
d = 0.1;
S = 0;% 求和初值
for i = 1:1:numel(i_arr)
S = S + integral3(@(u,w,v)F(u,w,v,i_arr(i),d,n),u1,u2,w1,w2,v1,v2);
end
S
结果
S =
0.012099286633777