MATLAB编程技巧
[摘要]
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
注意事项:
- 尽量避免使用循环。matlab中循环速度较低,应该尽量使用向量运算代替循环。
- 为了提高速度,在for循环之前,应该分配数组。
- 有限考虑内联函数(inline)。
- 应用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 (表达式就之间用空格隔开)
使用全局变量要注意的事项:
- 它可以在主程序和函数之间不需要经过输入或者输出就直接传递数据。但要注意在调用结束后,全局变量依然存在。
- 两个或者多个函数可以共有一个全局变量,只要同时在这些函数中用global语句加以定义即可。
- 使用全局变量要很小心才是,最好把全局变量全部大写,以免与函数中的局部变量重名。
- 一旦声明了全局变量,则在程序的任何地方都可以对其修改,这破坏了程序的相对独立性。(个人觉得能少用,就尽量少用这个功能。)
通过varargin传递参数
在编写函数的时候,varvargin只能做为函数的最后一个参数,主要传递函数中调用的子函数的可选项的参数,其大小也随着输入参量的变化而发生改变。
MATLAB编程技巧的更多相关文章
- Matlab.NET混合编程技巧之——直接调用Matlab内置函数(附源码)
原文:[原创]Matlab.NET混合编程技巧之--直接调用Matlab内置函数(附源码) 在我的上一篇文章[原创]Matlab.NET混编技巧之——找出Matlab内置函数中,已经大概的介绍了mat ...
- Matlab.NET混合编程技巧之——找出Matlab内置函数
原文:[原创]Matlab.NET混合编程技巧之--找出Matlab内置函数 Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯定不难.反之,有时候一个小错误,可能抓破 ...
- 一些matlab教程资源收藏,使用matlab编程的人还是挺多的
Matlab教程专题资源免费下载整理合集收藏 <MATLAB从入门到精通>高清文字版[PDF] 103.9MB 简体中文 <矩阵实验室>(Mathworks.Matlab.R2 ...
- js异步编程技巧一
异步回调是js的一大特性,理解好用好这个特性可以写出很高质量的代码.分享一些实际用的一些异步编程技巧. 1.我们有些应用环境是需要等待两个http请求或IO操作返回后进行后续逻辑的处理.而这种情况使用 ...
- Matlab小技巧
记录一些用Matlab的技巧. //imshow全屏 subplot(1,3,3); imshow(topSketMat); hold on; set(gcf, 'units', 'normalize ...
- EF – 2.EF数据查询基础(上)查询数据的实用编程技巧
目录 5.4.1 查询符合条件的单条记录 EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录. 5.4.2 Entity Framework中的内部数据缓存 DbS ...
- MATLAB 编程风格指南及注意事项
MATLAB编程风格指南Richard Johnson 著Genial 译MATLAB 编程风格指南Richard JohnsonVersion 1.5,Oct. 2002版权: Datatool 所 ...
- VC多文档编程技巧(取消一开始时打开的空白文档)
VC多文档编程技巧(取消一开始时打开的空白文档) http://blog.csdn.net/crazyvoice/article/details/6185461 VC多文档编程技巧(取消一开始时打开的 ...
- java命名规范和编程技巧
一个好的java程序首先命名要规范. 命名规范 定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,方便维护等作用 Package 的命名 Package 的名字应该都是由一个小写 ...
随机推荐
- mysql--浅谈多表查询1
这是对自己学习燕十八老师mysql教程的总结,非常感谢燕十八老师. 依赖软件:mysql5.6 系统环境:win 连接查询 在谈连接查询之前我们需要对数学上的笛卡尔积有一定的了解 现在有两个集合m和n ...
- 8.聚集函数 ---SQL
一.AVG()函数 A VG()通过对表中行数计数并计算其列值之和,求得该列的平均值.A VG()可用来返回所有列的平均值,也可以用来返回特定列或行的平均值. 警告:只用于单个列 AVG()只能用来确 ...
- virtualenv模块安装
依赖包管理模块(virtualenv) virtualenv是Python的虚拟环境,可以在同一台PC隔离不同的python开发环境.virtualenv可以创建一个隔离的python环境(沙盒).使 ...
- HDU-3072-IntelligenceSystem(tarjan,贪心)
链接:https://vjudge.net/problem/HDU-3072 题意: 给你n个点,1个点到另一个点连接花费c,但是如果几个点可以相互可达,则这几个点连通花费为0. 求将整个图连通的最小 ...
- Linux下无图形界面安装Matlab
1 下载R2015b_glnxa64.iso和破解文件Matlab+2015b+Linux64+Crack 百度网盘可以直接搜索资源.推荐一个可以多线程下载百度网盘超大文件的工具Aria2,均速1.3 ...
- centos6.3搭建FTP服务器图文教程
今天下午不忙,没什么事,看到我大红盟linux版块如此冷清,心不能忍,做了个FTP服务器的搭建教程,大家可以看看, 不会做视频,就图文交叉了,写得不好,望谅解.以后有时间再出一个LNMP的教程. 不磨 ...
- 写TXT文件
#region 写日志 private static void writelog(string strwrite) { string strPath = "d:/log.txt"; ...
- JSON(未完待续,等讲到对象时再加)
1 定义 JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言:JSON 使用 Jav ...
- 策略模式和php实现
策略模式: 策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换.策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy). 策略模式 ...
- 模态框的理解 ,jQ: loading,进度条, 省级联动 表单验证 插件
模态框: 打开一个弹框 不关闭它就不能做框外的操作 必须关闭或弹出另外的弹框 加载延迟loading + 进度条只要有请求 就处理一下监控ajax 全局事件jquery: $('#box').ajax ...