【数值积分】如何利用梯形法则近似求解积分
对于一些函数,如f(x)=x^x,很难直接求其积分,但是在已知函数积分上下限时,可以通过数值积分的梯形公式法近似其答案
设f(x)=(1/x)^(ax+b),式中,a=1,b=2,求其在[1,2]内的积分
代码:
主代码
function main()
% 主程序
clc
clear
close all
%% 参数设置
% 积分区间
int_low = 1; % 积分下限
int_up = 2; % 积分上限
% 小区间数量
n = 1000; % 可以调整以提高精度
% 常数
a = 1; % 常数 a
b = 2; % 常数 b
%% 梯形法则
% 调用梯形法则函数计算积分
integral_value = trapezoidal_rule(@f_int, int_low, int_up, n, a, b);
%% 输出结果
fprintf('积分的近似值为: %.10f\n', integral_value);
f_int.m
% 定义被积函数 f_int(x)
function y = f_int(x, a, b)y = x .^ (a * x + b);
end
trapezoidal_rule.m
% 梯形法则函数
function integral = trapezoidal_rule(f, a, b, n, a_const, b_const)% 参数:% f - 被积函数% a - 积分下限% b - 积分上限% n - 小区间数量% a_const - 常数 a% b_const - 常数 b% 计算每个小区间的宽度h = (b - a) / n;% 初始化积分值integral = 0;% 计算梯形面积for i = 0:nx = a + i * h;if i == 0 || i == nintegral = integral + f(x, a_const, b_const); % 端点权重为 1elseintegral = integral + 2 * f(x, a_const, b_const); % 内点权重为 2endend% 乘以小区间宽度的一半integral = integral * h / 2;
end
结果:
小区间数量n = 100时,结果为5.5063912678
小区间数量n = 1000时,结果为5.5060605264
小区间数量n = 5000时,结果为5.5060573192
小区间数量n = 10000时,结果为5.5060572190
小区间数量越多,精度越高