1、在matlab能用.*
这个乘就别用*
这个乘。这是为了在引用matlab内置函数时,降低错误的可能性。例如integral
函数,如果被积函数有用到乘法,被积函数中用到的乘必须是点乘。integral
的参变量是句柄。
2、当程序要求速度和性能时不要用耗时巨大的内置函数,如matlabFunction等。
3、要善于利用匿名函数形如f = @(x,y) xy
的写法,避免多余的函数块。这里的f实质是一个函数句柄,它和函数有相同的用法,但它不是函数本身,它是被at过的。当要获取已激活的空间中的函数句柄时,用@
符号,不如@cos
、@myfun
等等。
4、当同一个函数有多个定义,譬如单独的m文件,嵌入函数尾部,匿名函数等,取往往是由远及近,定义过的匿名函数优先,其次到同文件尾部的函数定义,最后到单独的m文件。(要保证文件尾部的函数定义在激活状态,比如调试的时
候,调试到该文件,那么内嵌的函数都是激活的)
5、addpath(genpath(pwd));
可迅速将主文件所在目录及其子孙文件夹添加到工作路径。
6、eigs(M,k,0)
求解的是M的模最接近0的k个特征值,当M半正定时,其求解的就是最小的k个特征值。
7、为了保证所写函数的鲁棒性,即别人在拿到函数时,即使不输入参数,也能运行,可以采用如下的一个范式来写:
function trust_region(varargin)
%帮助信息:
%输入参数为options = struct('f',f,'x0',[0;0],'Delta',1,'Delta0',1/2,'eta',1/4);
if nargin < 1, help(mfilename),
f = @(x1,x2)100*(x2-x1^2)^2 + (1-x1)^2;
options = struct('f',f,'x0',[0;0],'Delta',1,'Delta0',1/2,'eta',1/4);
fprintf(' 使用默认参数…… \n \n');
addpath(genpath(pwd));
end
f = options.f;
x0 = options.x0;
Delta = options.Delta;
Delta0 = options.Delta0;
eta = options.eta;
end
8、在函数中使用函数,可以有
function mainfun()
function sonfun()
end
end
和
function mainfun()
end
function sonfun()
end
两种方式,区别在于,前一种方式在main函数中定义的变量作用域能到son函数中,而后者需要使用main函数中的变量需要通过形参方式传入。建议使用第二种方式,不容易出错。比如说,使用第一种方式,当在主函数中使用syms定义符号变量时,就会出错。