当前位置:文档之家› 提高matlab代码运行效率

提高matlab代码运行效率

提高matlab代码运行效率
提高matlab代码运行效率

提高matlab代码运行效率

Matlab是一种解释性语言,追求的是方便性、灵活性以及交互性,因此在快速性上要比C语言这种性能强劲著称的稍逊一筹。然而,通过一些手段,我们也能让MATLAB语言快起来,甚至和C差不多了!

1可行方法

1.1循环矢量化

MATLAB变量的基本类型是矩阵,当对矩阵的每个元素循环处理时,运算速度很慢。利用MATLAB提供的用于矢量化操作的函数,把循环矢量化,这样既可以提高编程效率,也可以提高程序的执行效率。下面给出一个循环的例子:

i = 0;

for n = 0 : 0.1 : 1000

I = i+1;

y(i) = cos(n);

end

那么我们可以矢量化为:

n = 0 : 0.1 : 1000;

y = cos(n);

我们可以用tic和toc函数来查看上述各代码运行的时间,可以发现,把数组看作一个整体,进行操作后,执行效率提高约300倍。

另外,在必须使用多重循环的情况下,建议在循环的外环执行循环次数少的,内环执行循环次数多的,这样也可以显著提高程序执行速度。

下面再举一个例子

n = 100;

A(1:1000,1:1000) = 13;

C(1:1000,1) = 15;

D(1:1000,1) = 0;

for k = 1:n

D(:) = 0;

tic

for i = 1:1000

for j = 1:1000

D(i) = D(i) + A(i,j)*C(j);

end

end

t1(k) = toc;

%------------------

D(:) = 0;

tic

D = A*C;

t2(k) = toc;

end

u = t1./t2;

u(u<0) = [];

plot(u)

p = mean(u)

t1、t2分别代表用for循环编程和矩阵化编程计算矩阵乘向量所用时间,u代表时间的比值。u(u<0) = [];是认为t1不可能小于t2,所以去掉不可能出现的情况。然后画出图形计算平均值。

经多次试验结果大致相同,其中一次结果如下:

p = 9.6196

------------t1时间是t2的十倍左右。

1.2在使用数组或矩阵之前先定义维数

MATLAB中的变量在使用之前不需要明确地定义和指定维数。但当未预定义数组或矩阵的维数时,当需赋值的元素下标超出现有的维数时,MA TLAB 就为该数组或矩阵扩维一次,这样就会大大降低程序的执行效率。因此,在使用数组或矩阵之前,预定义维数可以提高程序的执行效率。

1.3 对矩阵元素使用下标或者索引操作

在MA TLAB中,矩阵元素的引用可用两个下标来表示。例如:A(i,j) 表示矩阵的第i 行第j列的元素;A(1:k,j)表示矩阵A的第j列的前k个元素;A(:,j) 表示矩阵的第j列的所有元素。求矩阵A的第j列元素的平均值的表达式为mean(A(:,j))。

1.4用函数代替脚本文件

因为每次调用MATLAB的脚本文件都需要将不必要的中间变量加载到内存中,每执行一次,就加载一次。函数在调用时被编译成了伪代码,只需要加载到内存一次。当多次调用同一个函数时会运行快一些。因此尽量多使用函数文件而少使用脚本文件,也是提高执行效率的一种方法。

1.5用Mex文件编写循环代码

Matlab提供了与C和C++的接口,那么我们可以在用C或C++语言编写耗时的循环代码,然后通过接口程序在Matlab中转换成dll文件,这就是我们所要的Mex文件,可以在MATLAB环境下直接执行。通过这种方法可以极大地提高计算速率。一般来说,C-MEX 文件的执行速度是相同功能的M文件执行速率的20~40倍。

1.6尽可能利用matlab内部提供的函数

因为matlab内部提供的函数绝对是各种问题的最优算法,那写程序都是他们大师级人物写出来的,程序应该说相当高效,有现成的为什么不用那!这个原则就不用实际的程序测试了。

1.7给数组或矩阵预分配内存

特别是使用大型数组或矩阵时,Matlab进行动态内存分配和取消时,可能会产生内存碎片,这将导致大量闲置内存产生,预分配可通过提前给大型数据结构预约足够空间来避免这个问题。

这一点原则是极其重要的,以至于在编写m程序时编辑器会给出提示“'ver' might be growing inside a loop.Consider prealloacting for speed.”

clear

n = 50;

m = 1000;

for k = 1:n

A = [];

tic

A(1:m,1:m) = 3;

for i = 1:m

A(i,i) = i;

end

t1(k) = toc;

%------------

A = [];

tic

for j = 1:m

A(j,j) = j;

end

t2(k) = toc;

end

t2(t1>10^9) = [];

t1(t1>10^9) = [];

plot([t1;t2]')

t1、t2分别表示预先分配空间和循环中分配空间的时间,下图上面一条t2、一条t1

1.8 内存管理函数和命令

1)Clear variablename:从内存中删除名称为variablename的变量。

2)Clear all:从内存中删除所有的变量。

3)Save:将指令的变量存入磁盘。

4)Load:将save命令存入的变量载入内存。

5)Quit:退出MATLAB,并释放所有分配的内存。

6)Pack:把内存中的变量存入磁盘,再用内存中的连续空间载回这些变量。考虑到执行效率问题,不能在循环中使用。

1.9 节约内存的方法

1)避免生成大的中间变量,并删除不再需要的临时变量。

2)当使用大的矩阵变量时,预先指定维数并分配好内存,避免每次临时扩充维数。

3)当程序需要生成大量变量数据时,可以考虑定期将变量写到磁盘,然后清除这些变量。当需要这些变量时,再重新从磁盘加载。

4)当矩阵中数据极少时,将全矩阵转换为稀疏矩阵。

1.10其他经验

1)多重循环让内层循环次数多

在必须使用多重循环时下,如果两个循环执行的次数不同,则在循环的外环执行循环次数少的,内环执行循环次数多的,这样可以提高速度。

n=1000;

A = ones(1000)*13;

for k=1:n

tic

for i=1:10

for j=1:1000

A(i,j)=A(i,j)*15;

end

end

t1(k)=toc;

tic

for i=1:1000

for j=1:10

A(i,j)=A(i,j)*16;

end

end

t2(k)=toc;

end

t2(t1>10^9)=[];

t1(t1>10^9)=[];

t1(t2>10^9)=[];

t2(t2>10^9)=[]; %去除外界因素影响所产生的寄点

plot(1:size(t1,2),t1,'r',1:size(t1,2),t2)

由这个时间图可以看出for循环的嵌套顺序对于速度是有影响的,虽然相对来说差别不是很大。

2.Performance Acceleration

关于什么是“Performance Acceleration”请参阅matlab的帮助文件。我只简要的将其规则总结如下7条:

1)只有使用以下数据类型,matlab才会对其加速:

logical,char,int8,uint8,int16,uint16,int32,uint32,double

而语句中如果使用了非以上的数据类型则不会加速,如:

numeric,cell,structure,single,function handle,java classes,user classes,int64,uint64

2)matlab不会对超过三维的数组进行加速。

3)当使用for循环时,只有遵守以下规则才会被加速:

a、for循环的范围只用标量值来表示;

b、for循环内部的每一条语句都要满足上面的两条规则,即只使用支持加速的数据类型,只使用三维以下的数组;

c、循环内只调用了内建函数(build-in function)。

4)当使用if、elseif、while和switch时,其条件测试语句中只使用了标量值时,将加速运行。

5)不要在一行中写入多条操作,这样会减慢运行速度。即不要有这样的语句:x = https://www.doczj.com/doc/ec13507961.html,; for k=1:10000, sin(A(k)), end;

6)当某条操作改变了原来变量的数据类型或形状(大小,维数)时将会减慢运行速度。

7)应该这样使用复常量x = 7 + 2i,而不应该这样使用:x = 7 + 2*i,后者会降低运行速度。”

8)“尽量用向量化的运算来代替循环操作。

