在 MATLAB 中,可以使用内置的函数实现四种基本的数值积分运算,包括:
1. **矩形法(Rectangle Rule)**
2. **梯形法(Trapezoidal Rule)**
3. **辛普森法(Simpson's Rule)**
4. **龙贝格积分(Romberg Integration)**
下面给出每种方法的简单实现示例:
1. 矩形法
矩形法(Rectangle Rule)是最简单的数值积分方法,通过用矩形的面积来近似函数的积分。
function I = rectangle_rule(f, a, b, n)
% f: 被积函数句柄
% a, b: 积分区间 [a, b]
% n: 矩形数量
h = (b - a) / n;
x = a:h:b;
y = f(x);
I = h * sum(y);
end
2. 梯形法
梯形法(Trapezoidal Rule)使用梯形的面积来近似函数的积分。
function I = trapezoidal_rule(f, a, b, n)
% f: 被积函数句柄
% a, b: 积分区间 [a, b]
% n: 梯形数量
h = (b - a) / n;
x = a:h:b;
y = f(x);
I = h * (sum(y(1:end-1)) + 0.5 * (y(1) + y(end)));
end
3. 辛普森法
辛普森法(Simpson's Rule)使用抛物线的面积来近似函数的积分。
function I = simpsons_rule(f, a, b, n)
% f: 被积函数句柄
% a, b: 积分区间 [a, b]
% n: 抛物线数量,应为偶数
if mod(n, 2) ~= 0
error('n must be an even number for Simpson''s rule');
end
h = (b - a) / n;
x = a + h * (0:n);
y = f(x);
I = h / 3 * (y(1) + 4 * sum(y(2:2:end-1)) + 2 * sum(y(3:2:end-2)) + y(end));
end
4. 龙贝格积分
龙贝格积分(Romberg Integration)是一种通过逐步增加节点数量和采用复化梯形公式来提高精度的方法。
function [I, R] = romberg_integration(f, a, b, tol)
% f: 被积函数句柄
% a, b: 积分区间 [a, b]
% tol: 所需精度
% I: 计算得到的积分值
% R:Richardson外推表
h = b - a;
n = 1;
R = zeros(log2(tol), 2);
R(1, 1) = (h/2)*(f(a) + f(b)); % Trapezoidal rule
while (R(end, 1) > tol)
n = 2 * n;
h = h / 2;
x = linspace(a, b, n+1);
y = f(x);
R(end+1, 1) = (h/2) * (y(1) + 2*sum(y(2:end-1)) + y(end)); % Composite trapezoidal rule
for k = end:-1:2
R(k, 2) = (4^(k-1) * R(k, 1) - R(k-1, 1)) / (4^(k-1) - 1); % Richardson extrapolation
end
R = R(2:end, :);
end
I = R(end, 2);
end
使用这些函数时,你需要提供被积函数的句柄(例如,`@(x) x.^2` 表示 `x^2`),积分区间的下限 `a` 和上限 `b`,以及对于数值方法所需的步数或精度。例如,使用梯形法计算函数 `f(x) = x^2` 在区间 `[0, 1]` 上的积分,可以这样调用函数:
要计算函数 `f(x) = x^2` 在区间 `[0, 1]` 上的积分,使用梯形法,你可以这样调用前面定义的 `trapezoidal_rule` 函数:
f = @(x) x.^2; % 定义被积函数
a = 0; % 积分下限
b = 1; % 积分上限
n = 100; % 使用100个梯形进行近似
% 调用梯形法函数
I_trapezoidal = trapezoidal_rule(f, a, b, n);
% 显示结果
disp(['The integral using the Trapezoidal Rule is approximately: ', num2str(I_trapezoidal)]);
请注意,对于龙贝格积分,你需要指定所需的精度 `tol`。下面是一个使用龙贝格积分计算相同积分的示例:
% 定义被积函数、积分区间和所需精度
f = @(x) x.^2;
a = 0;
b = 1;
tol = 1e-6; % 指定精度为10^-6
% 调用龙贝格积分函数
[I_romberg, R] = romberg_integration(f, a, b, tol);
% 显示结果
disp(['The integral using Romberg Integration is approximately: ', num2str(I_romberg)]);
在实际应用中,你可能需要根据具体情况调整步数 `n` 或精度 `tol` 以获得满意的结果。对于辛普森法,你需要确保步数 `n` 是偶数,因为它依赖于偶数个点的抛物线拟合。
最后,MATLAB 本身就提供了强大的数值积分函数 `integral`,你可以直接使用这个函数而不需要自己实现数值方法。例如:
% 使用MATLAB内置的integral函数计算积分
I_builtin = integral(f, a, b);
% 显示结果
disp(['The integral using MATLAB''s built-in function is: ', num2str(I_builtin)]);
内置函数 `integral` 通常使用自适应方法,可以根据需要自动调整步长以获得高精度结果。