matlab中怎么计算程序运行时间

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

Matlab中计算函数运行时间的三种方法:

1、tic和toc组合

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

tic

函数

toc

复制函数代码,当代码遇到tic时Matlab自动开始计时,运行到toc时自动计算此时与最近一次tic之间的时间。

2、etime(t1,t2)并和clock配合

计算t1,t2之间的时间差,它是通过调用windows系统的时钟进行时间差计算得到运行时间的,应用的形式:

t1=clock;

函数

t2=clock;

etime(t2,t1)

3、cputime函数来完成

使用方法和etime相似,只是这个是使用cpu的主频计算的,和前面原理不同,使用格式如下:

t0=cputime

函数

t1=cputime-t0

为了避免定义函数,使用函数句柄,计算还是很快的:

clear all;clc;

fx=@(x)sqrt(1+(1767x^2-368x+274698)^2);

s1=quadl(fx,0,1)

s1 =

18257

tic;

clear;clc;

f=350; %故障时产生的零件损失费用(元/件)

t=30; %进行检查的费用(元/次)

d=3000; %发现故障进行调节使恢复正常的平均费用(元/次)

k=1400; %未发现故障时更换一把新刀具的费用(元/次)

b=546732;

ll=1000;

j=1;

% syms x;

f1=@(x)normpdf(x,60748,34396)x;

for u=500:700

%这些可以放到外循环

F=normcdf(u,60748,34396);

% f2=int(f1,x,0,u);

f2=quad(f1,0,u);%用数值积分

ff=double(f2);

a=1/F(ff+u(1-F));

c=ab/(a+b);

for n=1:u

L=k/u+t/n+(n+1)f/(2c)+d/c;

if L<ll

ll=L;

u1=u;

n1=n;

end

end

end

ll,u1,n1

toc;

几个方面:

1、最大的问题是循环体里面的 pause(01),尤其是里面那一层循环。

2、很多赋值语句后面应该加分号,避免显示。

3、数组预置(对于这段代码而言不是很重要)。

里面那层的pause是在这样的循环结构中:

for k=1:10;

    i=i+1;

    for x=2:z-1;

        for y=2:z-1;

粗略估算一下,会执行101818次,每次01秒,仅这一句就会耗时324秒。

删除上述pasue之后,在我的电脑上运行大约需要27秒。

有多处赋值语句的尾部没有使用分号,导致数组在命令窗口中回显,这也会占用很多时间。那些语句就不一一列举了,修改后的代码如下:

clear all;clc;

z=20;i=0;

a=cat(3,rand(z),rand(z),zeros(z));

b=a(:,:,1);%HSI

c=a(:,:,2);%生物量

imh=image(cat(3,c,zeros(z),zeros(z)));%先生成一个图像

for k=1:10;

    i=i+1;

    for x=2:z-1;

        for y=2:z-1;

            d{x,y}=[b(x-1,y-1),b(x-1,y),b(x-1,y+1);

                b(x,y-1),b(x,y),b(x,y+1);

                b(x+1,y-1),b(x+1,y),b(x+1,y+1)];%表示周围8个HSI

            e{x,y}=[c(x-1,y-1),c(x-1,y),c(x-1,y+1);

                c(x,y-1),1,c(x,y+1);

                c(x+1,y-1),c(x+1,y),c(x+1,y+1)];%表示周围8个生物量 

            while c(x,y)>0&&min(min(e{x,y}))<1&&min(min(d{x,y}))~=0&&c(x,y)~=0%如果当前位置(x,y)生物量大于0,并且

                %该位置周围8个网格生物量有小于环境容纳量,

                %并且,周围8个网格最小适宜度值不等于0

                %并且,当前位置生物量不等于0的情况

                [m,n]=find(d{x,y}==max(max(d{x,y})));%获取周围8个网格最大的HSI,确定迁移方向

                if isequal([m,n],[x,y])%如果目标单元是当前位置,即m,n和x,y相等

                    c(m,n)=c(x,y);%那么生物量不迁移

                    set(imh,'cdata',cat(3,c,zeros(z),zeros(z)));

                    break

                else

                    if c(m,n)<1%判定目标单元生物量是否饱和,若不饱和

                        c(m,n)=c(m,n)+c(x,y);%目标单元生物量等于已有+迁移的(x,y)的生物量

                        if c(m,n)>1

                            c(m,n)=1;

                        end

                        c(x,y)=1-c(m,n);

                        if c(x,y)>=0

                            c(x,y)=0;%迁移过后命令该点生物量等于零

                            set(imh,'cdata',cat(3,c,zeros(z),zeros(z)));

                            break 

                        else 

                            c(x,y)=c(m,n)-1;

                        end

                    else

                        d{x,y}(m,n)=0;%若饱和了,重新选择方向,命令目标单元HSI=0重新选择方向

                    end

                end

            end

              % pause(01)

        end

    end

    set(imh,'cdata',cat(3,c,zeros(z),zeros(z)));

    pause(01)

end

i

这样修改之后,在我的电脑上运行至需要大约13秒。如果再把最后的一个pause删掉,则仅需大约03秒。

matlab计算if,只要指明变量,然后指明方程,未知数和限制条件matlab命令行窗口中输入symsx ,按回车键可以得到答案,这样是很快的

MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。

MATLAB是matrix&laboratory两个词的合,意为矩阵工厂(矩阵实验室),软件主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。

以上就是关于matlab中怎么计算程序运行时间全部的内容,包括:matlab中怎么计算程序运行时间、matlab 计算定积分怎么运行很慢,在线等解答! 我的程序如下: syms x S2=sqrt(1+(1.767*x^2-3.68*x+2.74、Matlab中自编的一个程序运行时间太长,求大神指点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存