最常用的使用vectorizing技术的函数有:All、diff、ipermute、permute、reshape、ueeze、y、find、logical、prod、shiftdim、sub2ind、cumsum、ind2sub、ndgrid、repmat、sort、sum 等。”优先使用matlab内建函数,将耗时的循环编写进MEX-File中以获得加速。

3.MATLAB代码矢量化指南

这里列出了《MATLAB代码矢量化指南(译)》

3.1基本技术

1)MATLAB索引或引用

在MATLAB中有三种基本方法可以选取一个矩阵的子阵。它们分别是下标法,线性法和逻辑法(subscripted,linear, and logical)。

如果你已经熟悉这个内容,请跳过本节

1、下标法

非常简单,看几个例子就好。

A = 6:12;

A([3,5])

ans =

8 10

A([3:2:end])

ans =

8 10 12

A =

[11 14 17;

12 15 18;

13 16 19];

A(2:3,2)

ans =

15

16

2、线性法

二维矩阵以列优先顺序可以线性展开,可以通过现行展开后的元素序号来访问元素。

A =

[11 14 17;

12 15 18;

13 16 19];

A(6)

ans =

16

A([3,1,8])

ans =

13 11 18

A([3;1;8])

ans =

13

11

18

3、逻辑法

用一个和原矩阵具有相同尺寸的0-1矩阵,可以索引元素。在某个位置上为1表示选取元素,否则不选。得到的结果是一个向量。

A = 6:10;

A(logical([0 0 1 0 1]))

ans =

8 10

A =

[1 2

3 4];

B = [1 0 0 1];

A(logical(B))

ans =

1 4

2)数组操作和矩阵操作

对矩阵的元素一个一个孤立进行的操作称作数组操作;而把矩阵视为一个整体进行的运算则成为矩阵操作。MATLAB运算符*,/,\,^都是矩阵运算,而相应的数组操作则是.*, ./, .\, .^ A=[1 0 ;0 1];

B=[0 1 ;1 0];

A*B % 矩阵乘法

ans =

0 1

1 0

A.*B % A和B对应项相乘

ans =

0 0

0 0

3)布朗数组操作

对矩阵的比较运算是数组操作,也就是说,是对每个元素孤立进行的。因此其结果就不是一个“真”或者“假”,而是一堆“真假”。这个结果就是布朗数组。

D = [-0.2 1.0 1.5 3.0 -1.0 4.2 3.14];

D >= 0

ans =

0 1 1 1 0 1 1

如果想选出D中的正元素:

D = D(D>0)

D =

1.0000 1.5000 3.0000 4.2000 3.1400

除此之外,MATLAB运算中会出现NaN,Inf,-Inf。对它们的比较参见下例Inf==Inf返回真

Inf<1返回假

NaN==NaN返回假

同时,可以用isinf,isnan判断,用法可以顾名思义。在比较两个矩阵大小时,矩阵必须具有相同的尺寸,否则会报错。这是你用的上size和isequal,isequalwithequalnans(R13及以后)。

4)从向量构建矩阵

在MATLAB中创建常数矩阵非常简单,大家经常使用的是:

A = ones(5,5)*10

但你是否知道,这个乘法是不必要的?

A = 10;

A = A(ones(5,5))

A =

10 10 10 10 10

10 10 10 10 10

10 10 10 10 10

10 10 10 10 10

10 10 10 10 10

类似的例子还有:

v = (1:5)';

n = 3;

M = v(:,ones(n,1))

M =

1 1 1

2 2 2

3 3 3

4 4 4

5 5 5

事实上,上述过程还有一种更加容易理解的实现方法:

A = repmat(10,[5 5]);

M = repmat([1:5]', [1,3]);

其中repmat的含义是把一个矩阵重复平铺,生成较大矩阵。更多详细情况,参见函数repmat 和meshgrid。

5)相关函数列表

ones 全1矩阵

zeros 全0矩阵

reshape 修改矩阵形状

repmat 矩阵平铺

meshgrid 3维plot需要用到的X-Y网格矩阵

ndgrid n维plot需要用到的X-Y-Z...网格矩阵

filter 一维数字滤波器,当数组元素前后相关时特别有用。

cumsum 数组元素的逐步累计

cumprod 数组元素的逐步累计

eye 单位矩阵

diag 生成对角矩阵或者求矩阵对角线

spdiags 稀疏对角矩阵

gallery 不同类型矩阵库

pascal Pascal 矩阵

hankel Hankel 矩阵

toeplitz Toeplitz 矩阵

3.2扩充的例子

6)作用于两个向量的矩阵函数

假设我们要计算两个变量的函数F

F(x,y) = x*exp(-x^2 - y^2)

我们有一系列x值,保存在x向量中,同时我们还有一系列y值。我们要对向量x上的每个点和向量y上的每个点计算F值。换句话说,我们要计算对于给定向量x和y的所确定的网格上的F值。

使用meshgrid,我们可以复制x和y来建立合适的输入向量。然后可以使用第2节中的方法来计算这个函数。

x = (-2:.2:2);

y = (-1.5:.2:1.5)';

[X,Y] = meshgrid(x, y);

F = X .* exp(-X.^2 - Y.^2);

如果函数F具有某些性质,你甚至可以不用meshgrid,比如 F(x,y) = x*y ,则可以直接用向量外积

x = (-2:2);

y = (-1.5:.5:1.5);

x'*y

在用两个向量建立矩阵时,在有些情况下,稀疏矩阵可以更加有效地利用存储空间,并实现有效的算法。我们将在第8节中以一个实例来进行更详细地讨论.

7)排序、设置和计数

在迄今为止讨论过的例子中,对向量中一个元素的计算都是独立于同一向量的其他元素的。但是,在许多应用中,你要做的计算则可能与其它元素密切相关。例如,假设你用一个向量x来表示一个集合。不观察向量的其他元素,你并不知道某个元素是不是一个冗余元素,并应该被去掉。如何在不使用循环语句的情况下删除冗余元素,至少在现在,并不是一个明显可以解决的问题。

解决这类问题需要相当的智巧。以下介绍一些可用的基本工具

max 最大元素

min 最小元素

sort 递增排序

unique 寻找集合中互异元素(去掉相同元素)

diff 差分运算符[X(2) - X(1), X(3) - X(2), ... X(n) - X(n-1)]

find 查找非零、非NaN元素的索引值

union 集合并

intersect 集合交

setdiff 集合差

setxor 集合异或

继续我们的实例,消除向量中的多余元素。注意:一旦向量排序后,任何多余的元素就是相邻的了。同时,在任何相等的相邻元素在向量diff运算时变为零。这是我们能够应用以下策略达到目的。我们现在在已排序向量中,选取那些差分非零的元素。

% 初次尝试。不太正确!

x = sort(x(:));

difference = diff(x);

y = x(difference~=0);

这离正确结果很近了,但是我们忘了diff函数返回向量的元素个数比输入向量少1。在我们的初次尝试中,没有考虑到最后一个元素也可能是相异的。为了解决这个问题,我们可以在进行差分之前给向量x加入一个元素,并且使得它与以前的元素一定不同。一种实现的方法是增加一个NaN。

% 最终的版本。

x = sort(x(:));

difference = diff([x;NaN]);

y = x(difference~=0);

我们使用(:)运算来保证x是一个向量。我们使用~=0运算,而不用find函数,因为find 函数不返回NaN元素的索引值,而我们操作中差分的最后元素一定是NaN。这一实例还有另一种实现方式:

y=unique(x);

后者当然很简单,但是前者作为一个练习并非无用,它是为了练习使用矢量化技术,并示范如何编写你自己的高效代码。此外,前者还有一个作用:Unique函数提供了一些超出我们要求的额外功能,这可能降低代码的执行速度。

假设我们不只是要返回集合x,而且要知道在原始的矩阵里每个相异元素出现了多少个“复本”。一旦我们对x排序并进行了差分,我们可以用find来确定差分变化的位置。再将这个变化位置进行差分,就可以得到复本的数目。这就是"diff of find of diff"的技巧。基于以上的讨论,我们有:

% Find the redundancy in a vector x

x = sort(x(:));

