如何用matlab如何实现数值积分

如题所述

用matlab可以如下数值积分法,来求解定积分、二重积分、三重积分的数值解问题。
1、梯形数值积分计算 trapz()
X = 0:pi/100:pi;
Y = sin(X);

Z = pi/100*trapz(Y)

2、自适应辛普森数值积分计算 quad()
F = @(x)1./(x.^3-2*x-5);
Q = quad(F,0,2);

3、自适应Lobatto积分计算 quadl()

function y = myfun(x)

y = 1./(x.^3-2*x-5);
end
Q = quadl(@myfun,0,2);
4、自适应Gauss Kronrod quadrature积分计算 quadgk()
function y = myfun(x)

y = exp(-x.^2).*log(x).^2;
end
Q = quadgk(@myfun,0,Inf)
5、平面区域的二重积分的数值计算 quad2d()
fun = @(x,y) 1./( sqrt(x + y) .* (1 + x + y).^2 )
ymax = @(x) 1 - x

Q = quad2d(fun,0,1,0,ymax)
6、矩形区域的的二重积分数值计算 dblquad()
function z = integrnd(x, y)

z = y*sin(x)+x*cos(y);
end
Q = dblquad(@integrnd, pi, 2*pi, 0, pi)
7、三重积分数值计算 triplequad()
function f = integrnd(x, y, z)

f = y*sin(x)+z*cos(x);
end
Q = triplequad(@integrnd, 0, pi, 0, 1, -1, 1)
以上是最基本的求解数值积分方法。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-10
CenaTP 发表于 2013-8-26 18:16

登录/注册后可看大图

感觉用trapz和用sum直接求和差不多~
trapz
和 cumtrapz
函数都是基于梯形积分的函数,其本质是将积分区间划分为一定数量的等间距的子区间,然后将每段子区间上的函数曲线用一段直线近似,该直线经过由小区间端点对应的原曲线上的两个端点。所以,从本质上讲,梯形积分只不过是一种
“分段线性近似”。所以,对于高次函数(次数>=2)时,梯形积分在划分区间数目一定的情况下可能会很变得不精确(尤其是当被积函数不连续或震荡性很大时),而且,在子区间数固定的情况下,被积函数次数越高,梯形积分精度就越差。所以,为了使得梯形积分变得更加精确,你需要用更小的间隔来划分更多的子区间,即用更多的子区间来近似。

但是,对于已知离散数据的情况下,数据量是固定的,即无法进一步划分子区间,所以,用梯形积分可能造成很大的误差。如果已知被积函数可能的次数的话,可以考虑用大于等于该次数的多项式拟合,将被积函数表达式拟合出来,一旦有了函数表达式,用符号积分
int 或数值积分 quadgk 或 integral
都可以。即使不知道被积函数的次数,也可以用高次函数你和出被积函数,再做积分
相似回答