- Matlab 教程
- MATLAB - 首页
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 环境设置
- MATLAB - 编辑器
- MATLAB - 在线版
- MATLAB - 工作区
- MATLAB - 语法
- MATLAB - 变量
- MATLAB - 命令
- MATLAB - 数据类型
- MATLAB - 运算符
- MATLAB - 日期和时间
- MATLAB - 数字
- MATLAB - 随机数
- MATLAB - 字符串和字符
- MATLAB - 文本格式化
- MATLAB - 时间表
- MATLAB - M 文件
- MATLAB - 冒号表示法
- MATLAB - 数据导入
- MATLAB - 数据导出
- MATLAB - 数据归一化
- MATLAB - 预定义变量
- MATLAB - 决策
- MATLAB - 决策语句
- MATLAB - if…end 语句
- MATLAB - if…else 语句
- MATLAB - if…elseif…else 语句
- MATLAB - 嵌套 if 语句
- MATLAB - switch 语句
- MATLAB - 嵌套 switch
- MATLAB - 循环
- MATLAB - 循环
- MATLAB - for 循环
- MATLAB - while 循环
- MATLAB - 嵌套循环
- MATLAB - break 语句
- MATLAB - continue 语句
- MATLAB - end 语句
- MATLAB - 数组
- MATLAB - 数组
- MATLAB - 向量
- MATLAB - 转置运算符
- MATLAB - 数组索引
- MATLAB - 多维数组
- MATLAB - 兼容数组
- MATLAB - 分类数组
- MATLAB - 元胞数组
- MATLAB - 矩阵
- MATLAB - 稀疏矩阵
- MATLAB - 表格
- MATLAB - 结构体
- MATLAB - 数组乘法
- MATLAB - 数组除法
- MATLAB - 数组函数
- MATLAB - 函数
- MATLAB - 函数
- MATLAB - 函数参数
- MATLAB - 匿名函数
- MATLAB - 嵌套函数
- MATLAB - return 语句
- MATLAB - 无返回值函数
- MATLAB - 局部函数
- MATLAB - 全局变量
- MATLAB - 函数句柄
- MATLAB - 滤波函数
- MATLAB - 阶乘
- MATLAB - 私有函数
- MATLAB - 子函数
- MATLAB - 递归函数
- MATLAB - 函数优先级顺序
- MATLAB - map 函数
- MATLAB - mean 函数
- MATLAB - end 函数
- MATLAB - 错误处理
- MATLAB - 错误处理
- MATLAB - try…catch 语句
- MATLAB - 调试
- MATLAB - 绘图
- MATLAB - 绘图
- MATLAB - 绘制数组
- MATLAB - 绘制向量
- MATLAB - 条形图
- MATLAB - 直方图
- MATLAB - 图形
- MATLAB - 二维线图
- MATLAB - 三维图
- MATLAB - 格式化图形
- MATLAB - 对数坐标轴图
- MATLAB - 绘制误差条
- MATLAB - 绘制三维等值线图
- MATLAB - 极坐标图
- MATLAB - 散点图
- MATLAB - 绘制表达式或函数
- MATLAB - 绘制矩形
- MATLAB - 绘制频谱图
- MATLAB - 绘制网格曲面图
- MATLAB - 绘制正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 线性插值
- MATLAB - 二维数组插值
- MATLAB - 三维数组插值
- MATLAB - 多项式
- MATLAB - 多项式
- MATLAB - 多项式加法
- MATLAB - 多项式乘法
- MATLAB - 多项式除法
- MATLAB - 多项式的导数
- MATLAB - 变换
- MATLAB - 变换函数
- MATLAB - 拉普拉斯变换
- MATLAB - 拉普拉斯滤波器
- MATLAB - 高斯-拉普拉斯滤波器
- MATLAB - 逆傅里叶变换
- MATLAB - 傅里叶变换
- MATLAB - 快速傅里叶变换
- MATLAB - 二维逆余弦变换
- MATLAB - 向坐标轴添加图例
- MATLAB - 面向对象
- MATLAB - 面向对象编程
- MATLAB - 类和对象
- MATLAB - 函数重载
- MATLAB - 运算符重载
- MATLAB - 用户自定义类
- MATLAB - 复制对象
- MATLAB - 代数
- MATLAB - 线性代数
- MATLAB - 高斯消元法
- MATLAB - 高斯-约旦消元法
- MATLAB - 简化行阶梯形
- MATLAB - 特征值和特征向量
- MATLAB - 积分
- MATLAB - 积分
- MATLAB - 二重积分
- MATLAB - 梯形法则
- MATLAB - 辛普森法则
- MATLAB - 其他
- MATLAB - 微积分
- MATLAB - 微分
- MATLAB - 矩阵的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用资源
- MATLAB - 快速指南
- MATLAB - 有用资源
- MATLAB - 讨论
MATLAB - 梯形法则
梯形法则是一种用于逼近函数定积分的数值方法。它通过将曲线下的面积分成一系列梯形而不是矩形(如矩形法则),然后将它们的面积相加来获得总积分的估计值。
梯形法则的步骤详解
步骤 1 - 分割区间 [a, b]
应用梯形法则的第一步是将要积分函数 f(x) 的区间 [a,b] 分成 n 个宽度相等的子区间 Δx。
每个子区间的宽度 Δx 计算如下:
$$\mathrm{\Delta x\: = \: \frac{b \: - \: a}{n}}$$
此分割得到 n+1 个点 x0,x1,x2,…,xn,其中
$$\mathrm{x_{i} \: = \: a \: + \: i\cdot\Delta x \:\:for\: i \: = \: 0,1,2,\dots, n }$$
这里,x0 = a 和 xn = b 表示区间的端点。
步骤 2 - 形成梯形
$$\mathrm{\begin{bmatrix} x_{i - 1}, & x_{i} \end{bmatrix}}$$
对于每个子区间,使用子区间端点处的函数值形成一个梯形:
$$\mathrm{f(x_{i-1}) \: and \: f(x_{i})}$$
$$\mathrm{\begin{bmatrix} x_{i - 1}, & x_{i} \end{bmatrix}}$$
底边为 f(xi-1) 和 f(xi),高为 Δx 的梯形的面积由下式给出:
$$\mathrm{梯形_{i}面积 \: = \: \frac{1}{2} \: \times \: \Delta x \: \times \: [f(x_{i-1}) \: + \: f(x_{i})]}$$
曲线下的总近似面积(代表积分)是所有梯形面积的总和。
步骤 3 - 对梯形面积求和
区间 [a,b] 上函数 f(x) 的积分近似于所有梯形面积的总和:
$$\mathrm{\displaystyle\int_{a}^{b} f(x)\: dx\: \approx \: \displaystyle\sum\limits_{i=1}^n \: 梯形_{i}面积}$$
代入面积公式,则变为:
$$\mathrm{\displaystyle\int_{a}^{b} f(x)\: dx\: \approx \: \frac{\Delta x}{2} \left[f(x_{0}) \: + \: 2 \displaystyle\sum\limits_{i=1}^{n-1} f(x_{i}) \: + \: f(x_{n})\right]}$$
此公式给出了函数值的加权和,其中端点 f(x0) 和 f(xn) 各计数一次,而所有中间函数值 f(x1), f(x2), …..f(xn-1) 各计数两次。
现在让我们看看如何在 matlab 中实现梯形法则。
可以使用循环进行手动方法或利用内置的 trapz 函数在 MATLAB 中实现梯形法则。
语法
Q = trapz(Y) Q = trapz(X,Y) Q = trapz(___,dim)
语法解释
trapz(Y) - 对于向量 Y,它使用梯形法则计算 Y 中值的近似积分,假设点是等距的。
对于矩阵 Y,它分别计算每一列的积分,得到一个包含结果的行向量。对于多维数组 Y,它沿第一个具有多个元素的维度计算积分。计算后,此维度变为单个值,而其他维度保持不变。
trapz(X,Y) - 它使用梯形法则计算 Y 的积分,关于 X 给出的值或间距。
如果 X 是坐标向量:X 中的元素个数必须与 Y 的第一个具有多个元素的维度的尺寸匹配。
如果 X 是单个数字(标量),trapz(X,Y) 与将该数字 X 乘以 trapz(Y) 的结果相同,后者假设均匀间距。
trapz(___,dim) - 对于 Q = trapz(___,dim):它使用梯形法则沿 Y 的特定维度 dim 计算积分。必须指定 Y,也可以选择性地指定 X。如果提供 X,它可以是单个数字(标量)或长度与 Y 沿指定的维度 dim 的大小匹配的向量。例如:如果 Y 是矩阵并且使用 trapz(X,Y,2),它将对 Y 的每一行进行积分。
示例 1:使用 trapz(Y),其中 Y 是向量
Y = [1, 4, 9, 16, 25]; Q = trapz(Y); disp(Q);
该向量表示一系列等距点(假设相隔 1 个单位)的值。trapz(Y) 函数计算这些值的近似积分。
输出 Q 是 Y 中值的近似积分,它给出了这些点表示的曲线下的总面积。
执行后,输出为:
>> Y = [1, 4, 9, 16, 25]; Q = trapz(Y); disp(Q); 42 >>
示例 2:使用 trapz(Y),其中 Y 是矩阵
Y = [1 2 3; 4 5 6; 7 8 9]; Q = trapz(Y); disp(Q);
该矩阵表示多组数据,每列一组。trapz(Y) 函数分别计算每一列的积分。输出 Q 是一个行向量,包含 Y 的每一列的积分值。对于此矩阵,trapz(Y) 给出的结果类似于 [8 10 12]。
执行后,输出为:
>> Y = [1 2 3; 4 5 6; 7 8 9]; Q = trapz(Y); disp(Q); 8 10 12 >>
示例 3:使用 trapz(X,Y),其中 X 和 Y 是向量
X = [1, 2, 3, 4, 5]; Y = [1, 4, 9, 16, 25]; Q = trapz(X, Y); disp(Q);
这里,X 是一个向量,其长度必须与 Y 的第一维的大小匹配(两者都有 5 个元素)。
trapz(X,Y) 计算 Y 关于 X 的积分,考虑 X 中点之间的实际间距。
代码执行后,我们得到的输出如下:
>> X = [1, 2, 3, 4, 5]; Y = [1, 4, 9, 16, 25]; Q = trapz(X, Y); disp(Q); 42 >>
示例 4:使用 trapz(X,Y),其中 X 是一个标量数
X = 1; Y = [1, 4, 9, 16, 25]; Q = trapz(X, Y); disp(Q);
这里,X 是一个表示点之间均匀间距的单个数字。
trapz(X,Y) 等效于将 X 乘以 trapz(Y) 的结果。由于 X=1,它只返回 trapz(Y) 的结果,假设点是等距的。
输出 Q 将给出 Y 的近似积分,假设点之间有 1 个单位的均匀间距。
代码执行后,我们得到的输出如下。
>> X = 1; Y = [1, 4, 9, 16, 25]; Q = trapz(X, Y); disp(Q); 42 >>
示例 5:沿列进行积分,dim=1
我们拥有的代码是:
Y = [1 2 3; 4 5 6; 7 8 9]; Q = trapz(Y, 1); disp(Q);
维度:dim = 1 表示沿矩阵的每一列进行积分。结果将是一个行向量,其中每个元素表示 Y 的对应列的积分。这里,Q 中的每个值都是 Y 的每一列值的积分。
执行后,我们得到的输出是。
>> Y = [1 2 3; 4 5 6; 7 8 9]; Q = trapz(Y, 1); disp(Q); 8 10 12 >>
示例 6:沿行进行积分 (dim = 2)
我们拥有的代码是。
Y = [1 2 3; 4 5 6; 7 8 9]; Q = trapz(Y, 2); disp(Q);
维度 - dim = 2 表示沿矩阵的每一行进行积分。
结果将是一个列向量,其中每个元素表示 Y 的对应行的积分。
代码执行后,输出是
>> Y = [1 2 3; 4 5 6; 7 8 9]; Q = trapz(Y, 2); disp(Q); 4 10 16 >>