difference = diff([x;max(x)+1]);

count = diff(find([1;difference]));

y = x(find(difference));

plot(y,count)

这个图画出了x中每个相异元素出现的复本数。注意,在这里我们避开了NaN,因为find不返回NaN元素的索引值。但是,作为特例,NaN和Inf 的复本数可以容易地计算出来:

count_nans = sum(isnan(x(:)));

count_infs = sum(isinf(x(:)));

另一个用于求和或者计数运算的矢量化技巧是用类似建立稀疏矩阵的方法实现的。这还将在第9节中作更加详细的讨论.

8)稀疏矩阵结构

在某些情况下,你可以使用稀疏矩阵来增加计算的效率。如果你构造一个大的中间矩阵,通常矢量化更加容易。在某些情况下,你可以充分利用稀疏矩阵结构来矢量化代码,而对于这个中间矩阵不需要大的存储空间。

假设在上一个例子中,你事先知道集合y的域是整数的子集,

{k+1,k+2,...k+n};即,

y = (1:n) + k

例如,这样的数据可能代表一个调色板的索引值。然后,你就可以对集合中每个元素的出现进行计数(构建色彩直方图?译者)。这是对上一节中"diff of find of diff"技巧的一种变形。现在让我们来构造一个大的m x n矩阵A,这里m是原始x向量中的元素数,n是集合y中的元素数。

A(i,j) = 1 if x(i) = y(j)

0 otherwise

回想一下第3节和第4节,你可能认为我们需要从x和y来构造矩阵A。如果当然可以,但要消耗许多存储空间。我们可以做得更好,因为我们知道,矩阵A中的多数元素为0,x 中的每个元素对应的行上只有一个值为1。

以下就是构造矩阵的方法(注意到y(j) = k+j,根据以上的公式):

x = sort(x(:));

A = sparse(1:length(x), x+k, 1, length(x), n);

现在我们对A的列进行求和,得到出现次数。

count = sum(A);

在这种情况下,我们不必明确地形成排序向量y,因为我们事先知道

y = 1:n + k.

这里的关键是使用数据,(也就是说,用x控制矩阵A的结构)。由于x在一个已知范围内取整数值,我们可以更加有效地构造矩阵。假设你要给一个很大矩阵的每一列乘以相同的向量。使用稀疏矩阵,不仅可以节省空间,并且要比在第5节介绍的方法更加快速. 下面是它的工作方式:

F = rand(1024,1024);

x = rand(1024,1);

% 对F的所有行进行点型乘法.

Y = F * diag(sparse(x));

% 对F的所有列进行点型乘法.

Y = diag(sparse(x)) * F;

我们充分利用矩阵乘法算符来执行大规模运算,并使用稀疏矩阵以防止临时变量变得太大。

9)附加的例子

下面的例子使用一些在本技术手册中讨论过的方法,以及其它一些相关方法。请尝试使用tic 和toc(或t=cputime和cputime-t),看一下速度加快的效果。>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

用于计算数组的双重for循环。

使用的工具:数组乘法

优化前:

A = magic(100);

B = pascal(100);

for j = 1:100

for k = 1:100;

X(j,k) = sqrt(A(j,k)) * (B(j,k) - 1);

end

end

优化后:

A = magic(100);

B = pascal(100);

X = sqrt(A).*(B-1); >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

用一个循环建立一个向量,其元素依赖于前一个元素使用的工具:FILTER, CUMSUM, CUMPROD

优化前:

A = 1;

L = 1000;

for i = 1:L

A(i+1) = 2*A(i)+1;

end

优化后:

L = 1000;

A = filter([1],[1 -2],ones(1,L+1)); >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

如果你的向量构造只使用加法或乘法,你可使用cumsum或cumprod函数。优化前:

n=10000;

V_B=100*ones(1,n);

V_B2=100*ones(1,n);

ScaleFactor=rand(1,n-1);

for i = 2:n

V_B(i) = V_B(i-1)*(1+ScaleFactor(i-1));

end

for i=2:n

V_B2(i) = V_B2(i-1)+3;

end

优化后:

n=10000;

V_A=100*ones(1,n);

V_A2 = 100*ones(1,n);

ScaleFactor=rand(1,n-1);

V_A=cumprod([100 1+ScaleFactor]);

V_A2=cumsum([100 3*ones(1,n-1)]); >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

向量累加,每5个元素进行一次:

工具:CUMSUM , 向量索引

优化前:

% Use an arbitrary vector, x

x = 1:10000;

y = [];

for n = 5:5:length(x)

y = [y sum(x(1:n))];

end

优化后(使用预分配):

x = 1:10000;

ylength = (length(x) - mod(length(x),5))/5;

% Avoid using ZEROS command during preallocation

y(1:ylength) = 0;

for n = 5:5:length(x)

y(n/5) = sum(x(1:n));

end

优化后(使用矢量化,不再需要预分配):

x = 1:10000;

cums = cumsum(x);

y = cums(5:5:length(x));

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

操作一个向量,当某个元素的后继元素为0时,重复这个元素:

工具:FIND, CUMSUM, DIFF

任务:我们要操作一个由非零数值和零组成的向量,要求把零替换成为它前面的非零数值。例如,我们要转换下面的向量:

a=2; b=3; c=5; d=15; e=11;

x = [a 0 0 0 b 0 0 c 0 0 0 0 d 0 e 0 0 0 0 0];

为:

x = [a a a a b b b c c c c c d d e e e e e e];

解(diff和cumsum是反函数):

valind = find(x);

x(valind(2:end)) = diff(x(valind));

x = cumsum(x); >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

将向量的元素累加到特定位置上

工具:SPARSE

优化前:

% The values we are summing at designated indices

values = [20 15 45 50 75 10 15 15 35 40 10];

% The indices associated with the values are summed cumulatively

indices = [2 4 4 1 3 4 2 1 3 3 1];

totals = zeros(max(indices),1);

for n = 1:length(indices)

totals(indices(n)) = totals(indices(n)) + values(n);

end

优化后:

indices = [2 4 4 1 3 4 2 1 3 3 1];

totals = full(sparse(indices,1,values));

注意:这一方法开辟了稀疏矩阵的新用途。在使用sparse命令创建稀疏矩阵时,它是对分配到同一个索引的所有值求和,而不是替代已有的数值。这称为"向量累加",是MATLAB 处理稀疏矩阵的方式。

4.建议

对于撰写高效MATLAB代码,我有下面一些建议:

1.虽然for-loop的速度有了很大改善,vectorization(向量化)仍旧是改善效率的重要

途径,尤其是在能把运算改写成矩阵乘法的情况下,改善尤为显著。

2.在不少情况下,for-loop本身已经不构成太大问题,尤其是当循环体本身需要较多的

计算的时候。这个时候,改善概率的关键在于改善循环体本身而不是去掉for-loop。

3.MATLAB的函数调用过程(非built-in function)有显著开销,因此,在效率要求较

高的代码中,应该尽可能采用扁平的调用结构,也就是在保持代码清晰和可维护的情况下,尽量直接写表达式和利用built-in function,避免不必要的自定义函数调用过

程。在次数很多的循环体内(包括在cellfun, arrayfun等实际上蕴含循环的函数)形成长调用链,会带来很大的开销。

4.在调用函数时,首选built-in function,然后是普通的m-file函数,然后才是function

handle或者anonymous function。在使用function handle或者anonymous function作为参数传递时,如果该函数被调用多次,最好先用一个变量接住,再传入该变量。这样,可以有效避免重复的解析过程。

5.在可能的情况下,使用numeric array或者struct array,它们的效率大幅度高于cell array

(几十倍甚至更多)。对于struct,尽可能使用普通的域(字段,field)访问方式,在非效率关键,执行次数较少,而灵活性要求较高的代码中,可以考虑使用动态名称的域访问。

6.虽然object-oriented从软件工程的角度更为优胜,而且object的使用很多时候很方便,

但是MATLAB目前对于OO的实现效率很低,在效率关键的代码中应该慎用objects。

7.如果需要设计类,应该尽可能采用普通的property,而避免灵活但是效率很低的

