matlab学习

发现老师的课程需要连续听下来,并且非常适应写博客的笔记咩。

我们把matlab知识点放在后面,把数学思想放在前面。

状态方程以及解法

欧拉法

龙格库塔算法

龙格-库塔算法哟用来求非线性常微分方程的解,是一种隐式或显式迭代法。
相比于欧拉法总是带有误差,龙格-库塔算法的误差相对较小,而且可以实现通过提高阶数更高精度的拟合。
昆图库塔算法
计划用Manim做个可视化出来。

Details

首先,对于一个任意的关于$x$、$\frac{dx}{dt}$和时间$t$的方程

对于该问题的四阶龙格库塔RK4迭代方程由如下方程给出:

其中

$k_i(i=1,2,3,4)$是斜率。

  • $k_1$是$t_n$开始时的斜率
  • $K_2$是时间段中点的斜率,通过欧拉法采用斜率$k_1$来决定$x$在点$t_n+\frac{h}{2}$的值
  • $k_3$同理,不过用的是$k_2$
  • $k_4$是时间段终点$t_n+h$的斜率,用$k_3$确定它的值
    $h$是时间间隔,也就是步长。

我们干了什么?

在求$k_i(i=1,2,3,4)$时,我们通过不同的步长,求出了四个斜率。
通过这四个斜率,对其进行加权平均,即$\frac{k_1+2k_2+2k_3+k_4}{6}$,然后再乘以$h$,就得到了预测的下一个值$x_{n+1}$

效果怎样?

这个算法对四个斜率的加权平均然后预测下一个点的位置,它带来的误差将比欧拉法更好(欧拉法需要选取更小的步长以抑制误差问题),个人认为龙格库塔法是欧拉法的升级版。

不过,龙格库塔算法仍然存在一定的误差。实际上,上面讲的是四阶的龙格库塔。如果想要更好的拟合,可以选择更高阶的龙格库塔,不过四阶的精度已经不错了,再高阶的龙格库塔会导致计算量偏大。

使用场景

可以用于计算系统的稳态和暂态。
计算量大,烧钱,适用于不缺钱的项目

ode函数

当变化比较剧烈时用小步长计算,比较稳定时换用比较大的步长计算。
这将引出matlab中的ode45。它提供了变步长(variable-step)和定步长(fixed-step)两种类型。

matlab知识

dsolve

解微分方程用dsolve(),数值方程用solve()
注意里面的等号要用==

ode函数

咕咕咕

global

类似于python.

pause()

相当于delay_ms()
如果不加参数,就相当于按任意键继续运行。

@

“取函数地址符”
虽然matlab里没有指针

heaviside()

单位阶跃函数(Heaviside step function)

ezplot(function, [start, end])

画图

1
2
syms t
ezplot(heaviside(t), [-1, 1])

sign()

符号函数,

Dirac()

冲激函数(Pluse Function),狄拉克函数

作者

槎游星海

发布于

2023-03-24

更新于

2023-08-25

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×