【MATLAB】(三)MATLAB在高等数学中的应用
文章目录
- 前期教程
- 概述
- 1 函数极限
- 2 导数与偏导
- 3 函数极值&最值
- 4 求方程(组)的根
- 5 求函数零点
- 6 泰勒公式
- 7 数列求和
- 8 函数积分
- 8.1 一般函数积分
- 8.2 数值积分
- 9 表达式化简
- 10 插值
- 10.1 一维插值
- 10.2 二维插值
- 10.3 总结
- 11 常微分方程
- 11.1 解析解
- 11.2 数值解
- 后续教程
前期教程
- 【MATLAB】(一)基本使用入门
- 【MATLAB】(二)基本使用拾遗
概述
本篇博客主要记录MATLAB在高数中的应用。建议没有基础的先看看前期教程。
1 函数极限
在MATLAB中,求函数极限的命令是limit,其中的参数比较简单,参见下表。
需要注意:并不是所有的极限都可以使用limit指令来求出,部分极限求不出来,会得到NaN的输出。
2 导数与偏导
有时候需要无法直接使用y对x求导时,可以先求出x对t的导数和y对t的导数,然后再求y对x的导数。
同理,求隐函数或者偏导时,也可以使用类似的间接方法。
3 函数极值&最值
- fminband
- fminsearch
注意:这里求出的是局部范围内的最值,相当于求极值的函数,如果需要求最值需要再根据实际情况判断一下。
求离散数据(如一个向量或者矩阵)中的最值使用min
和max
函数:
此外,还有两个专门求多元函数极值的函数:
fminunc
这个函数主要用于 无约束多元函数求极值 问题。其中“unc”应该是“unconstrained”的缩写。其一般的使用结构如下所示:
[x, fval] = fminunc(fun, x0)
其中,fun
为代求极值的函数;x0
为起始点,即从这个点开始寻找极值,由于该函数用于多元函数极值问题,所以x0
为一个向量;输出x
表示取到极值的位置,和x0
维度相同,也是一个向量;输出fval
为求得的极值,即fun(x)
。
fmincon
这个函数主要用于有约束多元函数求极值 问题。其中“con”应该是“constrained”的缩写。其一般使用的结构为:
[x, fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
其中,x, fval, fun, x0
和上面介绍的一样 ,另外几个参数:A
和b
表示线性不等式约束,即Ax<b
;Aeq
和beq
表示线性等式约束,即Aeq·x = beq
;lb
和ub
表示函数自变量的边界,即lower bound,upper bound;nonlcon
表示 非线性约束 ,一般是以一个函数句柄**的形式调用,用c(x)<0
和ceq(x)=0
表示。
综上,这个函数可以表示为以下函数问题的解:
这两个函数的具体用法建议在MATLAB中利用help指令查看
4 求方程(组)的根
求代数方程f(x) = 0
的根,可以使用MATLAB中的命令solve(f, x)
,输出结果即为f(x) = 0
的所有符号解或精确解。
如果需要求方程组的解,如{f(x,y)=0g(x,y)=0\left\{ \begin{array}{c} f\left( x, y \right) \,\,=\,\,0\\ g\left( x, y \right) \,\,=\,\,0\\ \end{array} \right. {f(x,y)=0g(x,y)=0可以使用指令[x, y] = solve(f, g, x, y)
求出。
同样需要注意:这个
solve
指令可能求出的并不是唯一解,也有可能不是精确解,需要自己根据实际情况判断选择。
5 求函数零点
MATLAB中求函数零点的方法都是使用牛顿迭代法求出的近似解。
需要注意:如果使用的命令不同,或者选择的初始点不同,那求出的结果也会有差异。
6 泰勒公式
MATLAB中有可以直接算泰勒展开的指令,使用非常方便:
可以看出,这个指令的参数结构是 “Name, Value” 格式的,即两个参数为一对,先是参数的类型名,然后是参数对应的值。
7 数列求和
在已知一个具体数字组成的向量或矩阵时,可以直接使用sum(x)
的指令来进行求和。
但是需要注意:如果x
为一个向量,那么所求出的结果为向量所有元素之和;如果x
为一个矩阵,那么求出的结果为一个向量,且向量元素的数量为矩阵x
的列数,即每个元素为矩阵x
一列元素之和。
对于含有参数的数列,MATLAB中也有对应的求和指令symsum
8 函数积分
8.1 一般函数积分
如果是多重积分,可以连续使用多个int指令。如下所示
8.2 数值积分
在学习数值积分的MATLAB指令前,需要先了解什么是数值积分?
所谓数值积分,是针对那些求积分求不出解析解的数学表达式,利用图形化的方法来求其积分的数值解,即曲线与x轴围成的面积大小,即下面积大小。记住,这是核心思想!
然后针对如何求曲线下面积的方法,提出了不同的方法。比较常用的有三种:梯形积分法、辛普森法(Simpson)、自适应辛普森法(Adaptive Simpson),下面分别介绍。
- 梯形积分法
顾名思义,就是将整个下面积分解为一个个等高的梯形,然后求出梯形面积之和,即求出了曲线的积分。
使用梯形积分法的思想可以有两种方法,一种是按照这个思路实际编程操作,如下详述:
除了这种需要亲力亲为的操作,MATLAB还提供了一个指令来实现,使得数值积分更加简单。
其中,参数中的x
为积分区间内的各个等距点向量,y
为该x
向量中各点作为自变量在积分函数上对应的函数值,因此y
也是一个向量。 - 辛普森法(Simpson)
从上面的描述可以看出,梯形法是将积分区间分解为一个个等距的小梯形,然后将所有梯形的面积求和,即得到该函数在设定区间上的积分,这种积分方法存在一个问题,那就是当曲线波动较大时,梯形的斜边拟合曲线误差较大,因此人们又提出了将斜边换为曲线的方法,而抛物线作为最简单的曲线成为首选。即将积分单元从梯形改为曲边梯形,且曲边为抛物线,此即辛普森法(Simpson)。 - 自适应辛普森法(Adaptive Simpson)
使用辛普森法相比于梯形积分法确实误差减小了很多,但是计算量也增加了不少。其中最为主要的影响因素就是采样点的多少,即各个子区间的大小。当子区间越小,积分计算结果的精度越高,但计算量也越大。据此人们又提出了自适应辛普森法(Adaptive Simpson)。即当曲线变化不均匀时,选择在波动剧烈的曲线段增加采样点,减小采样间距;在波动较为平缓的曲线段减少采样点,增大采样间距。这样可以在保证精度的同时尽量减少计算量。因此该方法应用最为广泛。
对于重积分,自适应辛普森方法也有对应的指令:
9 表达式化简
在计算积分的解析解时,我们常常会得到一个非常复杂的表达式,可读性较差,因此化简表达式就显得很有必要。下面总结一些常用是化简表达式的指令【MATLAB 2019版本适用】
pretty(f)
—— 将符号表达式化简成与高等数学课本上显示符号表达式形式类似(大大提升表达式可读性!)collect(f)
—— 合并符号表达式的同类项horner(f)
—— 将一般的符号表达式转换成嵌套形式的符号表达式factor(f)
—— 对符号表达式进行因式分解expand(f)
—— 对符号表达式进行展开simplify(f)
—— 对符号表达式进行化简,它利用各种类型的代数恒等式,包括求和、积分、三角函数、指数函数以及 Bessel 函数等来化简符号表达式。【这个指令应该是simple
的更新版,目前simple
指令不能用了】
10 插值
很多工程实践中,往往需要通过若干个节点的数据,来获得其他节点的数据,这时就需要用到插值的方法。
常用的插值分为一维和二维两种情况。其中,一维插值又有很多种方法。下面分别介绍。
10.1 一维插值
- 拉格朗日插值
- 分段线性插值
但是,在实际应用中,已知节点的个数可能很大,不过拟合的多项式最高次数并不是越大越好,所以有一种方法是直接将相邻的两个节点用直线连接,两点之间的函数值用直线的方程来表示。如下图实线所示。
在MATLAB中,分段线性插值的指令为
y = interp1(x0, y0, x);
其中,x0
为已知节点自变量,y0
为已知节点因变量,x
为待计算的插值点数组(一般x的范围更广),返回值y
为x
向量各元素对应的因变量组成的向量。
显然,直接用直线连接相邻节点拟合出的曲线误差太大,尤其是节点数较少时更加明显。为了使得曲线更加平滑,可以使用三次曲线代替直线连接相邻的两个节点。此即分段三次插值,但是仍然可以使用这个指令,只需要调整参数即可。
插值指令完整版为
y = interp1(x0, y0, x, 'method');
method
参数可以取如下值:
由图可知,当method
取cubic
或pchip
时为分段三次插值,所得曲线相比于线性插值更加光滑,该指令与下列指令等效:
p = pchip(x,y,xq); %xq相当于上面的x,为待插值范围
取spline
时为三次样条插值。
- 三次样条插值
通过上面的表述,可以发现,三次样条插值与分段三次插值十分类似,都是使用三次曲线去连接两个相邻的节点,但是从上面那个表格可知,三次样条插值得到的曲线在所有节点处都是二阶可导,因此计算时间最长。
三次样条插值除上文中所述指令外,还有其他指令可以实现相同效果:
s = spline(x, y, xq); %参数与上文中相同
pp=csape(x0,y0);
y=ppval(pp,x); %x0,y0,y代表的含义与上文相同
10.2 二维插值
10.3 总结
11 常微分方程
常微分方程的解一般可以分为两类,一种是能够求出解析解的表达式,一种是只能求出数值解的表达式。
11.1 解析解
对于能够求出解析解的表达式,一般采用的是MATLAB中的指令dsolve
,一些老的教材中可能会有很多过时的使用方法。在MATLAB 2019版本中,dsolve
已经不支持参数为字符串的格式了。为了能够得到较为准确的使用方法,建议直接使用help dsolve
指令查看使用文档。
参考下面的几个例子:
syms y(t) a
eqn = diff(y,t) == a*y;
S = dsolve(eqn)
/****************************************/
syms y(t) a
eqn = diff(y,t) == a*y;
cond = y(0) == 5;
ySol(t) = dsolve(eqn,cond)
/****************************************/
syms y(t) a b
eqn = diff(y,t,2) == a^2*y;
Dy = diff(y,t);
cond = [y(0)==b, Dy(0)==1];
ySol(t) = dsolve(eqn,cond)
/****************************************/
syms y(t) z(t)
eqns = [diff(y,t) == z, diff(z,t) == -y];
S = dsolve(eqns)
/****************************************/
syms y(t) z(t)
eqns = [diff(y,t)==z, diff(z,t)==-y];
[ySol(t),zSol(t)] = dsolve(eqns)
11.2 数值解
非线性微分方程组通常无法求出解析解,即使是线性常微分方程,如果不能获得变系数的积分,也无法给出解的表达式,因此这个时候就需要用到求常微分方程的数值解。
求常微分方程的数值解的关键在于如何表达出函数的导数关系式,一个很容易想到的思路是,将导数转变为差商的形式,由此也就有了Euler法,此外,还有龙格·库塔法,具体原理建议搜索相关资料。这里主要介绍使用方法。
后续教程
【MATLAB】(三)MATLAB在高等数学中的应用相关推荐
- 对高等数学中的基本概念的剖析
对高等数学中的基本概念的剖析 作者:温旭辉华南理工大学数学科学学院 高等数学是理工科大学生入学后的第一门基础课程,它是学生学习后续数学课程以及专业课程的基础和工具,学习高等数学不但要使学生掌握数学的 ...
- MATLAB(四)在高等数学中的应用
MATLAB在高等数学中的应用 (一)求极限 matlab中求极限的命令为 limit(expr, x, a) limit(expr, a) limit(expr) limit(expr, x, a, ...
- 用Matlab求解高等数学中的问题(不定积分,定积分,多元微积分,微分方程,级数问题)
用Matlab求解高等数学中的问题 一.求解不定积分 利用matlab符号工具箱中的求积函数int, 可求函数的不定积分,int函数的调用格式如下: int(S) int(S,v) 说明: (1)in ...
- matlab选修结课作业,matlab在高等数学中的应用结课作业
matlab在高等数学中的应用结课作业 MatLab软件在作图中的应用 1.描点作图(MatLab及在电子信息课程中的应用131页) a=0:0.01:3; >> y=a: plot(y) ...
- 10的负3次方用matlab怎么,10的三次方和10的负三次方在word中怎么输入?有谁知道告我一声,谢谢...
10的三次方和10的负三次方在word中怎么输入?有谁知道告我一声,谢谢以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ...
- matlab语法手册下载,MATLAB及其在理工课程中的应用指南 第4版.pdf
作 者 :陈怀琛 出版发行 : 西安:西安电子科技大学出版社 , 2018.02 ISBN号 :978-7-5606-4737-1 页 数 : 262 原书定价 : 39.00 开本 : 16开 主题 ...
- 【 MATLAB 】MATLAB 实现模拟信号采样后的重建(三)一阶保持(FOH)内插
上篇博文采用了零阶保持(ZOH)的方式进行了重构:[ MATLAB ]MATLAB 实现模拟信号采样后的重建(二)零阶保持(ZOH) 这篇博文我们使用一阶保持(FOH)内插来重建信号,采用的案例依然是 ...
- matlab测量液体液位,基于MATLAB三容水箱液位控制系统.doc
基于MATLAB三容水箱液位控制系统 基于MATLAB三容水箱液位控制系统 计算机技术+沈瑞清+12011112262 本文通过对三容水箱的液位定值控制来说明SIMULINK在自动控制系统中的应用. ...
- matlab编写转台程序,基于Matlab三轴惯导测试转台结构分析.doc
基于Matlab三轴惯导测试转台结构分析 基于Matlab三轴惯导测试转台结构分析 摘 要:三轴惯导测试转台作为惯导测试设备,其精度直接影响惯导设备的精度,而中框回转精度在三轴精度相对较差.影响其中框 ...
- matlab读Excel表格数据画图,matlab读Excel表格数据画图-matlab如何从excel表格中读取数据?...
如何将excel表格中大量数据导入matlab中并作图 1.打开matlab,点击主页下面的数据导入,你可以导入excel数据,这里导入你自己命名的huitushuju文件. 2.单击"打开 ...
最新文章
- Unparseable date: 2015-8-8
- [YTU]_2918( Shape系列-4)
- linux 提取ko文件,Linux获取so/ko文件版本号教程
- spark安装测试过程中提示console:10: error: not found: value sc
- unipapp 解决无法编译sass_如何解决Vue项目里面没有sassloader依赖包的问题
- Main execution in Scala - Scala应用的入口
- 读取properties资源文件中的参数
- 万圣节海报设计没有思路?看看这些有趣的万圣节狂欢是如何完成的!
- 灰度资产管理总规模升至460亿美元
- 运维学python之爬虫工具篇(四)PhantomJS的用法
- Android基础:ViewPage2
- Mac OS X 10.13.6升级到更高版本的方法
- pandas中pd.groupby()的用法
- turtle八边形绘制
- app电池续航上下--Android自动化测试学历历程
- form表单如何不直接提交?
- C语言程序课程设计—读心术
- Weka中分类器指标的说明
- 燕教授使用体验,从漱口水到牙膏
- 别做梦了,社交产品哪有那么容易成功
热门文章
- python定义字典对象时_python字典对与list对象组合使用小问题
- 家谱管理系统性能要求_应用在Mac上的家谱族谱工具
- gson下载java_gson.jar
- laravel 配置邮件发件人_Jenkins中配置自动化测试项目
- idea中修改git账号和密码
- ccf-csp认证历年真题(持续更新)
- javascript html coffee 编辑器,CoffeeCup HTML Editor (html编辑器)
- 开源自动化运维工具_批量与重复运维压力如何破?了解一下这款自动化运维工具...
- (7)Spring框架----面向切面编程(一个简单的约定游戏)
- Centos--swoole平滑重启服务