dependent property。如非确实必要,避免重载subsref和subsasgn函数,因为这会全面接管对于object的接口调用,往往会带来非常巨大的开销(成千上万倍的减慢),甚至使得本来几乎不是问题的代码成为性能瓶颈。

施工效率提升措施

施工效率提升措施 一、目的 为确保公用装置、净水装置高负荷、长周期、安全稳定运行,切实保障全厂生产装置连续稳定高负荷运行,特制本措施。 二、编制依据 (一)公司管理制度、程序文件、保证手册 (二)《建设项目工程总承包管理规范》GB/T50358-2005 三、提升措施 (一)组织管理措施 1.做好车间宣传动员工作,讲清形势、目标、任务,使职工人人 都行动起来,为装置连运目标的圆满实现贡献出自己的力量。 2.强化值班管理,由项目部领导带队,加强值班,保证检修力量, 及时协调配合解决生产装置出现的各种突发性事件,为生产装置连续平稳运行保驾护航。

3.抓好现场检修工作,严格执行票证管理,科学文明检修,做到 安全、质量、进度三同时,圆满完成各项检修任务。 4.抓好设备的日常维护保养,做好材料物资及备件的储备,为圆满 完成检修保运工作做好保障。 5.进一步树立服务意识、大局意识,提高检修效率,做到随叫随 到,对于大的、重点的、难干的检修项目,安全生产办主任及维护队队长要亲自旁站监督与指导工作,及时处理各种疑难杂症,做到大事化小,小事化了,保证生产装置的连续平稳运行。 6.设备的日常管理:对设备的运行状况做到全面的监控,通过对 设备巡检、维护保养、从设备的工艺参数的变化等方面,及时掌握设备的运行状况,提高设备预知检修水平。 7.做好设备的隐患排查:发现问题及时处理,消除跑、冒、滴、 漏,努力降低泄漏率,使设备始终处于良好的运行状态,为设备的长周期运行提供可靠的保证。 8.严格按照标准对吊车、叉车、焊机、堵漏设备等工器具进行检 查,保证工器具完好,做到工器具不带病上岗 (二)协调管理措施

matlab常用操作命令

matlab常用操作备忘(1)2007-11-30 22:01:06 分类: 北京理工大学 20981 陈罡 帮助朋友做几个数据的卷积的仿真,一用才知道,呵呵,发现对不住偶的导师了。。。好多matlab的关键字和指令都忘记了。特意收集回顾一下: (1)管理命令和函数 addpath :添加目录到MATLAB搜索路径 doc :在Web浏览器上现实HTML文档 help :显示Matlab命令和M文件的在线帮助 helpwin helpdesk :help 兄弟几个 lookfor :在基于Matlab搜索路径的所有M文件中搜索关键字 partialpath:部分路径名 8*) path :所有关于路径名的处理 pathtool :一个不错的窗口路径处理界面 rmpath :删除搜索路径中指定目录 type :显示指定文件的内容 ver :版本信息 version :版本号 web :打开web页 what :列出当前目录吓所有的M文件 Mat文件和 Mex文件 whatsnew :显示readme文件 which :显示文件位置 (2)管理变量和工作区 clear :从内存中删除所有变量,clear x y z是删除某个变量 disp :显示文本或数组内容 length :数组长度(最长维数) load :重新载入变量(从磁盘上) mlock :锁定文件,防止文件被错误删除 munlock :解锁文件 openvar :在数组编辑器中打开变量 pack :整理内存空间 save :保存变量到文件 8*) size :数组维数

who whos :列出内存变量 workspace :显示工作空间窗口 (3)管理命令控制窗口(command窗口) clc :清空命令窗口 echo :禁止或允许显示执行过程 format :设置输出显示格式 home :光标移动到命令窗口左上角 more :设置命令窗口页输出格式 (4)文件和工作环境 cd :改变工作目录 copyfile :复制文件 delete :删除文件和图形对象 diary :把命令窗口的人机交互保存到文件 dir :显示目录 edit :编辑文本文件 fileparts :返回文件的各个部分 fullfile :使用指定部分建立文件全名 inmem :返回内存(伪代码区)的matlab函数名 ls :在unix系统中列出目录(win中亦可) matlabroot :根目录 mkdir :新建目录 open :打开文件 pwd :显示当前目录 tempdir :返回系统临时目录的名字 tempname :随机给出一个临时字符串(可用作文件名) ! :直接调用操作系统command命令 (5)启动和推出matlab matlabrc :Matlab的启动M文件 exit quit :退出Matlab startup :运行matlab启动文件 (6)程序设计 builtin :从可重载方法中调用内置函数 eval :执行包含可执行表达式的字符串

matlab代码大全

MATLAB主要命令汇总 MATLAB函数参考 附录1.1 管理用命令 函数名功能描述函数名功能描述 addpath 增加一条搜索路径 rmpath 删除一条搜索路径 demo 运行Matlab演示程序 type 列出.M文件 doc 装入超文本文档 version 显示Matlab的版本号 help 启动联机帮助 what 列出当前目录下的有关文件 lasterr 显示最后一条信息 whatsnew 显示Matlab的新特性 lookfor 搜索关键词的帮助 which 造出函数与文件所在的目录 path 设置或查询Matlab路径 附录1.2管理变量与工作空间用命令 函数名功能描述函数名功能描述 clear 删除存中的变量与函数 pack 整理工作空间存 disp 显示矩阵与文本 save 将工作空间中的变量存盘 length 查询向量的维数 size 查询矩阵的维数 load 从文件中装入数据 who,whos 列出工作空间中的变量名 附录1.3文件与操作系统处理命令 函数名功能描述函数名功能描述 cd 改变当前工作目录 edit 编辑.M文件 delete 删除文件 matlabroot 获得Matlab的安装根目录 diary 将Matlab运行命令存盘 tempdir 获得系统的缓存目录 dir 列出当前目录的容 tempname 获得一个缓存(temp)文件 ! 执行操作系统命令 附录1.4窗口控制命令 函数名功能描述函数名功能描述 echo 显示文件中的Matlab中的命令 more 控制命令窗口的输出页面format 设置输出格式 附录1.5启动与退出命令 函数名功能描述函数名功能描述 matlabrc 启动主程序 quit 退出Matlab环境 startup Matlab自启动程序 附录2 运算符号与特殊字符附录 2.1运算符号与特殊字符 函数名功能描述函数名功能描述 + 加 ... 续行标志 - 减 , 分行符(该行结果不显示) * 矩阵乘 ; 分行符(该行结果显示) .* 向量乘 % 注释标志 ^ 矩阵乘方 ! 操作系统命令提示符 .^ 向量乘方矩阵转置 kron 矩阵kron积 . 向量转置 \ 矩阵左除 = 赋值运算 / 矩阵右除 == 关系运算之相等 .\ 向量左除 ~= 关系运算之不等 ./ 向量右除 < 关系运算之小于

提高VBA运行效率方法

