数值微积分与方程求解
1.数值微分与数值积分
数值微分
MATLAB提供了求向前差分的函数diff,其调用格式有三种:
- dx=diff(x):计算向量x的一阶向前差分,dx(i)=x(i+1)-x(i),i=1,2,…,n-1。
- dx=diff(x,n):计算向量x的n阶向前差分。例如,diff(x,2)=diff(diff(x))
- dx= diff(A, n, dim):计算矩阵A的n阶差分,dim=1时(默认状态),按列计算差分;dim=2,按行计算差分。
数值积分
- 基于自适应辛普森方法
[l, n]=quad(filename, a, b, tol, trace) - 基于自适应 Causs-Lobatto方法
[I, n]=quadI(filename, a, b, tol, trace)
其中, filename是被积函数名;a和b分别是定积分的下限和上限,积分限[a,b]必须是有限的,不能为无穷大(lnf);tol用来控制积分精度,默认时取tol=10-6; trace控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,默认时取trace=0;返回参数I即定积分的值,n为被积函数的调用次数。
- 基于全局自适应积分方法
I=integral(filename, a, b)
其中,I是计算得到的积分; filename是被积函数;a和b分别是定积分的下限和上限,积分限可以为无穷大。
- 基于自适应高斯-克朗罗德方法
[I,err]=quadgk(filename, a, b)
其中,err返回近似误差范围,其他参数的含义和用法与quad函数相同。积分上下限可以是无穷大(-Inn或Inf),也可以是复数。如果积分上下限是复数,则 quadgk函数在复平面上求积分。
- 基于梯形面积法则求积分
trapz(x,y),y是x的函数。
多重积分
求二重积分的数值解:
- I=integral(filename, a, b, c, d)
- I=quad2d(filename, a, b, c, d)
- I=dblquad(filename, a, b, c, d, tol)
求三重积分的数值解:
- I=integral3(filename, a, b, c, d, e, f)
- I=triplequad(filename, a, b, c, d, e, f, tol)
2.线性方程组求解
- 直接法:以矩阵初等变换为基础,可以求得方程组的精确解;占用的内存空间大、程序实现较为复杂;一般适合求解低阶稠密线性方程组。
- 迭代法:从绐定初始值逐步逼近精确解,的过程,求解过程占用存储空间小、程序设计简单;适用于求解大型稀疏矩阵线性方程组;要考虑算法的收鲛性。
线性方程组的直接解法
(1)利用左除运算符的直接解法
Ax=b ——x=A\b
注意:如果矩阵A是奇异的或接近奇异的,则MATLAB会给出警告信息。
(2)利用矩阵分解求线性方程组
- LU分解
将一个矩阵分解为一个上三角矩阵和一个下三角矩阵的乘积
[L,U]=lu(A):产生一个上三角阵U和一个变换形式的下三角阵L,使之满足A=LU。注意,这里的矩阵A必须是方阵。
[L,U,P]=lu(A):产生一个上三角阵U和一个下三角阵以及个置换矩阵P,使之满足PA=LU。同样,矩阵A必须是方阵。
- QR分解
- Cholesky分解
线性方程组的迭代解法
- 雅克比(Jacobi)迭代法
定义y为方程组的解,n为迭代次数,A为系数矩阵,b为列向量,x0为初值,ep为要求的范数。
- 高斯-赛德尔(Gauss-Serdel)迭代法
3.线性方程组应用举例
平面桁架结构受力分析问题
小行星运行轨道计算问题
4.非线性方程求解与函数极值计算
非线性方程数值求解
(1)单变量非线性方程求解
函数的调用格式为:
x=fzero(filename,x0)
其中, filename是待求根方程左端的函数表达式,x0是初始值。
(2)非线性方程组的求解
函数的调用格式为:
x=fsolve(filename, X0, option)
其中,x为返回的近似解, filename是待求根方程左端的函数表达式,x0是初值, option用于设置优化工具箱的优化参数,可以调用optimset函数来完成。
函数极值的计算
MATLAB只能求最小值,若求最大值,可以转化为求-f(x)的最小值。
(1)无约束最优化问题
求最小值的函数:
[xmin,fmin]=fminbnd(filename,x1,x2,option)
[xmin,fmin]=fminsearch(filename,x0,option)
[xmin,fmin]=fminunc(filename,x0,option)
其中, filename是定义的目标函数。第一个函数的输入变量x1、x2分别表示被研究区间的左、右边界。后两个函数的输入变量x0是一个向量,表示极值点的初值。 option为优化参数,可以通过 optimise函数来设置
(2)有约束最优化问题
求有约束条件下最小值的函数为
[xmin,fmin]=fmincon(filename, x0, A, b, Aeq, beq. Lbnd, Ubnd, NonF, option)
其中,xmin、fmin、 filename、x0和 option的含义与求最小值函数相同。其余参数为约束条件,包括线性不等式约束、线性等式约束、x的下界和上界以及定义非线性约束的函数。如果某个约束不存在,则用空矩阵来表示。
5.常微分方程数值求解
常微分方程数值求解的一般概念
- 单步法:在计算yn+1时只用到前一步的yn,因此在有了初值之后就可以逐步往下计算,其代表是龙格-库塔( RUnge-Kutta)法
- 多步法:在计算yn+1时,除了用到前一步的值yn之外,还要用到yn-p(p=1,2,…,k,k>0)的值即前面的k步,其代表就是亚当斯(Adams)法。
常微分方程数值求解函数
函数调用格式为:
[t, y]=solver(filename, tspan, y0, option)
其中,t和y分别给出时间向量和相应的数值解; solver为求常微分方程数值解的函数; filename是定义f(t,y)的函数名,该函数必须返回一个列向量; tspan形式为[t0,tf],表示求解区间;y0是初始状态向量;option是可选参数,用于设置求解属性。
常微分方程数值求解函数的统一命名格式:
odennxx
其中,ode是 Ordinary Differential Equation的缩写,是常微分方程的意思;nn是数字,代表所用方法的阶数;xx是字母,用于标注方法的专门特征。
刚性问题
有一类常微分方程,其解的分量有的变化很快,有的变化很慢,且相差悬殊,这就是所谓的刚性问题(stiff)。
刚性问题调用ode函数中将xx设置为s。
6.常微分方程应用举例
Lotka-Volterra模型
Lotka-Volterra改进模型
数值微积分与方程求解相关推荐
- 6.数值微积分与方程求解
数值微分与数值积分 % 数值积分 (有函数式版本定积分) 方法1 % [I,n]=quad(filename,a,b,tol,trace) 基于自适应辛普森方法 % [I,n]=quadl(file ...
- 6. 数值微积分与方程求解
文章目录 A 数值微分与数值积分 A.a数值微分(diff) A.b 数值积分 B 线性方程组求解 B.a 直接法 B.b 迭代法 B.c 线性方程组应用举例 C 非线性方程求解与函数极值计算 C.a ...
- 专题六数值微积分与方程求解
文章目录 一.数值微分与数值积分 1.数值微分 2.数值积分 二.线性方程求解 1.直接法 2.迭代解法 3.直接法与迭代法的对比 三.非线性方程求解与函数极值计算 1.非线性方程数值求解 2.函数极 ...
- 数学建模之matlab软件学习06——专题六 数值微积分与方程求解
#本文章仅用于记录本人学习过程,当作笔记来用,如有侵权请及时告知,谢谢! 6.1 数值微分与数值积分 数值微分 6.2 6.3 线性方程组应用举例: 平面桁架结构受力分析问题 小行星运行轨道计算问题: ...
- matlab积分练习,matlab练习之数值微积分和方程数值求解
一.符号积分 求符号积分函数:int 格式:int(f,x,a,b) 功能:计算定积分 格式:int(f,x) 功能:计算不定积分 使用int函数之前,先用syms声明x是符号变量 例: 代码: sy ...
- matlab整理符号表达式,[2018年最新整理]MATLAB符号运算与符号方程求解.ppt
[2018年最新整理]MATLAB符号运算与符号方程求解 MATLAB符号计算 1 符号对象 2 符号微积分 3 级 数 4 符号方程求解 9.1 符号对象 9.1.1 建立符号对象 1.建立符号变量 ...
- 偏微分方程数值解法python_Python数值计算----------求解简单的偏微分方程
很多物理现象的都可以用方程来描述,比如热传导与物质扩散可以用扩散方程来描述,流体的流动可以用NS方程描述等等.如果能够将这些偏微分方程求解出来,就可以来对很多物理现象进行仿真,现在工程中的仿真软件都是 ...
- 【计算方法】数值微积分
0.WARNINGS 本文章主要适用于计算方法代码的实现参考,由于本人是python究极小白,为了实验课速成了一些内容,因此会包含较多的暴力解法orz,如有代码错误.可优化的地方欢迎各位大佬指出,感激 ...
- 011 符号计算-积分、微分、极限、积分变换、方程求解
符号微积分计算 0.符号函数 >>syms x >> f(x)=2*xf(x) = 2*x>> f(1)ans = 2 >> g=2*x %g只是符号变 ...
最新文章
- mac os 安装linux驱动,教程:Ubuntu 14.04安装Mac OS X主题
- js 中 document.createEvent的用法-转载
- 使用response的writer
- 模拟天天酷跑游戏java_cocos2d 简单高仿天天酷跑游戏
- iPhone 13系列要上全新配色:全系存储容量调整
- 帆软报表属性设计基础
- mysql 存储过程 光标_mysql存储过程 光标
- cmake 学习笔记(三)
- 文本编辑器android,Editor简单通用文本编辑器
- Android:ViewPage使用教程
- sqliteman安装时出现The following packages have unmet dependencies: libqtgui4 : Depends: libpng12-0错误
- Spring-AOP模块的Advised分析
- 游戏人机交互接口的设计
- netlogon启动后停止_【漏洞通报】微软NetLogon提权漏洞
- sql server 函數
- Access violation reading location 0xccccccc0运行异常的解决方法
- 【原创】java+swing+mysql教室管理系统设计与实现
- Hexo+Buttterly+Github Pages构建个人博客
- html超级玛丽游戏源码,超级玛丽HTML5源代码学习------(一)
- HDU - 1248 寒冰王座 (完全背包
热门文章
- rasp 系统_RASP 完爆 WAF 的5大理由!
- 别头疼了,你要的算法和数据结构的学习路线来了!
- gz rar zip 7z bz2 tgz压缩率比较,以及做一些简单的关于压缩包介绍
- 蓝牙(三)蓝牙协议的初始化
- yolov5-4.0转caffe记录
- 为Linux内核text段计算SHA1摘要以检测篡改
- html5手机远程控制电脑,教你怎么用手机远程控制电脑
- 黑客如何入侵你的汽车?
- ci框架 反向代理配置_docker-compose配置Nginx反向代理禅道
- NTL(Number Theory Library)源码剖析(2)__基本运算