用matlab怎么计算程序运行的时间

用matlab怎么计算程序运行的时间,第1张

在计时开始点加一个tic

在计时结束点加一个toc

即可。

例如:

tic

m

=

magic(100);

toc

结果:

Elapsed

time

is

0102184

seconds

1、tic和toc组合(使用最多的)

计算tic和toc之间那段程序之间的运行时间,它的经典格式为

[plain] view plain copy 在CODE上查看代码片派生到我的代码片

tic

。。。。。。。。。。

toc

换句话说程序,程序遇到tic时Matlab自动开始计时,运行到toc时自动计算此时与最近一次tic之间的时间。这个有点拗口,下面我们举个例子说明

[plain] view plain copy 在CODE上查看代码片派生到我的代码片

% by dynamic of Matlab技术论坛

% see also >

第一步:首先打开MATLAB命令窗口,输入matlabpool open ,或者把这句加入程序开头。

第二步:主要是两种:parfor模式和spmd模式。两种模式的应用都很简单。

parfor其实就是parallel+for简化而来,就是把原来程序中的for循环中的关键字for改为parfor就行。

spmd 自己help就会了。

首先、仿真时间要设置好,时间太长了就会一直等着。

第二、变步长解法器也要设置

第三、变步长的最大值也要设置当然越小越好,但是太小了会仿真的时间很长,就会一直在等着。

仿真的时间很重要,有一次做斜坡函数如果仿真时间不够长,都无法到达自己想要的值,只能仿真一部分。

用户在Type后面的第一个下拉选项框中指定仿真的步长选取方式,可供选择的有Variable-step(变步长)和Fixed-step(固定步长)方式。变步长模式可以在仿真的过程中改变步长,提供误差控制和过零检测。固定步长模式在仿真过程中提供固定的步长,不提供误差控制和过零检测。用户还可以在第二个下拉选项框中选择对应模式下仿真所采用的算法。

变步长模式解法器有:ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb和discrete。

ode45:缺省值,四/五阶龙格-库塔法,适用于大多数连续或离散系统,但不适用于刚性(stiff)系统。它是单步解法器,也就是,在计算y(tn)时,它仅需要最近处理时刻的结果y(tn-1)。一般来说,面对一个仿真问题最好是首先试试ode45。

ode23:二/三阶龙格-库塔法,它在误差限要求不高和求解的问题不太难的情况下,可能会比ode45更有效。也是一个单步解法器。

ode113:是一种阶数可变的解法器,它在误差容许要求严格的情况下通常比ode45有效。ode113是一种多步解法器,也就是在计算当前时刻输出时,它需要以前多个时刻的解。

ode15s:是一种基于数字微分公式的解法器(NDFs)。也是一种多步解法器。适用于刚性系统,当用户估计要解决的问题是比较困难的,或者不能使用ode45,或者即使使用效果也不好,就可以用ode15s。

ode23s:它是一种单步解法器,专门应用于刚性系统,在弱误差允许下的效果好于ode15s。它能解决某些ode15s所不能有效解决的stiff问题。

ode23t:是梯形规则的一种自由插值实现。这种解法器适用于求解适度stiff的问题而用户又需要一个无数字振荡的解法器的情况。

ode23tb:是TR-BDF2的一种实现, TR-BDF2 是具有两个阶段的隐式龙格-库塔公式。

discrtet:当Simulink检查到模型没有连续状态时使用它。

步长参数:对于变步长模式,用户可以设置最大的和推荐的初始步长参数,缺省情况下,步长自动地确定,它由值auto表示。

Maximum step size(最大步长参数):它决定了解法器能够使用的最大时间步长,它的缺省值为“仿真时间/50”,即整个仿真过程中至少取50个取样点,但这样的取法对于仿真时间较长的系统则可能带来取样点过于稀疏,而使仿真结果失真。一般建议对于仿真时间不超过15s的采用默认值即可,对于超过15s的每秒至少保证5个采样点,对于超过100s的,每秒至少保证3个采样点。

Initial step size(初始步长参数):一般建议使用“auto”默认值即可。

仿真精度的定义(对于变步长模式)

Relative tolerance(相对误差):它是指误差相对于状态的值,是一个百分比,缺省值为1e-3,表示状态的计算值要精确到01%。

Absolute tolerance(绝对误差):表示误差值的门限,或者是说在状态值为零的情况下,可以接受的误差。如果它被设成了auto,那么simulink为每一个状态设置初始绝对误差为1e-6。