提高VBA运行效率方法 速度问题一直是VBA程序值得关注的一个方面。当您编写了一个对大量数据进行操作的程序后,在运行时可能会发现程序运行得很慢,有的甚至达好几分钟,就像Excel应用程序已崩溃了一样。但当您发现程序确实在运行,并得到正确的结果后,您可能就会想到如何使程序更快的运行了。当然,代码运行速度慢可能是VBA程序的一个缺点,这也可能是程序语言本身的一个原因,但我们也可以找到一些方法优化VBA代码并使程序尽可能快的运行。 下面是我整理的一些优化VBA代码或提高程序运行速度的方法,有些方法是我们在编程中好的做法和应该养成的好习惯,希望能带给您一些有益的参考。高质量的程序和运行效率是需要不断实践,并在实践中不断总结和积累经验的,也希望您能将在编写程序过程中发现的一些优化方法介绍给大家共享。 1、尽量简化代码 通过简化代码,可以提高程序的性能。您可以将通用过程编写为子过程来调用。例如,假设有一个应用程序需要在不同的地方实现查找一定范围内的某个特殊条目,在一个没有简化代码的应用程序中,不同的过程可能需要应用各自的算法以实现在某个范围内查找某一条目,修改每个过程使其采用一个更有效的算法并不是一件很容易的事。而一个简化的程序则只有一个查找算法,即将该查找算法编写成通用的子程序,需要查找某个范围的过程都调用该子程序,通过在查找方法的子程序中优化查找算法,使得调用该方法的所有过程都享受性能提高所带来的好处。 另外,删除所有无关的代码,这在所录制宏中表现得尤为明显。在录制宏时,经常会产生一些与所实现的功能无关的代码,您可以将这些代码删除,以使得代码得以简化。 在下面将要讲到的设置对象变量代替长对象引用,使用With…End With语句、执行For Each…Next循环语句,根据程序环境尽量减少OLE引用,等等,均是简化代码的好方法。 2、强制声明变量 在VBE编辑器中的菜单“工具——选项”对话框中“编辑器”选项卡中,您应该始终保持“要求变量声明”复选框被选中,这样将在模块代码顶部出现Option Explicit语句,要求您在编写代码时对所有出现的变量均进行声明,这样,在使用变量时减少内存需求并加速性能。 (1)要节省内存资源,必须始终用特定的数据类型声明所有变量。如果不使用特定的数据类型声明变量,VBA 会创建Variant类型的变量,这将比任何其他数据类型要求更多的内存。 (2)清楚每种数据类型需要多少内存以及它可以存储的值的范围。除使用较小的数据类型会导致隐性转换的情况外,应始终使用尽可能小的数据类型。例如,因为Integer类型的变量将被转换成Long类型的变量,应该将那些存储整型值的变量声明为Long类型,而不是Integer类型。 (3)除非确实需要,应避免使用浮点数据类型。尽管Currency数据类型更大,但它比Single 数据类型快,因为Currency数据类型不使用浮点处理器。 (4)如果在一个过程中多次引用一个对象,可以创建对象变量,并将对该对象的引用指派给它。因为对象变量存储对象在内存中的位置,VBA将不必再次查找其位置。 (5)将对象变量声明为特定的类型(不是Object类型),以便利用早期绑定。 3、减少变量的作用范围并及时释放变量 主要是对象变量,在其使用完后,及时释放。例如, Dim TempObj As AnyObject,AnObj As AnyObject Set TempObj=New AnyObject Set AnObj=TempObj Set TempObj=Nothing …释放对象变量

浅谈提高露天煤矿大型设备运行效率的几点措施

龙源期刊网 https://www.doczj.com/doc/ec13507961.html, 浅谈提高露天煤矿大型设备运行效率的几点措施 作者:吴学华 来源:《商品与质量·学术观察》2012年第11期 摘要:本文作者针对目前我国露天煤矿的生产现状,详细分析了露天煤矿的大型设备运行中存在的效率低下问题,并针对此问题提出了如何才能提高露天煤矿大型设备生产效率的方法和措施。 关键词:露天煤矿大型设备运行效率 在目前社会飞速发展的今天,我国的煤炭需求在不断的逐渐增长,随之大型的露天煤矿也越来越多,那么如何提高露天煤矿大型设备运行效率,是当前的重要问题。目前,我国在建和投入生产的露天煤矿已经在35座以上,但是我国的露天煤矿发展比较晚,还欠缺管理经验技术,而且多数是国有或国有控股的企业,且大部分企业都是“摸着石头过河”,纷纷引进先进的大型采矿设备,而大型设备运行效率低,导致企业发展中期就出现了设备老化加剧、管理效能下降、企业发展后劲不足的现象,这个现象和我国的露天煤矿长远发展很是不协调。 随着国家对煤炭资源需求量的持续增加,露天煤矿产能越来越大,大部分露天煤矿产能达到了千万吨级。为了满足大型露天煤矿正常生产和持续稳定发展需求,生产厂家制造出的机电设备越来越先进,越来越大型化,机电设备验收性能测试就越发显得重要了。 提高露天煤矿大型设备运行效率的重要性露天煤矿的特点是开采能力大、回采率高、安全生产系数较高,但大型设备多,价格昂贵,设备投资盘子大,初期投资大,维修成本高。所以,如何改善生产作业条件,充分发挥大型设备的运行效率,是露天煤矿各项工作的重中之重,也是摆在每个管理者面前的课题,对于企业经济效益的提高以及增强企业长远发展具有十分重要的意义。 一、对于露天煤矿大型设备运行效率影响的因素 通过分析,我们得出影响露天煤矿大型设备运行效率的因素主要有:露天开采工艺流程、操作人员的熟练程度,穿爆、采掘、运输、排弃的工程质量,设备状态及维修质量,生产调度指挥等。 二、如何提高露天煤矿大型设备运行效率的措施 在露天煤矿的生产过程中,只有将人员、机器、管理等各方面协调统一,才可以使先进的大型设备发挥出最好的效能。

基于matlab的车牌号码识别程序代码

基于matlab的汽车牌照识别程序 摘要:本次作业的任务是设计一个基于matlab的汽车牌照识别程序,能够实现车牌图像预处理,车牌定位,字符分割,然后通过神经网络对车牌进行字符识别,最终从一幅图像中提取车牌中的字母和数字,给出文本形式的车牌号码。 关键词:车牌识别,matlab,神经网络 1 引言 随着我国交通运输的不断发展,智能交通系统(Intelligent Traffic System,简称ITS)的推广变的越来越重要,而作为ITS的一个重要组成部分,车辆牌照识别系统(vehicle license plate recognition system,简称LPR)对于交通管理、治安处罚等工作的智能化起着十分重要的作用。它可广泛应用于交通流量检测,交通控制于诱导,机场,港口,小区的车辆管理,不停车自动收费,闯红灯等违章车辆监控以及车辆安全防盗等领域,具有广阔的应用前景。由于牌照是机动车辆管理的唯一标识符号,因此,车辆牌照识别系统的研究在机动车管理方面具有十分重要的实际意义。 2 车辆牌照识别系统工作原理 车辆牌照识别系统的基本工作原理为:将摄像头拍摄到的包含车辆牌照的图像通过视频卡输入到计算机中进行预处理,再由检索模块对牌照进行搜索、检测、定位,并分割出包含牌照字符的矩形区域,然后对牌照字符进行二值化并将其分割为单个字符,然后输入JPEG或BMP格式的数字,输出则为车牌号码的数字。 3 车辆牌照识别系统组成 (1)图像预处理:对汽车图像进行图像转换、图像增强和边缘检测等。 (2)车牌定位:从预处理后的汽车图像中分割出车牌图像。即在一幅车辆图像中找到车牌所在的位置。 (3)字符分割:对车牌图像进行几何校正、去噪、二值化以及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像

提高电脑运行速度的方法

提高电脑运行速度的方法. 我给你介绍个简单的方法,主要就是清理庸余的垃圾。 两分钟就可以提高速度,简单易行,不需要专业的知识就可以 第一招:清除系统垃圾 轻松流畅上网你是否注意到你的电脑系统磁盘的可用空间正在一天天在减少呢?是不是像老去的猴王一样动作一天比一天迟缓呢? 没错!在Windows在安装和使用过程中都会产生相当多的垃圾文件,包括临时文件(如:*.tmp、*._mp)日志文件(*.log)、临时帮助文件(*.gid)、磁盘检查文件(*.chk)、临时备份文件(如:*.old、*.bak)以及其他临时文件。特别 是如果一段时间不清理IE的临时文件夹“Temporary Internet Files”,其中的缓存文件有时会占用上百MB的磁盘空间。这些LJ 文件不仅仅浪费了宝贵的磁盘空间,严重时还会使系统运行慢如蜗牛。这点相信你肯定忍受不了吧!所以应及时清理系统的LJ文件的淤塞,保持系统的“苗条”身材,轻松流畅上网!朋友来吧,现在就让我们一起来快速清除系统垃圾吧!! 下面是步骤很简单就两步! 在桌面上点鼠标右键,选择新建一个“记事本”,把下面的字复制进去,点“另存为”,把文件名定为“清除系统LJ.bat”就完成,记住后缀名一定要是.bat,好ok了!你的垃圾清除器就这样制作成功了!双击它就能很快地清理垃圾文件,大约一分钟不到。 PS. 要复制进去的字是见下(红色部分)

