MATLAB编程技巧
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB 编程技巧
[摘要]
MATLAB 是⼀种科学计算语⾔,和C 、Fortran 等⾼级语⾔相类似,能⽅便的实现程序控制。
以下介绍⼀点matlab 编程的技巧。
嵌套计算
程序执⾏的速度取决于调⽤的⼦程序的个数和算法实现。
通常希望⼦程序越少越好。
嵌套可以有效地减少⼦程序。
⼀个典型的例⼦就是多项式的求值计算:和两者的结果相同,
但是计算量不⼀样。
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 分布:当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
p(x)
=++x +a 3x 3a 2x 2a 1a 0p(x)=((x +)x +)x +a 3a 2a 1a 0S(M )
=∑M n=0λn n!e −λ
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只能做为函数的最后⼀个参数,主要传递函数中调⽤的⼦函数的可选项的参数,其⼤⼩也随着输⼊参量的变化⽽发⽣改变。