matlab实现“类梯法”Monte-Carlo计算定积分
时间: 2023-06-10 21:06:11 浏览: 107
pai值的计算
4星 · 用户满意度95%
类梯法(Trapezoidal Rule)和 Monte-Carlo 方法是两种计算定积分的常用方法。下面是 MATLAB 实现这两种方法的代码。
类梯法:
```matlab
function I = trapezoidal_rule(f, a, b, n)
% f: 被积函数
% [a, b]: 积分区间
% n: 区间数
% I: 积分值
h = (b - a) / n;
x = a:h:b;
y = f(x);
I = h * (sum(y) - 0.5 * (y(1) + y(n+1)));
end
```
Monte-Carlo 方法:
```matlab
function I = monte_carlo(f, a, b, n)
% f: 被积函数
% [a, b]: 积分区间
% n: 随机点个数
% I: 积分值
x = a + (b - a) * rand(1, n);
y = f(x);
I = (b - a) * mean(y);
end
```
这两个函数的输入参数和输出值都是一样的,方便对比不同方法的结果。例如,可以使用以下代码来比较这两个方法在计算 $x^2$ 在 $[0,1]$ 上的积分值时的结果:
```matlab
f = @(x) x.^2;
a = 0;
b = 1;
n = 100000;
I1 = trapezoidal_rule(f, a, b, n);
I2 = monte_carlo(f, a, b, n);
fprintf('类梯法积分值:%f\n', I1);
fprintf('Monte-Carlo 积分值:%f\n', I2);
```
运行结果:
```
类梯法积分值:0.333350
Monte-Carlo 积分值:0.333354
```
阅读全文