@echo off echo 正在清除系统垃圾文件,请稍等...... del /f /s /q %systemdrive%\*.tmp del /f /s /q %systemdrive%\*._mp del /f /s /q %systemdrive%\*.log del /f /s /q %systemdrive%\*.gid del /f /s /q %systemdrive%\*.chk del /f /s /q %systemdrive%\*.old del /f /s /q %systemdrive%\recycled\*.* del /f /s /q %windir%\*.bak del /f /s /q %windir%\prefetch\*.* rd /s /q %windir%\temp & md %windir%\temp del /f /q %userprofile%\cookies\*.* del /f /q %userprofile%\recent\*.* del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*" del /f /s /q "%userprofile%\Local Settings\Temp\*.*" del /f /s /q "%userprofile%\recent\*.*" echo 清除系统LJ完成! echo. & pause

基于matlab的计算器编程附代码

1.需求分析 本次的实验要求是设计一个计算器,主要功能如下: (1)实现基本数学运算(加减乘除等),而且要能进行混合运算 (2)实现部分函数功能,如求平方根、求倒数等 (3)能实现小数运算 界面与标准计算器界面类似 根据要求以及以前的学习情况,决定使用matlab进行编程。Matlab强大的计算功能以及便捷的GUI设计,可以较为简便的实现所要求的功能。按照要求,数据输入和输出支持小数点,支持四则混合运算,决定使用如下几个数据进行分析:(1+3)*5 Sqrt(4) 1/2 Sin4 用以检验是否可以进行加减乘除四则运算、平方根、倒数、正弦的运算。 2.程序设计 M atlab的程序设计较为简便,用GUI设计出一个计算器的模型,然后系统会自动生成一个框架,在框架中,写入每一个按键对应的程序就可以实现功能。 3.调式分析 编程的过程中遇到的问题不是很多,基本就是找要实现各个功能的子程序,通过上网和去图书馆,加上自己的编写,终于实现了实验要求的功能。但是有一点很重要,matlab不支持中文,所以从路径到文件名必须是全英文的,不然就无法识别。此外,给每个按键命名也是很重要的,不然在生成的程序框架里面,就无法识别各个按键的作用,编写程序的时候也就无法做到一一对应。 4.使用说明 程序的使用比较简单,由于是可视化界面,直接打开matlab,然后建立一个GUI 工程,再打开生成的fig文件,就是一个计算器的界面,直接按照市面上卖的计算器的

方法,按键使用即可。 5.测试结果 计算结果为20 4sqrt=2 Sin4结果为 1/2=0.5 经过计算,这些结果均与实际结果相吻合,计算器的功能实现的较为完好。 6.心得体会 本次试验由于不限制语言,于是计算功能强大,操作简便的matlab变成了首选,matlab的GUI设计,操作是较为简单的,首先建立一个GUI工程,然后用可视化界面,

数字图像处理MATLAB相关代码

1.图像反转 MATLAB程序实现如下: I=imread('xian.bmp'); J=double(I); J=-J+(256-1); %图像反转线性变换 H=uint8(J); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(H); 2.灰度线性变换 MATLAB程序实现如下: I=imread('xian.bmp'); subplot(2,2,1),imshow(I); title('原始图像'); axis([50,250,50,200]); axis on; %显示坐标系 I1=rgb2gray(I); subplot(2,2,2),imshow(I1); title('灰度图像'); axis([50,250,50,200]); axis on; %显示坐标系 J=imadjust(I1,[0.1 0.5],[]); %局部拉伸,把[0.1 0.5]内的灰度拉伸为[0 1] subplot(2,2,3),imshow(J); title('线性变换图像[0.1 0.5]'); axis([50,250,50,200]); grid on; %显示网格线 axis on; %显示坐标系 K=imadjust(I1,[0.3 0.7],[]); %局部拉伸,把[0.3 0.7]内的灰度拉伸为[0 1] subplot(2,2,4),imshow(K); title('线性变换图像[0.3 0.7]'); axis([50,250,50,200]); grid on; %显示网格线 axis on; %显示坐标系 3.非线性变换 MATLAB程序实现如下: I=imread('xian.bmp'); I1=rgb2gray(I); subplot(1,2,1),imshow(I1); title('灰度图像'); axis([50,250,50,200]); grid on; %显示网格线 axis on; %显示坐标系 J=double(I1); J=40*(log(J+1)); H=uint8(J);

如何提高建设项目管理运行效率的措施办法

如何提高建设项目管理运行效率的措施办法 【摘要】随着经济的迅速发展,各行各业也不断的壮大起来,其中工程建设行业的火热程度已悄然成为我们关注的重点,建设项目管理是工程建设开展的核心,发展至今也出现了诸多问题,本文将从将建设项目管理内涵出发,结合实际分析出建设项目管理运行中出现的困难,并给出解决对策。 【关键词】建设;项目管理;运行效率;措施 1 建设项目管理概述 建设项目管理是指在建设项目的生产周期内,以最优地实现建设项目的目标为落脚点,按照其内在规律,用系统工程的理论、观点和方法,对建设项目全过程进行有效的规划、协调、控制和总结评价等系统管理活动。建设项目管理在一个总体设计思路设计上,有一个或诸多单项工程联合组成,以经济核算和行政管理形成统一管理的建设单位。一般根据一个企业(或联合企业)、事业单位或独立工程作为一个建设项目。建设项目的管理类型是多种多样的,主要取决于不同阶段的任务和实施主体有所不同,大致有如下图几种项目管理。 2 建设项目管理的内容 建设项目管理一项非常广义的概念,它是集众多的管理内容与一身,主要有以下九点: 2.1 集成管理 集成管理指的是通过各方的综合协调来管理各个方面的工作,保证将设项目的顺利进行,是一种全局管理性质的工作。 2.2 范围管理 所谓范围管理,指的是给建设项目界定不同阶段所必须要完成的工作计划和工作范围以及更新建设项目的范围的管理工作,确保建设项目的成功。 2.3工期管理 工期管理简单的说就是指的项目的时间管理,工期管理要确保建设项目按照计划的时间内顺利完成建设项目,主要工作内容就是要做好项目的工期计划和项目工期的控制等管理工作,确保建设项目的成功。 2.4 造价管理 造价管理的目的主要是全面管理和控制项目的成本和最大化提升建设项目

matlab代码大全教学文案

m a t l a b代码大全

MATLAB主要命令汇总 MATLAB函数参考 附录1.1 管理用命令 函数名功能描述函数名功能描述 addpath 增加一条搜索路径 rmpath 删除一条搜索路径 demo 运行Matlab演示程序 type 列出.M文件 doc 装入超文本文档 version 显示Matlab的版本号 help 启动联机帮助 what 列出当前目录下的有关文件 lasterr 显示最后一条信息 whatsnew 显示Matlab的新特性 lookfor 搜索关键词的帮助 which 造出函数与文件所在的目录 path 设置或查询Matlab路径 附录1.2管理变量与工作空间用命令 函数名功能描述函数名功能描述 clear 删除内存中的变量与函数 pack 整理工作空间内存 disp 显示矩阵与文本 save 将工作空间中的变量存盘 length 查询向量的维数 size 查询矩阵的维数 load 从文件中装入数据 who,whos 列出工作空间中的变量名 附录1.3文件与操作系统处理命令 函数名功能描述函数名功能描述 cd 改变当前工作目录 edit 编辑.M文件 delete 删除文件 matlabroot 获得Matlab的安装根目录 diary 将Matlab运行命令存盘 tempdir 获得系统的缓存目录 dir 列出当前目录的内容 tempname 获得一个缓存(temp)文件 ! 执行操作系统命令 附录1.4窗口控制命令 函数名功能描述函数名功能描述 echo 显示文件中的Matlab中的命令 more 控制命令窗口的输出页面format 设置输出格式 附录1.5启动与退出命令 函数名功能描述函数名功能描述 matlabrc 启动主程序 quit 退出Matlab环境 startup Matlab自启动程序 附录2 运算符号与特殊字符附录

