matlab实现数值积分 【一】(trapz函数)
总述
数值积分问题是传统数值分析课程中的重要内容。如果被积函数的数学表达式未知,则需要由实测数据通过梯形算法求出积分的近似值。本文将介绍被积函数的数学表达式未知时数值积分问题的求解方法,即已知数据点求积分。
函数调用格式
S = trapz(x, y);
应用举例
例1:梯形法求积分
x = [0:pi/30:pi]';
y = [sin(x) cos(x) sin(x/2)];
S = trapz(x,y)
结果为:S = [1.9982 0.0000 1.9995]
由于选择的步距较大,为
h
=
π
/
30
=
0.1
h=\pi/30 = 0.1
h=π/30=0.1 , 故得出的结果有较大的误差。其实可以将积分问题与样条插值技术相结合,给出 一 个能精确计算积分的MATLAB函数。(待补充)
例2:不同步长对积分结果的影响
题目: 用定步长法求解积分
∫
0
3
π
2
c
o
s
15
x
d
x
\int_0^{\frac{3\pi}{2}}{cos15xdx}
∫023πcos15xdx,并讨论不同步长对积分值的影响。
- 首先,绘制被积函数的图像:
x=[0:0.01:3*pi/2, 3*pi/2]; % //这样赋值能确保 3*pi/2 点被包含在内
y=cos(15*x); plot(x,y)
由图像观察出在求解区域内被积函数有很强的振荡。
- 对不同的步距
h
=
0.1
,
0.01
,
0.001
,
0.0001
,
0.00001
,
0.000001
h= 0.1, 0.01, 0.001, 0.0001, 0.00001, 0.000001
syms x, A=int(cos(15*x),0,3*pi/2) % //求取理论值为1/15
h0=[0.1,0.01,0.001,0.0001,0.00001,0.000001]; v=[];
for h=h0
x = [0:h:3*pi/2, 3*pi/2]; y=cos(15*x);
I = trapz(x,y);
v = [v; h,I,A-I];
end
得出结果如下:
可见,随着步距
h
h
h的减小,计算精度逐渐增加。