[摘要]

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. hyperledger fabric 1.0.5 分布式部署 (九)

    linux 使用vim.ctags 配置fabric 源码阅读环境 首先需要安装 ctags,作者使用apt-get 来安装的,安装的版本是5.9 apt-get install ctags 5.9 ...

  2. PAT刷题记录

    1. 1007 素数对猜想 :运行超时 算法问题还是语言本身效率低下? import math def is_prime(num): if num == 2: return num temp = in ...

  3. Ionic中基于js的扩展(指令和服务)来实现各种效果

    1.ion-header-bar ion-footer-bar ion-content align-title='left/ritght/center <body> <ion-hea ...

  4. P1829 [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演

    又一道...分数和取模次数成正比$qwq$ 求:$\sum_{i=1}^N\sum_{j=1}^Mlcm(i,j)$ 原式 $=\sum_{i=1}^N\sum_{j=1}^M\frac{i*j}{g ...

  5. Consul实现服务治理1

    NET Core微服务之基于Consul实现服务治理 https://www.cnblogs.com/edisonchou/p/9148034.html 一.Consul服务注册之配置文件方式 1.1 ...

  6. java Integer判等的大坑

    在-128 至 127 范围内的赋值,Integer 对象是在IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行 判断,但是这个区间之外的 ...

  7. MySQL 查看表大小

    当遇到数据库占用空间很大的情况下,可以用以下语句查找大数据量的表 SELECT TABLE_NAME ,),) 'DATA_SIZE(M)' ,),) 'INDEX_SIZE(M)' ,AVG_ROW ...

  8. java学习笔记(3)——对象与类(日期)

    变量.类型.赋值.运算符等等: https://blog.csdn.net/common77zwq/article/details/81988676 1.概念: 面向对象程序设计OOP.类class. ...

  9. springBoot jpa 分页

    1.jap中有自带的分页方法 在dao层中使用 Page<LinkUrl> findAll(Pageable pageable); 2.在controller层 public List&l ...

  10. jquery 一键复制到剪切板

    今天做项目有一个功能,通过点击事件复制一段文本到剪切板,在网上找了一些,整理了一下,方便需要的朋友使用. <a id="copy" data-text="12345 ...