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
2syms t
ezplot(heaviside(t), [-1, 1])
sign()
符号函数,
Dirac()
冲激函数(Pluse Function),狄拉克函数