提高运行效率的措施

提高循环水泵运行效率的措施 本文从理论角度分析了实施双速改造后的循环水泵在并联运行时的工作原理,结合双速循环水泵在单、并联运行工况下的性能试验,对多种运行方式进行了经济性比较。提出了提高循环水泵运行效率的措施,为科学合理指导循环水泵节能运行提供了依据。 一、存在问题: 火力发电厂中,循环水泵是耗电量较大的辅机之一。电厂的单元制循环水系统,每台机组一般配2台循环水泵,在运行中常常是一台泵单独运行或2台泵并联运行。由于机组经常处于变负荷运行状态,且受季节的影响,当循环水泵只单台运行时,循环水流量可能不足,造成凝汽器真空低;当循环水泵双泵并联运行时,又嫌水量过大,造成厂用电浪费。 二、提高循环水泵运行效率的措施: (一)、对循环水泵实施双速改造提高运行效率 河北南网某电厂2台机组为亚临界、一次中间再热、单轴四缸四排汽660MW纯凝式汽轮机。每台机组配有3台1800HTCX型斜流式循环水泵,2台运行,一台备用。 电厂在2008年底对循环水泵实施了改造,改变电动机极数,使电动机可以在2个转速下运行。首先对改造后的双速循环水泵并联运行的工作原理进行了分析,其次结合对双速循环水泵的单、并联运行工况下的泵效率试验,并对多种运行方式进行了经济性比较,提出了提高循环水泵运行效率的措施,为科学合理指导循环水泵节能运行提供了依据。 1、循环水泵工作原理 大型电厂的循环水泵一般采用两种运行方式:单泵运行或双泵并联运行。经过双速改造的循环水泵的并联运行方式一般为双泵低速并联运行、双泵高速低速并联运行和双泵高速并联运行。 1.1、单台泵工作原理 将管路性能曲线和泵本身的性能曲线用同样比列尺画在同一张图上,两条曲线的交点即为泵的运行工况点,亦称工作点。如图1所示,其中I是泵本身的性能曲线,Ⅲ是管路性能曲线,M 点即为泵稳定运行的工况点。 图1单台泵运行

数字图像处理 MATLAB代码

MATLAB实用源代码 图像读取及灰度变换 I=imread('cameraman.tif');%读取图像 subplot(1,2,1),imshow(I)%输出图像 title('原始图像')%在原始图像中加标题 subplot(1,2,2),imhist(I)%输出原图直方图 title('原始图像直方图')%在原图直方图上加标题 图像旋转 I=imread('cameraman.tif'); figure,imshow(I); theta=30; K=imrotate(I,theta);%Try varying the angle,theta. figure,imshow(K) 边缘检测 I=imread('cameraman.tif'); J1=edge(I,'sobel'); J2=edge(I,'prewitt'); J3=edge(I,'log'); subplot(1,4,1),imshow(I); subplot(1,4,2),imshow(J1); subplot(1,4,3),imshow(J2); subplot(1,4,4),imshow(J3); 1.图像反转 MATLAB程序实现如下: I=imread('xian.bmp'); J=double(I); J=-J+(256-1);%图像反转线性变换 H=uint8(J); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(H); 2.灰度线性变换 MATLAB程序实现如下: I=imread('xian.bmp'); subplot(2,2,1),imshow(I); title('原始图像'); axis([50,250,50,200]); axis on;%显示坐标系 I1=rgb2gray(I); subplot(2,2,2),imshow(I1); title('灰度图像'); axis([50,250,50,200]);

MATLAB Coder可以从MATLAB代码生成独立的、可读性强、可移植的CC++代码

MATLAB Coder可以从MATLAB代码生成独立的、可读性强、可移植的C/C++代码。 使用MATLAB Coder产生代码的3个步骤:准备用于产生代码的MATLAB算法;检查MATLAB代码的兼容性(有些matlab代码语句并不能生成c/c++代码);产生最终使用的源代码或MEX。 利用MATLAB Coder生成c++代码,并在vs2008中验证: 一个简单的例子,两数相乘: 1、安装matlab2011a或者更新版本; 2、简单生成一个foo.m文件; function c = foo(a, b)%#codegen %This function muliplies a and b c = a * b 其中,%#codegen可以防止出现警告错误 3、在命令窗口,输入mex -setpu,选中一个存在的编译器; 4、在命令窗口输入coder(图形界面),回车,弹出MATLAB Coder Project对话框; 5、在New选项卡Name中输入一个工程名foo.prj;点击Ok,弹出MATLAB Coder MEX Function对话框; 6、在Overview选项卡中,点击Add files,弹出对话框,选中foo.m打开; 7、单击变量a,选择Define by Example…,弹出MATLAB Coder Define by Example对话框,在MATLAB Expression 中输入5,点击OK;同样变量b也进行相应操作,输入6; 8、选中Build选项卡,Output type中选择c/c++ Static Library;选中Generate code only; 9、点击More settings,GeneralàLanguage选择C++;Interface选项中去掉所有选项;Close; 10、点击Build,进行编译;点击View report,弹出Code Generation Report对话框,此时,变量a、b、c会显示相应的变量信息; 11、利用vs2008建立一个控制台应用程序,将生成的相关文件foo.h、foo.cpp、rtwtypes.h、foo_types.h拷到相关目录下并添加到应用程序中; 12、在foo.cpp文件中添加#include “stdafx.h”; 13、test.cpp文件中代码为: #include "stdafx.h"

matlab-代码-规范

1.标识符命名原则 标识符的名字应当直观,其长度应当符合“最小长度,最大信息量”原则。 1)非矩阵变量: ?变量名应该以小写字母开头的大小写混合形式譬如:shadowFadingTable,servingSector,rxBufferForRe userID,userPriorityPro等 ?循环变量应该以i、j、k等为前缀,如 for i_File = 1:nFiles for j_Position = 1:nPositions ?避免仅用最后的字母s(表示单复数)区别两个变量, 例如point和points. 可以用类似pointArray的形式加以区别。 ?避免使用一个关键字或者特殊意义的字作为变量名 ?结构体的命名应该以一个大写字母开头,结构体的命名应该是暗示性的,并且不需要包括字段名(fieldname)应采用Segment.length,避免用Segment.SegmentLength 2)常数: ?命名常数(包括全局变量)应该采用大写字母,用下划线分割单词,如MAX_ITERA TIONS,COLOR_RED ?参数可以以某些通用类型名作为前缀,如COLOR_RED,COLOR_GREEN 3)草稿变量,含矩阵,结构体,元胞: ?应用范围比较大的变量应该具有有意义的变量名,作为“草稿变量”的的临时存储空间或者索引可以用短名字。程序员在读到这样的变量的时候,可以假定这个变量 的值在没有几行之后的代码中就不会再用到。通常的“草稿变量”整数的时候用i, j,k,m,n(最好少用i,j,因为他们作为MA TLAB中的永久性常量表示虚数单 位的)。双精度数的时候常用x,y和z。m表示矩阵,没有m表示标量?命名上将cell, struct与MA TLAB中最常见的numeric array, 即数值矩阵区分开来. ?n用于整数变量, 如n_File. ?m用于一般的矩阵,如matrix_channelHFResponse; ?c用于cell array, 如cell_temp= cell(1, 4); ?s用于struct array, 如stuct_user= struct('field', {}); ?matrix,cell,stuct后面的channelHFResponse,user用来表示有特定含义的中间变量,比如matrix_channelHFResponse,用来表示计算channelHFResponse时中间变量。4)函数: ?函数名应该采用小写字母,函数名应该是具有意义的,下划线分割单词 如采用:compute_total_width()避免compwid() ?前缀get/set 应该作为访问对象或者属性的保留前缀,如getobj(.)。 ?前缀compute应该用在计算某些量的函数的地方computespread()。 ?前缀is应该用在布尔函数的命名的地方,如iscomplete()。 ?Find,initialize类似。

