任何的系统都包括输入与输出,小到一片最小的代码片,大道航天工业系统,都是由最基本的输入输出与中间环节构成。如何处理中间的环节就显得异常重要。现如今的系统大多为数字仿真系统,也就是大多使用计算机来处理输入与反馈信号。也信号又分为连续信号与离散信号,今天我们来谈一谈利用计算机仿真来处理信号的几种典型的方法及实现的MATLAB代码。
(1)数值积分法:
我们知道,从数学的角度上考虑,y(k+1)=y(k)+∫f(t,y(t))dt这样得来的确实是最优解,如果一直这样计算下去,得到的永远都是最精确地值。但是我们的计算机却无法做到这样的计算,因为两时刻之间的斜率为变化值。于是我们利用简化的方式去代替积分,只要采样时刻取得足够小,我们就可以理所当然的人为t(k)时刻与t(k+1)时刻之间是一条直线,于是我们就认为两者之间的斜率就是不变的值。这样看来就是好办多了只要曲积分为t(k)时刻的斜率,就解决了。下面为实例实现代码:
已知:y’ = -y; y(0) = 1;

function y = euler(y0,h,f)
y = y0 + h*f;
%代码如下 :
h = 0.1;        %步长确定了精度;
y0 = 1;         %确定初值
t = 0:h:1;
n = length(t);
numy = zeros(1,n);
f = -y0;
numy(1) = 0;
for i = 2:nnumy(i) = euler(y0,h,f);y0 = numy(i);f = -y0;
end
realy = exp(-t);
plot(t,realy,t,numy,'ro-')
legend('真值','欧拉')
<注意:有的版本内euler函已经是新版本MATLAB的内部构造函数,无法再次定义使用,并且更改函数M文件是要保证函数名与被调用的函数名相同,不然代码会无法运行,你也无法调试出来错误!>

结果如下:
可见,这种方法仿真的结果随着时间的推移误差会越来越大,并且精度会随着步长的变大而差,但是这种方法提供了最基本的思想,所以一直是教学的典例。
(二)梯形法:y(k+1)=y(k)+(1/2)*h[f(tk,yk) + f(t(k+1),y(k+1))],以上·公式可以看出一个问题,就是我要得到y(k+1)的值,利用梯形法,就必须先要的到y(k+1)的值,似乎变成了鸡生蛋的问题,这里我们利用欧拉方式先进行预测,然后结合梯形法,这样一来,梯形法也就是一种改进的欧拉方法,只是提高了精度。下面看看他是如何提高精度的,我们利用泰勒展开将t(k+1)时刻的值利用泰勒展开得到了如下的值:y(t+1) = y(k) + hy’(k) + (1/2!)h^2y”(t)·········
我们利用欧拉公式,得到了前两项,其舍去了2次方及其以后的部分,因此其截断误差也就是O(h^2),相比下,梯形法虽然只是改变了其去斜率的方式,但是截断误差却提高了一个等级。
(三)龙哥-库塔法:
我们利用提梯形法提高了精度,但是如果仿真的时间过长,误差还是会一步一步的变差,提高精度的精髓在于如何设计积分中的斜率,于是引入龙哥-库塔法:
梯形法中我们去斜率我y(k)与y(k+1)的斜率的平均,也就是取得二者同样的权重,现在用同样的方法去两点之间的点,只要给点的斜率赋合理的权重,就可以很好的提高截断误差的阶次即精度。那么如何巧合的得提高截断误差?这里不得不佩服龙格的逆行思维,他采用倒推方式,先设置每个点的斜率的加权为一个未知数,带着未知数去推导,这样一来,将得到的y(k+1)时刻的值与泰勒展开进行比较,一一对比,从而得到了每一阶次所应该设定的权重。我们最多应用的也就是四阶龙格-库塔法。其取点的权重正好是(1 2 2 1),而二阶的龙格-库塔也正好与梯形法对应上。其实现代码:

function dy = ff(y0)
dy = -y0;
function funge4(y0,h)
k1 = h*ff(y0);
k2 = h*ff(y0 + k1/2);
k3 = h*ff(y0 + k3/2);
k4 = h*ff(y0 + k3);
yk_1 = y0 + (k1 + 2*k2 + 2*k3 + k4)/6;
%下面为实现的main函数:
y0 = 1;
h = 0.1;
t = 0:h:1;
n = length(t);
runge4_y = zeros(1,n);
runge4_y(1) = 1;
for i = 2:nrunge4_y(i) = runge4(y0,h);y0 = runge4_y(1);
end
realy = exp(-t);
plot(t,realy,t,runge4_y,'-o')

结果如下:
从结果看出来几乎完全重合,也就是说明精度提高了很多。

