目录

  • 一、数值微分与数值积分
  • 二、线性方程组求解
  • 三、线性方程组应用举例
  • 四、非线性方程求解与函数极值计算
  • 五、常微分方程数值求解
  • 六、常微分方程应用举例

一、数值微分与数值积分

1、数值微分


如果去掉极限h趋向于0的过程,就得到在x0点处的、以h为步长的:

如果h步长充足小,则得到在x0点处的、以h为步长的:

总结:
函数f(x)在x0处的微分接近于函数在该点的差分,f(x)在x0点的导数接近于函数在该点的差商。

好,明白了上面的概念,现在来看数值微分的实现:

看向前差分函数diff()函数

举例:
sort(2pirand(15000),2*pi);是求0 - 2pi开区间的随机数,并按照从小到大排列。
diff(y)./diff(x)是求差商向量。
注:sin(x)的导数是con(x),因此我们这里用con(x)验证sin(x)导数的正确性。
注:右侧的曲线是两条重合的曲线。
注:norm()求理论值与近似值的差。可以看出误差很小。

2、数值积分

根据牛顿莱布尼茨公式求原函数比较困难(对于有些函数),但是我们可以使用下面的办法,:

MATLAB提供了相应的求积分的函数:
方法一quad()
方法二quadl()

举例:
从下例可以看出:
quad()执行61次,quadl()执行48次,因此quadl()执行效率更高。
注:右侧的程序是用于对左侧的 atan()函数适用于求反正切的。

方法三integral()

举例:

方法四quadgk()

举例:

方法五梯形积分法
(有时,人们并不知道函数是什么,只有实验测定的一组样本点和样本值,上述函数使用不了了怎么办?matlab提供了梯形积分法)


举例:
注:I2是对I1的验证

多重定积分的求解

举例:

二、线性方程组求解

主要有下面两种方法:

1、直接法

直接解法一:

例:

直接解法二

本节重点介绍LU分解:

LU分解方法有两种
lu()函数


举例:

2、接下来讲迭代法
先用一个例子说明迭代法的基本思想

介绍两种迭代法:

雅可比迭代法

看雅可比矩阵的具体实现方法:
新建一个函数文件:
function [y,n] = jacobi(A,b,x0,ep)
A,b,x0,ep是输入参数,分别代表系数矩阵、右端列向量、迭代的初值和精度。
y,n为输出参数,分别代表方程的解和迭代次数。
diag(diag(A))是求对角矩阵D
L是A的下三角阵
U是A的上三角阵
y是第一次迭代结果
在循环中,直到计算精度y - x0满足所要求的ep为止。

接下来介绍高斯赛德尔迭代法
对雅可比迭代法的公式进行改进:

接下来看高斯赛德尔迭代实现的方法(编程和雅可比相似)

举例:
(分别用雅可比和高斯赛德尔进行计算,以进行对比)

可以看出,一般情况下高斯赛德尔更快,但是也不一定,某些情况下雅可比更快,比如:
(下例高斯赛德尔并不收敛,计算失败)

在选择这两种方法中的哪一个时,应该选择可以做到收敛的方法,选择更快的方法。

三、线性方程组应用举例

本节看两个例子:

1、第一个例子

以E为例进行受力分析:

同理,分析出其他点:

我们来编程,以求出各f:
(注:求出的结果中,正数表示拉力,负数表示压力)

2、看第二个例子

我们的目的是 求出各个ai

这个线性方程组又等价于:

我们把各个xi 、yi代入上面这个系数矩阵,就可以求出各个ai。
编程:

四、非线性方程求解与函数极值计算

对于二次的非线性方程你能够解,那对于5次的呢?你可以借助于MATLAB工具。
1、单变量非线性方程求解 - fzero函数

举例:
从下图可知,当初值取-5和1时,可以较好的获得方程f(x)的根
(我们看右边的这个图,可以估计出方程的根在x0 = -5和x0 = 1附近)
如果我们取x0 = 0.1所得到的X3就不对,这是初值没有选对。
怎么选取初值,要根据我们的具体问题来进行分析。

