[摘要]

MATLAB是一种科学计算语言,和C、Fortran等高级语言相类似,能方便的实现程序控制。以下介绍一点matlab编程的技巧。

嵌套计算

程序执行的速度取决于调用的子程序的个数和算法实现。通常希望子程序越少越好。嵌套可以有效地减少子程序。

一个典型的例子就是多项式的求值计算:p(x)=a3x3+a2x2+a1x+a0和p(x)=((a3x+a2)x+a1)x+a0两者的结果相同,但是计算量不一样。

N=100000;
a=[1:N];
x=1;
tic
p1=sum(a.*x.^[N-1:-1:0]);
p1, toc
tic,p2=a(1);
for i=2:N
p2=p2*x+a(i);
end
p2,toc
tic,p3=polyval(a,x),toc p1 = 5.0001e+09 时间已过 0.079124 秒。 p2 = 5.0001e+09 时间已过 0.018267 秒。 p3 = 5.0001e+09 时间已过 0.212526 秒。

例:计算possion分布:S(M)=∑Mn=0λnn!e−λ当M很大的时候的值。

tic
r=80;
M=160;
sum=0;
for n=1:M
temp=1;
for k=1:n
temp=temp*k;
end
sum=sum+r^n/temp*exp(-r);
end
sum,toc sum = 1.0000 时间已过 0.002170 秒。

循环结构

matlab中的循环语句主要有for和while。其基本格式为:

  • for循环

for 循环变量=初值:步长:终值

循环体语句

end

  • while循环

while 条件

循环语句

end

注意事项:

  1. 尽量避免使用循环。matlab中循环速度较低,应该尽量使用向量运算代替循环。
  2. 为了提高速度,在for循环之前,应该分配数组。
  3. 有限考虑内联函数(inline)。
  4. 应用MEX技术。

循环和嵌套

程序的嵌套是指在程序执行的过程中调用自身的过程。又称为递归调用。

例如:计算100!

  • 利用循环
tic
M=100;
f=1;
for i=2:M
f=f*i;
end
f,toc f = 9.3326e+157 时间已过 0.000259 秒。
  • 利用嵌套
function m=hello(n)
if n<=1
m=1;
else
m=n*hello(n-1);
end >> tic,hello(100),toc ans = 9.3326e+157 时间已过 0.002535 秒。
可见自身嵌套速度较慢。

例外处理机制

编程人员要时刻注意:尽量多的为用户考虑,让程序及时的把正确的结果返回,如果出现错误,也会有好的提醒用户错误的原因以及改正的方法。


全局变量的使用

全局变量是指在不同的工作空间以及基本的工作空间中可以共享的变量。用户只需在主程序或者任何子程序中声明一个或者多个全局变量,则函数和主程序中都可以直接饮用它们。声明格式如下:

global v1 v2 v3 … vn (表达式就之间用空格隔开)

使用全局变量要注意的事项:

  1. 它可以在主程序和函数之间不需要经过输入或者输出就直接传递数据。但要注意在调用结束后,全局变量依然存在。
  2. 两个或者多个函数可以共有一个全局变量,只要同时在这些函数中用global语句加以定义即可。
  3. 使用全局变量要很小心才是,最好把全局变量全部大写,以免与函数中的局部变量重名。
  4. 一旦声明了全局变量,则在程序的任何地方都可以对其修改,这破坏了程序的相对独立性。(个人觉得能少用,就尽量少用这个功能。)

通过varargin传递参数

在编写函数的时候,varvargin只能做为函数的最后一个参数,主要传递函数中调用的子函数的可选项的参数,其大小也随着输入参量的变化而发生改变。