几种数字仿真的物理意义与代码实现相关推荐

  1. 【数字信号处理】序列傅里叶变换 ( 傅里叶变换物理意义 | 反应信号在整个数字角频率上的能量分布 )

    文章目录 一.傅里叶变换物理意义 一.傅里叶变换物理意义 x(n)x(n)x(n) 序列 的 傅里叶变换 X(ejω)X(e^{j\omega})X(ejω) 的 物理意义 : 傅里叶变换 : 根据 ...

  2. 【数字信号处理】序列傅里叶变换(FT)的物理意义

    FT的物理意义 首先,回顾一下连续傅里叶变换的物理意义:任何信号都可以用不同频率的正弦信号叠加而得到(可能不是很准确,核心意思不变). x ( n ) = 1 2 π ∫ − π π X ( e j ...

  3. 奇异值的物理意义是什么?强大的矩阵奇异值分解(SVD)及其应用

    作者:郑宁 链接:https://www.zhihu.com/question/22237507/answer/53804902 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  4. 频谱中负频率的物理意义(二)

    1.频率的概念就是从机械旋转运动来的,定义为角速度,对于周期运动,角速度也就是角频率.通常 θ以反时针为正,因此转动的正频率是反时针旋转角速度,负频率就是顺时针旋转角速度.这就是它的物理意义,正.负号 ...

  5. 傅立叶变换物理意义解析进阶

    1.为什么要进行傅里叶变换,其物理意义是什么? 傅立叶变换是数字信号处理领域一种很重要的算法.要知道傅立叶变换算法的意义,首先要了解傅立叶原理的意义.傅立叶原理表明:任何连续测量的时序或信号,都可以表 ...

  6. 漫谈高数——泰勒级数的物理意义

    全世界有3.14 % 的人已经关注了 数据与算法之美 高等数学干吗要研宄级数问题? 是为了把简单的问题弄复杂来表明自己的高深? No,是为了把各种简单的问题/复杂的问题,他们的求解过程用一种通用的方法 ...

  7. 【转】卷积的本质及物理意义(全面理解卷积)

    转自:卷积的本质及物理意义(全面理解卷积)_彼岸花-CSDN博客_卷积的物理意义 卷积的本质及物理意义 提示:对卷积的理解分为三部分讲解1)信号的角度2)数学家的理解(外行)3)与多项式的关系 1 来 ...

  8. 漫谈高数曲线积分的物理意义

    漫谈高数曲线积分的物理意义 来源:CSDN libochun3217的专栏 编辑:Gemini 从函数到定积分,曲线积分到环路积分. 定积分的求解---牛顿.拉布尼茨公式有什么几何意义? 简单的说,因 ...

  9. 漫谈高数 特征向量物理意义

    什么是特征向量,特征值,矩阵分解 [1. 特征的数学意义] 我们先考察一种线性变化,例如x,y坐标系的椭圆方程可以写为x^2/a^2+y^2/b^2=1,那么坐标系关于原点做旋转以后,椭圆方程就要发生 ...

  10. 傅里叶变换,其物理意义是什么?(转)

    1 .为什么要进行傅里叶变换,其物理意义是什么? 傅立叶变换是数字信号处理领域一种很重要的算法.要知道傅立叶变换算法的意义,首先要了解傅立叶原理的意义.傅立叶原理表明:任何连续测量的时序或信号,都可以 ...

最新文章

  1. 异常-----Java compiler level does not match解决方法
  2. OpenStack发布最新版本Ocata
  3. Python:用字典建立一个通讯录,向字典中添加和删除通讯人信息,查询某个人的信息,然后输出通讯录中所有人的信息。
  4. nodejs操作mongodb增删改查
  5. jackson java网络接口_java~jackson实现接口的反序列化
  6. 算算奖学金(洛谷P1051题题解,Java语言描述)
  7. 孤独的个人在社会中生存应掌握的基本健康技能(个人分析)
  8. 网络限流linux,DockOne微信分享(一九八):容器网络限流实践
  9. 通用设备的动态DMA映射
  10. JavaScript学习指南 修订版pdf
  11. 使用arcgis、matlab与R语言GD包进行地理探测器 批量运行,并导出探测结果
  12. Typora基本技巧
  13. 计算共形几何讲座笔记
  14. 各位观众老爷不如点进来随便评论几句QUQ
  15. 如何把项目上传到Gitee(全网最细)
  16. 微信小程序(uniapp)获取用户位置信息及选择位置
  17. 利用Latex如何输入角度符号
  18. LAB4 PartA 多处理器支持和协作多任务处理
  19. 图(八):强连通分量
  20. 二叉查找树的创建及遍历

热门文章

  1. 尚硅谷 硅谷新闻_如果每个人都遥不可及,硅谷会损失什么
  2. nds模拟器电脑版使用教程
  3. 使用计时器setInterval实现倒计时
  4. uni-app android权限
  5. 照片审核处理工具_不需要Photoshop,这5款在线处理图片工具能帮你好好处理照片!...
  6. 2013八大免费杀毒软件排行榜
  7. 网上购物系统c语言代码,网上购物系统源代码要怎么搭建才是最好的?
  8. 【疫情防控毕业设计源码】精品微信小程序社区疫情防控+后台管理系统|前后分离VUE[包运行成功]
  9. eclipse启动tomcat内存溢出解决方式
  10. 【Pytorch with fastai】第 1 章:你的深度学习之旅