初值的选取很重要。
在看一个例子:
我们知道下面方程的根为±1对吧,我们故意让初值为-0.02 ~ 0.25,并把初值和fzero()求得的方程的根画出一个图表如右图所示。可以看出fzero()执行的是一个数值搜索过程,搜索结果依赖于函数特性和我们指定的初值。

2、非线性方程组的求解 - fsolve()

我们用flove()求上面的例1:
(注:Display,off表示不显示中间结果)
(这里可以发现,使用flove()求得的x3求对了,和x2一样)

fslove()函数功能更强,可以求解非线性方程组,例题如下:
注:f([1,1,1])展示了匿名函数的调用方法。
f(x)命令是将求得的解代入f函数,说明此处函数值很接近于0,说明所求的根还是很准确的。

3、函数极值的计算
(包括极大值和极小值,或者说最大值和最小值)
(MATLAB只可以求最小值,如果你想要求最大值,那可以求-f(x)的最小值)

下面我们讨论有约束最优化问题、无约束最优化问题。
先看无约束最优化问题:

无约束最优化问题有下面三种计算方式:
fminbnd()求开区间x1,x2的最小值
fminsearch()基于单纯形算法,求多元函数极小值点和极小值
fminunc()基于拟牛顿法,求多元函数极小值点和极小值

例:

下面看有约束最优化问题:


有约束最优化问题求解 - fmincon()

例:
A和b是定义线性不等式约束;
lb是解的下界;

最小值应用问题实例:
(读题可以看出,这是一个无约束最小值问题)


向量a表示五个工厂位置的横坐标;向量b表示五个工厂位置的纵坐标。
向量c表示平均每周向五个工厂运输的次数。
注:x(1)代表x,x(2)代表y。
最后求出坐标为(19.8143,41.1247),最小运输举例为1.3618e+03

再来看一例(在例5的基础上增加一个约束条件)
(下图h是约束条件)

在命令行窗口输入如下命令:

五、常微分方程数值求解

1、常微分方程数值求解的一般概念


看常微分方程求解函数 - solver()


不懂?没关系,我们来看例子。
[t,y] = odr23(f,[0,10],2); 用于求数值解;
y1 = sqrt(t+1) + 1;用于求精确解。
然后将二者绘制出来曲线图形(数值解(蓝色虚线)、精确解(红色实线)),二者进行对比,发现重合。

再来看一个例子:


看一类特殊常微分方程,即刚性问题:
(非刚性算法也可以计算,只是计算时间太长)


解这个问题,我们先来用非刚性算法来求解:
发现时间很短,才0.0057秒,要是增加lamda呢?如下图,发现时间增加到了2.9秒。

好,我们来是使用刚性算法:
(ode15s中的s代表专门求解刚性问题的函数)
仍然取lamda为le-5,发现时间减小到了0.07秒,计算的点数也大大减少。

六、常微分方程应用举例

Lotka-Volterra模型
本节未写。
详见https://www.icourse163.org/learn/CSU-1002475002?tid=1450231442#/learn/content?type=detail&id=1214375645&cid=1218036488

