MATLAB中的梯形数值积分(不使用trapz函数)


梯形数值积分简介

梯形数值积分是一种用于求解定积分近似值的方法。它也被称为梯形法则。在梯形数值积分方法中,我们使用梯形来计算曲线下的面积。

在梯形法则中,我们要积分的总区间被分成较小的子区间。然后,使用梯形近似每个子区间下的曲线面积。之后,通过子梯形面积之和来估计曲线下的总面积。这将是定积分的近似值。

梯形法则公式

以下表达式是梯形数值积分的公式,它给出了定积分的近似值。

$$\mathrm{\int_{a}^{b}f(x)dx\approx \frac{h}{2}[f(a)+2\lbrace{^{n-1}_{i=1}} f(x_{i})+f(b)\rbrace]}$$

其中,

$$\mathrm{x_{i}=a+ih}$$

$$\mathrm{h=\frac{(b-a)}{n}}$$

这里,“h”是步长或每个子区间的宽度,“n”是子区间的数量,“a”是积分的下限,“b”是积分的上限。

MATLAB中不使用'trapz'函数的梯形数值积分

在MATLAB中,我们可以使用内置函数“trapz”来数值逼近定积分。但是,在本文中,我们将学习不使用“trapz”函数实现梯形数值积分的方法。

为此,让我们在MATLAB中考虑一些示例程序。

问题(1):使用15个子区间估计曲线$\mathrm{^{2}_{0}(\frac{1}{1+x^{3}})dx}$下的面积。

示例

% MATLAB program demonstrate the trapezoidal 
numerical integration without using trapz function.
% MATLAB program to find area under the curve ∫_0^2 1/(1+x^3) dx 
using 15 subintervals.
% Create a dynamic variable x by using syms function

syms x
% Specify the lower and upper limits of the integration
a = 0;
b = 2;
% Specify the number of subintervals
n = 15;
% Define the function to integrate
fun1 = 1 / (1+x^3);
% Create a function of string containing in fun1
fun = inline(fun1);
% h is the step size
h = (b - a) / n;
% Create a variable S1 that stores the sum of first and 
last subintervals
S1 = fun(a) + fun(b);
% Create a variable S that stores the sum of all the 
subintervals from 1 to (n-1)
S = 0;
for i = 1:1:n-1
   xi = a + (i * h);
   S = S + fun(xi);
end
% Apply the formula to perform the numerical integration using 
Trapezoidal Rule
I = (h / 2) * (S1 + 2 * S);
% Display the result of the integration
disp('Area under the curve 1/(1+x^3) = ');
disp(I);

输出

Area under the curve 1/(1+x^3) = 
    1.0898

解释

在这个MATLAB程序中,函数“fun1”指定了我们要积分的函数。变量“a”和“b”分别定义了积分的下限和上限。函数“inline”生成创建了一个包含在函数“fun1”中的字符串的函数“fun”。然后,调用表达式“h”来计算步长。之后,我们计算第一个和最后一个子区间的和,并将总和存储在“S1”中。然后,我们指定一个变量“S”来存储从1到(n-1)的所有子区间的和。之后,我们使用梯形法则公式执行数值积分。最后,我们调用“disp”函数来显示结果。

问题(2):使用10个子区间估计曲线 $\mathrm{^{\pi}_{0}(sin(x))dx}$下的面积。

示例

% MATLAB program demonstrate the trapezoidal 
numerical integration without using trapz function.
% MATLAB program to find area under the curve ∫_0^π sin(x) dx 
using 10 subintervals.
% Create a dynamic variable x by using syms function

syms x
% Specify the lower and upper limits of the integration
a = 0;
b = pi;
% Specify the number of subintervals
n = 10;
% Define the function to integrate
fun1 = sin(x);
% Create a function of string containing in fun1
fun = inline(fun1);
% h is the step size
h = (b - a) / n;
% Create a variable S1 that stores the sum of first and last 
subintervals
S1 = fun(a) + fun(b);
% Create a variable S that stores the sum of all the 
subintervals from 1 to (n-1)
S = 0;
for i = 1:1:n-1
   xi = a + (i * h);
   S = S + fun(xi);
end
% Apply the formula to perform the numerical integration using 
Trapezoidal Rule
I = (h / 2) * (S1 + 2 * S);
% Display the result of the integration
disp('Area under the curve sin (x) = ');
disp(I);

输出

Area under the curve sin (x) = 
    1.9835

结论

这就是关于在MATLAB中不使用“trapz”函数执行梯形数值积分的所有内容。上述MATLAB示例程序说明了不使用“trapz”函数执行梯形数值积分的简单实现。

更新于: 2023年7月18日

451 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告