MATLAB--练习(含代码)

MATLAB 练习 实验一常见分布的概率密度、分布函数生成 [实验目的] 1. 会利用MATLAB软件计算离散型随机变量的概率,连续型随机变量概率密度值。 2.会利用MATLAB软件计算分布函数值,或计算形如事件。 3.会求上分位点以及分布函数的反函数值。 [实验要求] 1.掌握常见分布的分布律和概率密度的产生命令,如binopdf,normpdf 2. 掌握常见分布的分布函数命令,如binocdf,normcdf 3. 掌握常见分布的分布函数反函数命令,如binoinv,norminv [实验内容] 1 事件A在每次试验中发生的概率是0.3,计算 (1)在10次试验中A恰好发生6次的概率; (2)在10次试验中A至多发生6次的概率. binopdf(6,10,0.3) >> binocdf(6,10,0.3) 2设随机变量X服从参数是3的泊松分布,求概率 poisspdf(6,3) 3设随机变量X服从区间[2,6]上的均匀分布,求 (1)X=4时的概率密度值; (2). unifpdf(4,2,6) >> unifcdf(5,2,6) 4设随机变量X服从参数是6的指数分布,求 (1)X=0,1,2,3,4,5,6时的概率密度值; (2). exppdf(0:6,6) >> expcdf(5,6) 5设随机变量X服从均值是6,标准差是2的正态分布,求 (1) X=3,4,5,6,7,8,9时的概率密度值; (2)X=3,4,5,6,7,8,9时的分布函数值; (3)若=0.345,求x; (4)求标准正态分布的上0.05分位数。 normpdf(3:9,6,2) normcdf(3:9,6,2) norminv(0.345,6,2) norminv(0.95,0,1) 6设随机变量X服从自由度是6的t分布,求

MATLAB实用源代码

clc clear all InputImage=imread('11.png'); %读入要处理的图像 GrayImage=rgb2gray(InputImage);% 将图像转换为灰度图像 figure(1) imshow(Gx) % 显示使用matlab自带sobel水平算子得到的图片 GrayImage=double(GrayImage); % 把图像变为双精度图像类型 [m n]=size(GrayImage); %图像的大小(长和宽) g=zeros(m,n); %定义一个大小为S的空矩阵 for i=2:m-1 for j=2:n-1 g(i,j)=GrayImage(i-1,j-1)+2*GrayImage(i-1,j)+GrayImage(i-1,j+1)-GrayImage(i+1 ,j-1)-2*GrayImage(i+1,j)-GrayImage(i+1,j+1); %Sobel算子的垂直梯度 end end %边缘像素的操作 g(1,:)=0; g(:,1)=0; g(m,:)=0; g(:,n)=0; figure(2) SFImage=uint8(g); % 显示滤波后的图像 imshow(SFImage)

MATLAB实用源代码 (2010-03-31 09:41:21) 转载 标签: 杂谈 1.图像反转 MATLAB 程序实现如下: I=imread('xian.bmp'); J=double(I); J=-J+(256-1); %图像反转线性变换 H=uint8(J); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(H); 2.灰度线性变换 MATLAB 程序实现如下: I=imread('xian.bmp'); subplot(2,2,1),imshow(I); title('原始图像'); axis([50,250,50,200]); axis on; %显示坐标系 I1=rgb2gray(I); subplot(2,2,2),imshow(I1); title('灰度图像'); axis([50,250,50,200]); axis on; %显示坐标系 J=imadjust(I1,[0.1 0.5],[]); %局部拉伸,把[0.1 0.5]内的灰度拉伸为[0 1] subplot(2,2,3),imshow(J); title('线性变换图像[0.1 0.5]'); axis([50,250,50,200]); grid on; %显示网格线 axis on; %显示坐标系 K=imadjust(I1,[0.3 0.7],[]); %局部拉伸,把[0.3 0.7]内的灰度拉伸为[0 1] subplot(2,2,4),imshow(K); title('线性变换图像[0.3 0.7]'); axis([50,250,50,200]); grid on; %显示网格线 axis on; %显示坐标系 3.非线性变换 MATLAB 程序实现如下: I=imread('xian.bmp'); I1=rgb2gray(I); subplot(1,2,1),imshow(I1); title(' 灰度图像'); axis([50,250,50,200]);

提高系统运行速度的优化方法

提高系统运行速度的优化方法 1.优化CPU的二级缓存 点击“开始--运行”,输入“regedit”命令,进入注册表编辑器, 依次展开HKEY-LOCAL-MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Management子键。 在右边窗口中双击SecondLevelDataCache键值项,在弹出的对话框中选择“十进制”单选项, 输入当前CPU实际的二级缓存值(512)。点击“确定”,重新启动系统,即可生效。 2.优化I/O缓冲大小的默认设置 进入注册表编辑器,展开 HKEY-LOCAL-MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management子键, 在右边窗口中新建或编辑名为loPageLockLimit的DWORD值,根据内存修改其十六进制值,(128MB:4000、256MB:10000、512MB: 40000),完成后重新启动。 3.加快菜单显示速度 进入注册表编辑器,展开HKEY-CURRENT-USER\ControlPanel\Desktop子键, 在右边窗口双击MenuShowDelay键值项,将其值设置为“0”,点击确定,重新启动即可生效。 4.调整Windows XP的浏览速度 进入注册表编辑器,依次展开 HKEY-LOCAL-MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parametes子键, 在右边窗口中新建或编辑名为“CacheHashTable BucketSize”的DWORD值,将其值设置为“1”。 新建或编辑名为“CacheHashTableSize”的DWORD值,将其值设置为“180”。 新建或编辑名为“MaxCacheEntryTtilimit”的DWORD值,将其值设置为“fa00”。 新建或编辑名为“MaxSOACacheEntryTtilimit”的DWORD值,将其值设置为“12d”。退出注册表,重新启动系统,即可生效。 5.加快预读能力提高速度 进入注册表编辑器,依次展开 HKEY-LOCAL-MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters子键, 在右边窗口新建或编辑名为“EnablePrefetcher”的DWORD值,将其值设置为“1”,退出注册表,重新启动电脑即可生效。

关于提高双流机场双跑道运行效率的对策研究

关于提高双流机场双跑道运行效率的对策研究 摘要:由于缺乏双跑道运行经验,我国多数机场双跑道运行效率不高,本文提出并研究了一个具有一定可行性的提高双流双跑道运行效率的对策。研究以成都双流机场双跑道为例,对其运行现状及限制运行效率的因素进行具体分析,并通过对机场跑道运行效率及提高跑道运行效率的常见对策进行研究,提出了通过优化空域资源以提高双流双跑道运行效率的对策,最后通过数学建模来分析与比较优化前后使用不同双跑道运行模式的终端区容量变化,对该对策的合理性与可行性予以评估与确定。 关键词:双跑道运行,双流机场,运行效率 1成都双流机场双跑道布局及限制因素 1.1 成都双流机场双跑道布局 成都双流机场现状东跑道与西跑道平行,跑道中心线间距为1525米,东跑道北端相对西跑道南段向南错开1040M 。第二跑道与机场原停机坪、第一跑道通过一座跨越省道103线的飞机滑行道桥相连。如图2-1所示: 图2-1 成都双流机场平面图 1.2 限制成都双流机场双跑道运行效率的诸多因素 彭山机场 限制原因:彭山机场起飞一边转弯与双流机场02L跑道进近不能满足水平间隔,通过建立垂直间隔保证飞行安全。 运行限制双流机场02R跑道入口距离02L跑道入口向南4640M,彭山机场有活动时,02R跑道不能进近,02L跑道不能实施二类ILS运行。 新津机场 限制原因:新津机场本场训练与双流机场02L跑道进近不能满足水平间隔,通过建立垂直间隔保证飞行安全。双流机场02R跑道入口距离02L跑道入口向南4640M,新津机场活动时,02R跑道不能保证飞行间隔。 运行限制:新津机场活动时,双流机场02R跑道不能进近。

相关主题
文本预览
相关文档 最新文档