07 -MATLAB数值微积分与方程求解相关推荐

  1. 6.数值微积分与方程求解

    数值微分与数值积分 % 数值积分 (有函数式版本定积分) 方法1 % [I,n]=quad(filename,a,b,tol,trace)  基于自适应辛普森方法 % [I,n]=quadl(file ...

  2. 数学建模之matlab软件学习06——专题六 数值微积分与方程求解

    #本文章仅用于记录本人学习过程,当作笔记来用,如有侵权请及时告知,谢谢! 6.1 数值微分与数值积分 数值微分 6.2 6.3 线性方程组应用举例: 平面桁架结构受力分析问题 小行星运行轨道计算问题: ...

  3. 数值微积分与方程求解

    1.数值微分与数值积分 数值微分 MATLAB提供了求向前差分的函数diff,其调用格式有三种: dx=diff(x):计算向量x的一阶向前差分,dx(i)=x(i+1)-x(i),i=1,2,-,n ...

  4. 6. 数值微积分与方程求解

    文章目录 A 数值微分与数值积分 A.a数值微分(diff) A.b 数值积分 B 线性方程组求解 B.a 直接法 B.b 迭代法 B.c 线性方程组应用举例 C 非线性方程求解与函数极值计算 C.a ...

  5. 专题六数值微积分与方程求解

    文章目录 一.数值微分与数值积分 1.数值微分 2.数值积分 二.线性方程求解 1.直接法 2.迭代解法 3.直接法与迭代法的对比 三.非线性方程求解与函数极值计算 1.非线性方程数值求解 2.函数极 ...

  6. matlab积分练习,matlab练习之数值微积分和方程数值求解

    一.符号积分 求符号积分函数:int 格式:int(f,x,a,b) 功能:计算定积分 格式:int(f,x) 功能:计算不定积分 使用int函数之前,先用syms声明x是符号变量 例: 代码: sy ...

  7. matlab将求解sin隐式解,Matlab隐式符号方程求解和赋值

    近日处理了一个隐式方程的求解,由于方程含有较多的未知数,而且这些参数均是跟实验相关的一些参数,所以,必须得到需要求解的解与 这些参数之间的一个表达式.之前是考虑用的Maple推导求解了该隐私方程,求解 ...

  8. matlab用方程的解赋值,Matlab隐式符号方程求解和赋值

    近日处理了一个隐式方程的求解,由于方程含有较多的未知数,而且这些参数均是跟实验相关的一些参数,所以,必须得到需要求解的解与 这些参数之间的一个表达式.之前是考虑用的Maple推导求解了该隐私方程,求解 ...

  9. matlab 洛伦兹方程,求解洛伦兹方程的MATLAB程序

    求解洛伦兹方程的MATLAB程序 clear;a=0;b=100;h1=0.0001;h2=0.1;ya=5;2;10;sigma=10;gamma=28;rho=8/3;z=f2(sigma,gam ...

  10. MATLAB 数值微积分

    文章目录 前言 一.Differentiation 微分 二.Polynomial Differentiation 多项式微分 三.Representing Polynomials in MATLAB ...

最新文章

  1. FPGA设计——全局曝光CMOS图像采集与USB2.0显示
  2. 迷宫问题最短捷径c语言深搜,迷宫问题 C语言实现(深搜)
  3. Rxjs--创建操作符
  4. fast.ai 深度学习笔记:第一部分第一课
  5. NeurIPS 2020 | 利用像素级别循环一致性解决领域自适应语义分割问题
  6. 在AndroidStudio中配置Gradle进行 “动态编译期间,根据远程服务器地址 ,生成多类安装包”
  7. java统计文件字符数量_Java统计文件注释个数和注释字符数
  8. 教育|关于本科生科研的一些想法和建议
  9. oracle分组后合并(wm_concat)其中一个字段
  10. 做了一天的程序,很困啊,明天还要赶着去上课
  11. 软件技术文档编写_如何编写好的软件技术文档
  12. Windows server 2016 安装oracle
  13. delphi2007 indy发邮件报could not load ssl library问题的解决
  14. 让我感动的100对古装情侣
  15. 修改表结构ALTER TABLE
  16. git checkout -b 报错
  17. ABP+AdminLTE+Bootstrap Table权限管理系统第五节--WBEAPI及SwaggerUI
  18. javaweb学习笔记2(jquery的使用,以及常用的方法,选择器,过滤器)
  19. 【nmon】nmon :服务器性能结果报告分析 —— 报表参数详解
  20. mail命令发送html格式的电子邮件

热门文章

  1. 元旦快乐代码html,好看的元旦节祝福留言代码:元旦快乐,踩个顶个走人
  2. Windows10禁用Adobe Creative Cloud开机自启动
  3. hive教程:启动hive客户端
  4. 正定矩阵与半正定矩阵定义性质与理解
  5. Windows中内存泄漏检测工具vld简介及使用
  6. “Network”游戏棋人机对弈的设计与实现(二)—判断步骤是否合法
  7. 开源 syslog 日志系统 scribe
  8. 一道有趣的OSPF配置实例——OSPF P2P接口妙用
  9. 编写REG注册表文件
  10. SCCM配置PXE启动