MATLAB编程技巧的更多相关文章

  1. Matlab.NET混合编程技巧之——直接调用Matlab内置函数(附源码)

    原文:[原创]Matlab.NET混合编程技巧之--直接调用Matlab内置函数(附源码) 在我的上一篇文章[原创]Matlab.NET混编技巧之——找出Matlab内置函数中,已经大概的介绍了mat ...

  2. Matlab.NET混合编程技巧之——找出Matlab内置函数

    原文:[原创]Matlab.NET混合编程技巧之--找出Matlab内置函数 Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯定不难.反之,有时候一个小错误,可能抓破 ...

  3. 一些matlab教程资源收藏,使用matlab编程的人还是挺多的

    Matlab教程专题资源免费下载整理合集收藏 <MATLAB从入门到精通>高清文字版[PDF] 103.9MB 简体中文 <矩阵实验室>(Mathworks.Matlab.R2 ...

  4. js异步编程技巧一

    异步回调是js的一大特性,理解好用好这个特性可以写出很高质量的代码.分享一些实际用的一些异步编程技巧. 1.我们有些应用环境是需要等待两个http请求或IO操作返回后进行后续逻辑的处理.而这种情况使用 ...

  5. Matlab小技巧

    记录一些用Matlab的技巧. //imshow全屏 subplot(1,3,3); imshow(topSketMat); hold on; set(gcf, 'units', 'normalize ...

  6. EF – 2.EF数据查询基础(上)查询数据的实用编程技巧

    目录 5.4.1 查询符合条件的单条记录 EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录. 5.4.2 Entity Framework中的内部数据缓存 DbS ...

  7. MATLAB 编程风格指南及注意事项

    MATLAB编程风格指南Richard Johnson 著Genial 译MATLAB 编程风格指南Richard JohnsonVersion 1.5,Oct. 2002版权: Datatool 所 ...

  8. VC多文档编程技巧(取消一开始时打开的空白文档)

    VC多文档编程技巧(取消一开始时打开的空白文档) http://blog.csdn.net/crazyvoice/article/details/6185461 VC多文档编程技巧(取消一开始时打开的 ...

  9. java命名规范和编程技巧

    一个好的java程序首先命名要规范. 命名规范 定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,方便维护等作用 Package 的命名 Package 的名字应该都是由一个小写 ...

随机推荐

  1. Hadoop安装包下载方法

    Hadoop3.0版本的诞生,引入了很多新功能,为了验证Hadoop2.0与3.0版本的性能,需下载Hadoop的不同版本.故下文演示如何下载Hadoop安装包的方法. 1. 进入Apache Had ...

  2. python 之 列表生成式、生成器表达式、模块导入

    5.16 列表生成式 l=[]for i in range(100):    l.append('egg%s' %i)print(l)​l=['egg%s' %i for i in range(100 ...

  3. Nginx 最新版源码编译安装 包含常用模块作用及所需依赖

    第一部分 Nginx最新版源码编译安装 1. 使用的模块 模块1:http_rewrite_module 基于正则匹配来实现重定向.依赖PCRE库,见依赖1 模块2:http_gzip_module ...

  4. P2152 [SDOI2009]SuperGCD

    传送门 非常显du然liu的一道题 就是求GCD 因为数据范围... 所以要上压位高精+非递归的辗转相减 关于辗转相减: 如果 A是二的倍数,B是二的倍数   那么GCD(A,B)=2 * GCD(A ...

  5. bzoj2662: [BeiJing wc2012]冻结 最短路 建图

    好久没有1A题啦♪(^∇^*) 一个sb建图,我居然调样例调了10min 看起来是双向边,其实在建图的时候要当成有向图, 否则他会时间倒流(233) 把每个点裂成k个点,然后把每条边裂成4条边(正向反 ...

  6. 如果查询的结果少,可以把查询结果当子集,再查另一张表,比join的速度快得多得多

    ) as qty from riv_print_history_l phl JOIN tab_user_profile up on up.UP_USER_ID = phl.PHL_PRINT_USER ...

  7. SPI接口的ETH芯片(ENC28J60/W5500)

    一 ENC28J60:SPI接口.中断.复位.LED指示.可参看野火相应教程.简单的在单片机中实现网页服务器是参考AVRNET项目,复杂的是用LWIP协议栈.telnet用于用PC的TELNET可以远 ...

  8. 关于window.event.returnValue=false的用处

    window.event.returnValue=false放在提交表单中的onclick事件中则不会提交表单,如果放到超链接中则不执行超链接,也就是它禁止了或取消了请求,没有任何效果. 比如: if ...

  9. Swift 扩展(Extension)总结

    概要 扩展是给已经存在的类(class),结构体(structure),枚举类型(enumeration)和协议(protocol)增加新的功能.类似Objective-C中的Category,不同的 ...

  10. MATLAB中容易忽略却经常遇到的小技巧总结

    1       如何产生一个列向量相同的矩阵 例如,列向量x=[1;2;3],要产生矩阵A=[x,x,x],即[1,1,1;2,2,2;3,3,3]. A = repmat(x,1,n) 2      ...