MATLAB进阶:应用微积分

今天我们继续学习matlab中的应用微积分

求导(微分)

1、数值微分

n维向量x=(xi,x,... x)的差分定义为n-1维向量△x=(X2-X1,X3-X2,...,Xn- Xn-1)。

diff(x)

如果x是向量,返回向量x的差分如果x是矩阵,则按各列作差分。

diff(x,k)

k阶差分,即差分k次。

原理:

函数f(x)在点x= xo的导数为:

代码为:

复制代码
clear;
定义x,y
x=[1 1.1 1.2 1.3]; y=x.^3;
标准答案
3*x.^2
ans =
3.0000 3.6300 4.3200 5.0700
差分做法
dy=diff(y)/diff(x)

dy =
3.3100 3.9700 4.6900

我们看出差分法做导数求近似解的误差较大,是因为原式中△x是无限趋近于0的。

而此差分法的精度仅为0.1,故误差较大,在一般求导过程中,我们不会使用此方法,而是使用matlab中其他内置函数。

2、数值梯度微分

Fx=gradient(F,x)

返回向量F表示的一元函数沿x方向的导函数F'(x).其中x是与F同维数的向量.

Fx,Fy=gradient(F,x,y)

返回矩阵F表示的二元函数的数值梯度(F' x,F'y),当F为m*n矩阵时,x,y分别为n维和m维的向量。

代码为:

Matlab 复制代码
clear;
定义x,y
x=[1 1.1 1.2 1.3]; y=x.^3;
标准答案
3*x.^2
ans =
3.0000 3.6300 4.3200 5.0700

数值梯度做法
dy = gradient(y, x); % 使用 x 作为间距

dy =
3.3100  3.6400  4.3300  4.6900

可以看到,gradient(F,x)函数两端与标准答案比起来是有一定误差的,但是在函数体中间误差并没有很大。所以我们可以用这个函数来近似的求原函数的导数。

求积分

1、梯形积分法

z=trapz(x,y)

返回积分的近似值,其中x表示积分区间的离散化向量; y是与x同维数的向量,表示被积函数 。

原理如图:

即:取函数上若干点作为基准点,将图像切割成若干梯形后面积求解。

但是此种解法只能用来求近似解,求得的解误差较大。

如:

Matlab 复制代码
clear; 
x=-1:0.1:1;
y=exp(-x.^2);
trapz(x,y)

2、高精度积分法

z=integral (Fun,a,b)

  • fun 是被积函数,可以是函数句柄、匿名函数或内联函数。
  • a 和 b 是积分的下限和上限。
  • z 是积分的结果。

此函数简单易用,不再过多解释。

今天就到这里明天我们继续学习

相关推荐
懂点Tech1 小时前
ctfshow MISC入门图片篇(信息附加):misc41解题思路
开发语言·python
catchadmin2 小时前
PHP 8.7 协程新提案 让跨协程代码共享请求身份
开发语言·php
念何架构之路3 小时前
go-grpc设计思想
开发语言·后端·golang
星夜离尘563 小时前
MATLAB 工程实验:从相邻块均值手写重叠 Allan 偏差,数清有效项
算法·matlab·均值算法
酷炫码神3 小时前
Day 10|Pinia 状态管理:把散落在各组件的数据,收进一个全局仓库
android·开发语言·javascript
Elastic 中国社区官方博客4 小时前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
tyn1884 小时前
记录本地安装nacos服务的方法及异常
java·开发语言
步行cgn5 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
传奇开心果编程6 小时前
【Rust入门练中学】第5课:引用与借用
开发语言·rust·引用·编程语言理论·通用编程语言·借用
qetfw6 小时前
Bash 变量:export、位置参数与默认值展开验证
linux·开发语言·chrome·bash