Matlab匿名函数,向量化和预分配,函数的函数,P码文件

匿名函数:

匿名函数是不存储在程序文件中、但与数据类型是 function_handle 的变量相关的函数。匿名函数可以接受输入并返回输出,就像标准函数一样。但是,它们可能只包含一个可执行语句。

例如,创建用于计算平方数的匿名函数的句柄:

sqr = @(x) x.^2;

 

 

向量化和预分配(提高程序执行速度):

  1. 向量化:要使得matlab更高速工作,把.m文件算法向量化,其他语言使用for循环,Matlab可用向量或矩阵运算。

例:原算法:

x=0.01;

for k=1:1001

    y(k)=log10(x);

    x=x+0.01;

end

 

向量化:

x=0.01:0.01:1001;

y=log10(x);

 

 

  1. 预分配:代码无法向量化,通过通过预分配加快for循环

例:

r=zeros(1,32);

for n=1:32

    r(n)=rank(magic(r));

end

 

函数的函数:

  一种以标量为变量的非线性函数,以函数名为自变量的函数,1️以函数名为自变量的函数。求零点,最优化,求积分和常微分方程。

例(简单实现hump函数功能):

MATLAB中有一个内置函数是humps,该函数是下列函数的特例:

 

 

 

 当q=0.3,r=0.9和s=6的时候就是humps函数。

 

a=0:0.002:1;

b=humps(a);

plot(a,b)

 

 

function b=humps

b=1./((x-.3).^2+.01)+1./((x-.9).^2+.04)-6;

end

 

结果图形为:

 

 

 

命令行窗口执行:

>> p=fminsearch(@humps,0.5)          %求局部最小以及此时x的值

                                     %第一个参数为函数句柄,第二个参数为.近似值

p =

 

0.6370

 

在函数中调用了函数
>> humps(p)                          %求出最小值

 

ans =

 

   11.2528

 

 

P码文件:

一个.m文件被首次调用,matlab会对该文件进行语法分析,并生成相应的内部伪代码(Psecode P码)文件存放在内存中

当该文件被再次调用时,只调用P码文件,不对原.m文件进行语法分析。并且matlab会将该文件连同该文件调用的所有函数文件一起转变为P码文件

P码文件与.m文件有相同的文件名扩展名.p,p码文件运行速度高于原码文件。

如果存在同名的p码文件和.m文件,matlab会先调用p码文件。

 

P码文件相关命令:

inmem:罗列所有P码文件文件名

clear FunName:清除内存中名为FunName.p的p码文件

clear functions:清除所有P码文件

posted @ 2019-09-24 12:21  AsahiLock  阅读(805)  评论(0编辑  收藏  举报