Mode(固定步长模式选择)

Multitasking:选择这种模式时,当simulink检测到模块间非法的采样速率转换,它会给出错误提示。所谓的非法采样速率转换指两个工作在不同采样速率的模块之间的直接连接。在实时多任务系统中,如果任务之间存在非法采样速率转换,那么就有可能出现一个模块的输出在另一个模块需要时却无法利用的情况。通过检查这种转换,Multitasking将有助于用户建立一个符合现实的多任务系统的有效模型。

使用速率转换模块可以减少模型中的非法速率转换。Simulink提供了两个这样的模块:unit delay模块和zero-order hold模块。对于从慢速率到快速率的非法转换,可以在慢输出端口和快输入端口插入一个单位延时unit delay模块。而对于快速率到慢速率的转换,则可以插入一个零阶采样保持器zero-order hold。

Singletasking:这种模式不检查模块间的速率转换,它在建立单任务系统模型时非常有用,在这种系统就不存在任务同步问题。

Auto:这种模式,simulink会根据模型中模块的采样速率是否一致,自动决定切换到multitasking和singletasking。

输出选项

Refine output:这个选项可以理解成精细输出,其意义是在仿真输出太稀松时,simulink会产生额外的精细输出,这一点就像插值处理一样。用户可以在refine factor设置仿真时间步间插入的输出点数。

产生更光滑的输出曲线,改变精细因子比减小仿真步长更有效。精细输出只能在变步长模式中才能使用,并且在ode45效果最好。

Produce additional output:它允许用户直接指定产生输出的时间点。一旦选择了该项,则在它的右边出现一个output times编辑框,在这里用户指定额外的仿真输出点,它既可以是一个时间向量,也可以是表达式。与精细因子相比,这个选项会改变仿真的步长。

Produce specified output only:它的意思是让simulink只在指定的时间点上产生输出。为此解法器要调整仿真步长以使之和指定的时间点重合。这个选项在比较不同的仿真时可以确保它们在相同的时间输出。

设置时间轴

ts=datenum('1999-01-01 00:00:00');% 开始时间

tf=datenum('1999-01-01 00:20:00');% 结束时间

y=rand(21,1);% 给出你的y值,我这里随机给了

t=linspace(ts,tf,21);% 21min为总共的时间

plot(t,y);

% 调用datetick函数直接生成时间坐标

datetick('x','HH:MM','keepticks')

使用matlab也可以很方便的绘制时间序列,但是对于时间轴的设置却比较困难。例如minor ticks的设置和标签位置剧中要求的设置。因此使用GMT绘制时间序列。主要是为了方便次级月标签的绘制。

第一节:时间序列

1绘制时间序列,手动调整坐标刻度,一年为一个主刻度(main ticks),一月为一个次刻度(minor ticks),并且绘制Y坐标的grid。

具体步骤如下:

1首先是准备好规则数据。如果数据格式是matlab处理和存储的矩阵格式,使用MATLAB则需要提取出来时间序列,并保存为ASCII格式数据。注意此时的数据不带有时间信息,只是简单的一列数据而已,我们将在在后面添加时间信息。

2为sigma0数据添加时间列[h2]

这个方法不是固定的,可以自己编程实现,也可以使用已有的简单程序。注意时间数据的格式是固定的几种。

如果数据不多的话,可以使用Windows自带的excel添加。

本例子的最终数据格式如下:第一列是时间,第二列到第四列是sigma0的属性值,(time,sigma0Ku,sigma0C,sigma0C-Ku)。

3 GMT绘图

将三列sigma0的数据放到一幅图上,即同时绘制三条时间序列,且使用同一个坐标系。横坐标为年月,具体设置为:年为大刻度,月为小刻度,界限设置为199311-2004121。竖坐标为sigma0的值,范围可当已知,设置为0-15。

本例子参考GMT Cookbook中的程序21:

GMT中Time格式需要按照数据的时间格式设置。在GMT的帮助文件中可以找到,有格里高利,ISO之类。还要区分输入的时间格式和输出的时间格式。

我们选择例21中使用的时间标准dd-o-yy。(GMT有细致的时间设置参数,注意在这一步别出错误。)

注意:数据文件中时间序列的日期坐标可以和标注的日期坐标格式不一样,但是时间上要一致。

以上就是关于用matlab怎么计算程序运行的时间全部的内容,包括:用matlab怎么计算程序运行的时间、如何看matlab程序运行时间'、如何利用MATLAB并行计算缩短程序运行时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10063993.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存