Matlab使用的一点小体会(不定时扩充修缮)

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定义符号变量时,就会出错。

猜你喜欢

转载自blog.csdn.net/lusongno1/article/details/79597442
今日推荐