当前位置:文档之家› MATLAB函数句柄和M文件

MATLAB函数句柄和M文件

MATLAB函数句柄和M文件
MATLAB函数句柄和M文件

第 6 章 M 文件和函数句柄

6.1 Matlab 控制流

6.2 脚本文件和函数文件 6.3 Matlab 的函数类别 6.4 函数句柄

6.1 MATLAB 控制流

6.1.1 if-else-end 条件控制 6.1.2 swith-case 控制语句 6.1.3 for 循环和while 循环

6.1.4 控制程序流和的其他常用指令

6.1.1 if-else-end 条件控制

【例 6.1-1】已知

x x x e y x si n )1.0(5.0si n 2

1.0+-=-,在

505x -≤≤区间,求函数的最小值。

-50

-45

-40

-35

-30

-25

-20

-15

-10

-5

5

0102030405060

70x sin(x)2/exp(x/10) - (sin(x) (x + 1/10))/2

在第四章中采用的方法

(1)采用优化算法求极小值

x1=-50;x2=5; %

yx=@(x)(sin(x)^2*exp(-0.1*x)-0.5*sin(x)*(x+0.1)); [xc0,fc0,exitflag,output]=fminbnd(yx,x1,x2)

%

<9>

%

(2)据图形观察,重设fminbnd 的搜索区间 xx=[-23,-20,-18]; % fc=fc0;xc=xc0; % for k=1:2

[xw,fw]=fminbnd(yx,xx(k),xx(k+1)); %

<16>

if fw

fprintf('函数最小值%6.5f 发生在x=%6.5f 处',fc,xc) 函数最小值-3.34765发生在x=-19.60721处 1)

function [xmin,fmin,n]=exm060101(fx,a,b,Nt)

% exm060101.m

% fx

% a、b

% Nt

% xmin、ymin

% n

[~,f0]=fminbnd(fx,a,b); %

n=1; %

jj=1; %

while 1

n=2*n; %

d=(b-a)/n; %

x=a:d:b; %

ii=0;

xc=zeros(1,n);fc=xc; %

for k=1:n %

[w,f,eflag]=fminbnd(fx,x(k),x(k+1)); %

if eflag>0 %

ii=ii+1;

xc(ii)=w;

fc(ii)=f;

end

end

[fmin,kk]=min(fc); %

xmin=xc(kk); %

if abs(f0-fmin)<1e-6 %

jj=jj+1; %

if jj>Nt %

break %

end

elseif f0-fmin>1e-6 %

f0=fmin; %

jj=1; %

end

end

2)

clear

fx=@(x)(sin(x)^2*exp(-0.1*x)-0.5*sin(x)*(x+0.1)); a=-50;b=5;

[xmin,fmin,n]=exm060101(fx,a,b,3);

fprintf('在x=%6.5f处,函数到达最小值

%6.5f\n',xmin,fmin)

fprintf('最终子区间分割数为 %d\n',n)

在x=-19.60721处,函数到达最小值-3.34765

最终子区间分割数为 128

6.1.2switch-case控制结构

【例6.1-2】已知学生姓名和百分制分数,用“满分”,优秀、良好、及格和不及格表示学生成绩

clear;

%

for k=1:10

a(k)={89+k};b(k)={79+k};c(k)={69+k};d(k)= {59+k};

end;

c=[d,c];

%

A=cell(3,5); %

A(1,:)={'Jack','Marry','Peter','Rose','Tom' };% <7>

A(2,:)={72,83,56,94,100}; % <8> %

for k=1:5

switch A{2,k} % case 100 % r='满分'; case a % r='优秀'; case b % r='良好'; case c % r='及格'; otherwise %

r='不及格'; end

A(3,k)={r}; end A

A =

'Jack' 'Marry' 'Peter' 'Rose' 'Tom' [ 72] [ 83] [ 56] [ 94] [100]

'及格' '良好' '不及格' '优秀' '满分'

6.1.3 for 循环和while 循环

【例 6.1-3】请分别写出用for 和while 循环语句计算

100000021000000

2.02.02.012.0+++==

∑= i i K 的程序。此外,还请写出避免循环的数值、符号计算程序。

(1)for 循环方法

tic

s1=0;

for k=0:1e6 s1=s1+0.2^(k);

end; s1 toc

(2)while 循环方法

tic

s2=1;k=1;

while k<1e6+1 %注意:上限与for 循环不同 s2=s2+0.2^k; k=k+1; end s2 toc

(3)数值求和指令 tic

s3=sum(0.2.^(0:1e6)) toc

(4)符号求和指令

tic

syms k;

s4=vpa(symsum(0.2^k,0,1e6)) toc

【例6.1-4】编写计算∑∑===N n n k k S 111,其中???

????

???????≤=∑=εN k k N 11

min arg ,ε是预先

给定的控制精度。

(1)

function [S,N]=exm060104(epsilon) % [S,N]=exm060104(epsilon) % Calculate the sum of a special series S=1+1/(1+2)+…+1/(1+2+…+N) % S Sum of a special series % N The minimum among all numbers to have 1/sum(1:N)

while d>epsilon

k=k+1;

s=s+k;

d=1/s;

S=S+d;

end

N=k;

(2)

(3)

[S,N]=exm060104(0.0001)

syms k n N

SINF=limit(symsum(1/symsum(k,1,n),n,1,N),N,inf)

N=141;

SN=vpa(symsum(1/symsum(k,1,n),n,1,N))

6.1.4控制程序流的其它常用指令

break语句和continue语句

一般与if语句配合使用。

break语句用于终止循环的执行。

continue语句跳过当前循环,进入下一次。

例:求[100,200]之间第一个能被21整除的整数。程序如下:

for n=100:200

if rem(n,21)~=0

continue

end

break

end

n

n =

105

●try语句

try

语句组1

catch

语句组2

end

try语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2

例:矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。A=[1,2,3;4,5,6]; B=[7,8,9;10,11,12];

try

C=A*B;

catch

C=A.*B;

end

lasterr ans =

错误使用 *

内部矩阵维度必须一致。

脚本文件和函数文件

●M脚本文件

●M函数文件

●局部变量和全局变量

●M函数文件的一般结构

6.2.1 M脚本文件

指令集合

所产生变量驻留在matlab工作空间

Clear指令或者matlab关闭时才删除

6.2.2 M函数文件

从形式上看,第一行是function引导的函数申明行

中间变量存放在临时工作空间,函数调用结束时,临时工作空间变量立即被清除。

M函数文件的一般结构

function 输出形参表=函数名(输入形参表)

注释说明部分;

函数体语句;

具体:

1.函数申明行。

2.help和lookfor帮助使用。

3.在线帮助文本区,包括函数输入输出宗量的含义,调用格式说明。(在线帮助文本,help菜单下matlab help)。

4.编写和修改记录。用于软件档案管理。

5.函数体。Matlab指令。

6.2.3 局部变量和全局变量

局部变量:存在于函数空间内部的中间变量。产生于该函数的运行之中,影响范围也仅仅限于该函数。

全局变量:基本工作空间和几个不同函数空间共享一个变量,即全局变量。必须逐个用global函数加以定义。一个函数改变其值,则所有的同名变量值改变。

【例6.2-1】编写一个M函数文件。它具有以下功能:(A)根据指定的半径,画出蓝色圆周线;(B)可以通过输入字符串,改变圆周线的颜色、线型;(C)假若需要输出圆面积,则绘出圆。

(1)

function [S,L]=exm060201(N,R,str)

% exm060201.m The area and perimeter of a regular polygon (正多边形的面积和周长) % N The number of sides

% R The circumradius

% str A line specification to determine line type/color

% S The area of the regular polygon

% L The perimeter of the regular polygon

% exm060201 用蓝实线画半径为 1 的圆

% exm060201(N) 用蓝实线画外接半径为 1 的正 N 边形

% exm060201(N,R) 用蓝实线画外接半径为 R 的正 N 边形

% exm060201(N,R,str) 用 str 指定的线画外接半径为 R 的正 N 边形

% S=exm060201(...) 给出多边形面积 S ,并画相应正多边形填色图

% [S,L]=exm060201(...) 给出多边形面积 S 和周长L,并画相应正多边形填色图% Zhang Zhiyong 编写于 2006-1-31

switch nargin

case 0

N=100;R=1;str='-b';

case 1

R=1;str='-b';

case 2

str='-b';

case 3

; %

otherwise

error('输入量太多。');

end;

t=0:2*pi/N:2*pi;

x=R*sin(t);y=R*cos(t);

if nargout==0

plot(x,y,str);

elseif nargout>2

error('输出量太多。');

else

S=N*R*R*sin(2*pi/N)/2; %

L=2*N*R*sin(pi/N); %

fill(x,y,str)

end

axis equal square

box on

shg

(2)

[S,L]=exm060201(6,2,'-g') %

图 6.2-1 绿色正六边形

例2:求圆周率

function piva = PiMonteCarlo(n)

% PiMonteCarlo(n),用随机投点法模拟圆周率pi,作出模拟图. n为投点次数,可以是非负整数标量或向量.

% piva = PiMonteCarlo(n),用随机投点法模拟圆周率pi,返回模拟值piva. 若n为标量(向量),则piva也为标量(向量).

x = 0;y = 0;d = 0;

m = length(n); % 求变量n的长度

pivalue = zeros(m,1); % 为变量pivalue赋初值

% 通过循环用投点法模拟圆周率pi

for i = 1:m

x = 2*rand(n(i),1)-1; % 随机投点的横坐标

y = 2*rand(n(i),1)-1; % 随机投点的纵坐标

d = x.^2+y.^2;

pivalue(i) = 4*sum(d <= 1)/n(i); % 圆周率的模拟

end

if nargout == 0

% 不输出圆周率的模拟值,返回模拟图

if m > 1

% 如果n为向量,则返回圆周率的模拟值与投点个数的散点图

figure; % 新建一个图形窗口

plot(n,pivalue,'k.'); % 绘制散点图

h = refline(0,pi); % 添加参考线

set(h,'linewidth',2,'color','k'); % 设置参考线属性

text(1.05*n(end),pi,'\pi','fontsize',15); % 添加文本信息

xlabel('投点个数'); ylabel('\pi的模拟值'); % 添加坐标轴标签

else

% 如果n为标量,则返回投点法模拟圆周率的示意图

figure; % 新建一个图形窗口

plot(x,y,'k.'); % 绘制散点图

hold on;

% 绘制边长为2的正方形

h = rectangle('Position',[-1 -1 2

2],'LineWidth',2);

t = linspace(0,2*pi,100); % 定义一个角度向量

plot(cos(t),sin(t),'k','linewidth',2); % 绘制单位圆

xlabel('X'); ylabel('Y'); % 添加坐标轴标签 title(['Pi的模拟值:' num2str(pivalue)]); % 添加标题

axis([-1.1 1.1 -1.1 1.1]); axis equal; % 设置坐标轴属性

end

else

piva = pivalue; % 输出圆周率的模拟值

end

p = PiMonteCarlo([1000:5000:50000])' % 返回圆周率pi的模拟值向量

PiMonteCarlo([100:50:20000]) % 绘制模拟值与投点个数的散点图

PiMonteCarlo(1000)

6.2MATLAB的函数类别

从扩展名M观察,MATLAB的M文件分为M脚本文件和M函数文件。那么,在MATLAB中,函数Function 又被细分为:主函数;子函数;嵌套函数;私用函数;匿名函数等。限于篇幅,本节只对主函数、子函数及匿名函数进行阐述。

6.2.1主函数(Primary function)

6.2.2子函数(Subfunction)

【例6.3-1】编写一个内含子函数的M函数绘图文件。

(1)

function Hr=exm060301(flag )

% exm060301.m Demo for handles of primary functions and subfunctions

% flag 可以取字符串 'line' 或 'circle' 。

% Hr 子函数cirline的句柄

t=(0:50)/50*2*pi;

x=sin(t);

y=cos(t);

Hr=@cirline; %

feval(Hr,flag,x,y,t)

%

function cirline(wd,x,y,t)

%

switch wd

case'line'

plot(t, x, 'b' ,t , y, 'r', 'LineWidth', 2)

case'circle'

plot(x, y, '-g', 'LineWidth', 8),

axis square off

otherwise

error('输入宗量只能取 ''line'' 或 ''circle'' ! ')

end

shg

(2)HH=exm060301('circle') ??? 未定义与 'char' 类型的输入参数相对应的函数'exm060301'。HH =

6.3-1 绿色圆周线

HH =

@cirline

(3)

t=0:2*pi/5:2*pi;x=cos(t);y=sin(t); %

HH('circle',x,y,t)

CC=functions(HH)

CC =

function: 'cirline'

type: 'scopedfunction'

file: 'E:\2016秋Matlab\program\exm060301.m'

parentage: {'cirline' 'exm060301'}

图 6.3-2 由子函数绘制的绿色正五边形

6.2.3匿名函数(Anonymous function)

(1)匿名函数的创建

FH=@(arglist)expr

(2)匿名函数的调用

FH(arglist) 直接调用格式

6.3函数句柄

●函数句柄(Function handle)是MATLAB的一种数据类型。

●包含了函数的路径、函数名、类型以及可能存在的重载方法;

好处:

(1).引入函数句柄是为了使feval及借助于它的泛函指令工作更可靠;(2).使“函数调用”像“变量调用”一样方便灵活;

(3).提高函数调用速度,特别在反复调用情况下更显效率;

(4).提高软件重用性,扩大子函数和私用函数的可调用范围;

(5).迅速获得同名重载函数的位置、类型信息。

可以与变量一样方便地使用:比如说,在现在这个目录运行时,创建了本目录一

个函数的句柄,当转到其他目录时,可以通过函数句柄直接调用上一个目录的函数,而不需要把那个函数文件复制过来,因为创建的函数句柄中已经包含了路径信息;

提高函数调用速度:因为matlab对函数的调用每次都是要搜索所有的路径,从set path中可以看到,路径是非常的多的,所以如果一个函数在程序中需要经常用到的话,使用函数句柄,对速度会有提高的

6.3.1函数句柄的创建和观察

(1)创建函数句柄

hm=@magic

hm =

@magic

(2)函数句柄的调用

M1=hm(4)

M2=feval(hm,4)

M1 =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 1

5 1

M2 =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 1

5 1

【例6.4-1】为magic函数创建文件句柄,并观察其内涵

(1)

hm=@magic

hm =

@magic

(2)

class(hm)

isa(hm, 'function_handle')

ans =

function_handle

ans =

1

(3)

CC=functions(hm)

CC =

function: 'magic'

type: 'simple'

file: 'D:\Matlab R2014a\toolbox\matlab\elmat\ma...'

(4)

M1=hm(4)

M1 =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 1

5 1

(5)

M2=feval(hm,4)

M2 =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 1

5 1

6.3.2函数句柄的基本用法

原函数调用格式

[argout1, argout2, …, argoutn]=FunName(argin1, argin2, …, arginn)

Hfun=@FunName

函数句柄调用格式

[argout1, argout2, …, argoutn]=Hfun(argin1, argin2, …, arginn)

【例6.4-2】

(1)[S,L]=exm060201(3,2,'-r') % S =

5.1962

L =

图 6.4-1 直接调用函数exm060201所画的红色等边三角形(2)

Hexm=@exm060201, %

(3)

which('exm060201')

(5)

[S,L]=exm060201(3,2,'-r')

(6)[S,L]=Hexm(3,2,'-r') %

图 6.4-2 在新视野中里用函数句柄Hexm所画的红色等边三角形

思考题1:猜数游戏

首先由计算机产生[1,100]之间的随机整数,然后由用户猜测所产生的随机数。根据用户猜测的情况给出不同提示,如猜测的数大于产生的数,则显示“High”,小于则显示“Low”,等于则显示“You won”,同时退出游戏。用户最多可以猜7次。

a=ceil(100*rand(1));

for i=1:7

b=input('the number is ?');

if b>a

xx='high'

else if b

xx='low'

else

xx='you are right'

a

break

end

end

end

函数及其表示练习题及答案

函数及其表示练习题 一.选择题 1 函数)2 3 (,32)(-≠+= x x cx x f 满足,)]([x x f f =则常数c 等于( ) A 3 B 3- C 33-或 D 35-或 2. 已知)0(1)]([,21)(2 2 ≠-=-=x x x x g f x x g ,那么)21(f 等于( ) A 15 B 1 C 3 D 30 3. 函数2y =的值域是( ) A [2,2]- B [1,2] C [0,2] D [ 4 已知2 211()11x x f x x --=++,则()f x 的解析式为( ) A 21x x + B 2 12x x +- C 212x x + D 2 1x x +- 5.设()f x 是R 上的任意函数,则下列叙述正确的是 ( ) (A)()()f x f x -是奇函数 (B)()()f x f x -是奇函数 (C) ()()f x f x --是偶函数 (D) ()()f x f x +-是偶函数 6. 下列图中,画在同一坐标系中,函数bx ax y +=2与)0,0(≠≠+=b a b ax y 函数的图象只可能是 ( ) 7.已知二次函数)0()(2 >++=a a x x x f ,若0)(

A .正数 B .负数 C .0 D .符号与a 有关 8. 已知)(x f 的定义域为)2,1[-,则|)(|x f 的定义域为 ( ) A .)2,1[- B .]1,1[- C .)2,2(- D .)2,2[- 9. 已知在x 克%a 的盐水中,加入y 克%b 的盐水,浓度变为%c ,将y 表示成x 的函数 关系式 ( ) A .x b c a c y --= B .x c b a c y --= C .x a c b c y --= D .x a c c b y --= 10.已知f 满足f (ab )=f (a )+ f (b),且f (2)=p ,q f =)3(那么)72(f 等于 ( ) A .q p + B .q p 23+ C .q p 32+ D .23q p + 11. 某学校要招开学生代表大会,规定各班每10人推选一名代表,当各班人数除以10的余数大于..6.时再增选一名代表.那么,各班可推选代表人数y 与该班人数x 之间的函数关系用取整函数y =[x ]([x ]表示不大于x 的最大整数)可以表示为 (A )y =[ 10 x ] (B )y =[ 3 10x +] (C )y =[410x +] (D )y =[5 10 x +] 12.已知函数()()2113,f x x x =+≤≤则 A .()()12202f x x x -=+≤≤ B .()()12124f x x x -=-+≤≤ C .()()12202f x x x -=-≤≤ D .()()12104f x x x -=-≤≤ 13.函数 ln 1x y += 的定义域为 A .4,1-- B .()4,1- C .()1,1- D .(1,1]- 14.设函数()221, 1,2, 1, x x f x x x x ?-≤? =?+->??则 ()12f f ?? ? ??? 的值为 A . 1516 B .2716- C .8 9 D.18 15. 定义在R 上的函数()f x 满足 ()()()()()2,,12f x y f x f y xy x y R f +=++∈= 则()3f -等于( ) A. 2 B. 3 C. 6 D . 9 16.下列函数中与函数y = 有相同定义域的是 ( ) A .()ln f x x = B 。 ()1f x x = C 。 ()f x x = D 。 ()x f x e =

VCMFC编程各种窗口句柄获取函数详解

AfxGetMainWnd AfxGetMainWnd获取自身窗口句柄 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函数功能:该函数检查与特定父窗口相联的子窗口z序(Z序:垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的句柄。 函数原型:HWND GetTopWindow(HWND hWnd); 参数: hWnd:被查序的父窗口的句柄。如果该参数为NULL,函数返回Z序顶部的窗口句柄。返回值: 如果函数成功,返回值为在Z序顶部的子窗口句柄。如果指定的窗口无子窗口,返回值为NULL。 GetForegroundWindow 函数功能:该函数返回当前系统的前台窗口的窗口句柄。 函数原型:HWND GetForegroundWindow(VOID) 返回值:函数返回前台窗回的句柄。 GetActiveWindow 函数功能:该函数可以获得与调用该方法的线程的消息队列相关的活动窗口的窗口句柄(就是取得当前进程的活动窗口的窗口句柄)。 函数原型:HWND GetActiveWindow(VOID) 返回值:返回值是与调用线程的消息队列相关的活动窗口的句柄。否则,返回值为NULL。 GetSafeHwnd 函数功能:获取某个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数。 通过下面的例子来看其理由: CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器 HWND hwnd = pwnd->m_hwnd; //得到它的HWND 这样的代码当开始得到的pwnd为空的时候就会出现一个“General protection error”,并关闭应用程序,因为一般不能对一个NULL指针访问其成员,如果用下面的代码:CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器 HWND hwnd = pwnd->GetSafeHwnd(); //得到它的HWND 就不会出现问题,因为尽管当pwnd是NULL时,GetSafeHwnd仍然可以用,只是返回NULL IsWindowVisible 函数功能:该函数获得给定窗口的可视状态。 函数原型:BOOL IsWindowVisible(HWND hWnd); 参数; hWnd:被测试窗口的句柄。 返回值:

MATLAB M文件与M函数

M文件与M函数 Matlab输入命令的常用方式有两种:一种是直接在Matlab的命令窗门中逐条输入Matlab 命令;二是m文件工作方式。当命令行很简单时,使用逐条输入方式还是比较方便的。但当命令行很多时(比如说几十行乃至全成百上千行命令),显然再使用这种方式输入MATLAB 命令,就会显得杂乱无章,不易于把握程序的具体走向,并且给程序的修改和维护带来了很大的麻烦。这时,建议采用Matlab命令的第二种输入形式m文件工作方式。 m文件工作方式,指的是将要执行的命令全部写在一个文本文件中,这样既能使程序显得简洁明了,又便于对程序的修改与维护。m文件直接采用Matlab命令编写,就像在Matlab 的命令窗口直接输入命令一样,因此调试起来也十分方便,并且增强了程序的交互性。 m文件与其他文本文件一样,可以在任何文本编辑器中进打编辑、存储、修改和读取。利用m文件还可以根据白己的需要编写一些函数,这些函数也可以橡Matlab提供的函数一样进行调用。从某种意义上说,这也是对MATLAB的二次开发。 m文件有两种形式:一种是命令方式或称脚本方式;另一种就是函数文件形式。两种形式的文件扩展名均是.m。 1、M文件 当遇到输入命令较多以及要重复输入命令的情况时,利用命令文件就显得很方便了。将所有要执行的命令按顺序放到一个扩展名为.m的文本文件中,每次运行时只需在MATLAB 的命令窗口输入m文件的文件名就可以了。需要注意的是,m文件最好直接放在Matlab的默认搜索路径下(一般是Matlab安装目录的子目录work中),这样就不用设置m文件的路径了,否则应当用路径操作指令path重新设置路径。另外,m文件名不应该与Matlab的内置函数名以及工具箱中的函数重名,以免发生执行错误命令的现象。Matlab对命令文件的执行等价于从命令窗口中顺序执行文件中的所有指令。命令文件可以访问Matlab工作空间里的任何变量及数据。命令文件运行过程中产生的所有变量都等价于从Matlab工作空间中创建这些变量。因此,任何其他命令文件和函数都可以自由地访问这些变量。这些变量一旦产生就一直保存在内存中,只有对它们重新赋值,它们的原有值才会变化。关机后,这里变量也就全部消失了。另外,在命令窗口中运行clear命令,也可以把这些变量从工作空间中删去。当然,在Matlab的工作空间窗口中也可以用鼠标选择想要删除的变量,从而将这些变量从工作空间中删除。 接下来,编写一个名为test.m的命令文件,用来计算矩阵1到100的和,并把它放到变量s中。 第一步创建新的M-文件。在Matlab主菜单上选择菜单命令File→New→M-File

matlab 匿名函数 函数句柄

matlab 匿名函数函数句柄 (2012-05-11 11:35:05) 转载▼ 分类:study与matlab 标签: 教育 一、函数句柄 所谓函数句柄,个人认为可以将其理解成一个函数的代号,就像一个人的名字。这样在调用时可以调用函数句柄而不用调用该函数。 语法如下: 变量名= @ 函数名; @的作用就是将一个函数的函数句柄赋值给等号左边的变量。在调用函数时就可以调用该句柄,可以实现同样的功能。 例: 首先我们写一个求均值的函数: function y=average(x) y=mymean(x); function a=mymean(v) a=sum(v)/length(v); 定义一个数组z: z=[1,2,3,4,5,6,7]; >> average(z) ans = 4 >> handle=@average handle = @average >> ave=@average ave = @average >> ave(z) ans = 4 二、匿名函数相当于C语言中的函数指针(入口地址),只不过句柄就用一个唯一的常整数来指出 匿名函数是函数句柄的一种特殊用法,这里所得到的函数句柄变量不指向特定的函数(即不指向函数M文件中的函数名),而是指向一个函数表达式(具体表达式)。

语法如下: 变量名=@(输入参数列表)运算表达式; 例子: 为了说明问题,我们用简单的两个数相加, >> sum=@(x,y)x+y sum = @(x,y)x+y >> sum(2,3) ans = 5 %%%%%%%%%%%%%%%%%%% 比如定义f(x)=x^2,可以写为 f=@(x)(x.^2) 其中@(x)(x.^2)就是匿名函数,第一个括号里面是自变量,第二个括号里面是表达式,@是函数指针 f=@(x)(x.^2)表示将匿名函数@(x)(x.^2)赋值给f,于是f就表示该函数。 于是f(2)=2.^2=4;f(1:3)=[1:3].^2=[1 4 9]等等 定义匿名函数时也可以调用别的匿名函数,比如 f1=@(x,y)(x.^2+y.^2) 定义了函数x^2+y^2 f2=@(t)(f1(t,2)) 定义了函数t^2+4 f3=@(x)(f1(x(1),x(2))) 定义了函数x(1)^2+x(2)^2 使用匿名函数时一定要注意函数本身的参数形式,如 f1(2,3) 表示2^2+3^2 f2(3)=3 表示3^2+4 f3([1,2]) 表示1^2+2^2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%% 三、内联函数 内联函数和普通的函数句柄,准确说跟匿名函数比较类似,可以通过一个函数表达式近而得到该函数。 语法格式如下: 1 变量名=inline(表达式); 2 变量名=inline('函数表达式', '变量名1','变量名2', ... ,'变量名n');(推荐) 例如:

高一数学必修1 函数及其表示练习题

高一数学必修1 函数及其表示练习题 1、判断下列对应:f A B →是否是从集合A到集合B的函数: (1){} ,0,:,:;A R B x R x f x x f A B ==∈>→→ (2)*,,:1,:.A N B N f x x f A B ==→-→ (3){} 2 0,,:,:.A x R x B R f x x f A B =∈>=→→ 2、已知函数()()()3,10, ,85,10,x x f x x N f f f x x -≥??=∈=? +? ==-??????

matlab符号表达式转换为函数句柄

在用符号(symbolic) 运算得到一个符号表达式后,我们可能需要令其进一步参与数值运算。然而,很多数值运算函数,比如数值积分函数(quad,quadgk,integral),都只能接受函数句柄作为输入。于是,将符号表达式转化为函数句柄就成了必然。 如果不怕麻烦,完全可以通过手动输入对应的符号表达式来建立函数句柄。然而,很多情况下我们得出的符号表达式可能极其复杂,甚至可能占据很多行。此时,手动输入显然相当不便。于是,找到一种自动将符号表达式转化为函数句柄的方法就显得尤为重要。下面列举出三种自动转换的办法(三种办法得到的函数都是匿名函数): 1. 最简便的办法:利用matlabFunction(这个函数只适用于2009a及更新的版本) 1.syms x 2.y=exp(x)*x^2+x+1 3.g = matlabFunction(y) 复制代码 如果你的matlab报错,这说明你的版本太老,那么请使用下面两种办法。 2. eval + vectorize 函数:vectorize 的目的是将字符串(string)表达式里的* / ^ 替换为 .* ./ .^ ,以支持向量运算。eval 执行该字符串后得到函数句柄 1.syms x 2.y=exp(x)*x^2+x+1 3.g = eval(['@(x)',vectorize(y)]) 复制代码 这个方法需要借助eval 函数,在论坛里已经被广大坛友广泛使用过。 3. str2func + vectorize 函数:str2func 函数可以直接将字符串转化为函数句柄 1.syms x 2.y=exp(x)*x^2+x+1 3.g = str2func(['@(x)',vectorize(y)]) 复制代码

D实验五 M文件和MATLAB程序设计

实验五M文件和MATLAB程序设计 一、实验目的 matlab作为一种高级计算机语言,不仅可以命令行方式完成操作,也具有数据结构、控制流、输入输出等能力,本次实验通过熟悉和掌握m文件的建立与使用方法,以及函数与控制程序流程语句的使用,使学生具备一定的编程和程序调试能力。 1.掌握M文件的使用方法。 2.掌握if语句和switch语句的使用 3. 掌握循环语句的使用 4. 通过练习理解MATLAB编程方法。 二、实验原理 1.m文件 用matlab语言编写的程序,称为m文件。M文件根据调用方式的不同分为两类,命令文件(Script file)和函数文件(Function file)。区别? 2.程序控制结构 1)顺序结构 2)选择结构 (1)if语句a) 单分支if语句b) 双分支if语句c) 多分支if语句 (2)switch 语句 (3)try语句 3)循环结构 (1)for 语句 (2)while语句 (3)break语句、continue语句、return使用,区别? 3.函数文件 function 输出形参表=函数名(输入形参表) 注释说明部分 函数体语句 注意事项? 三、实验要求 1.首先上机练习PPT中各种流程控制语句的有关实例。 2.然后上机练习下面的实验习题。 四、实验习题

1.数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如: 2→1 3→10→5→16→8→4→2→1 6→3→10→5→16→8→4→2→1 运行下面的程序,按程序提示输入n=1,2,3,5,7,8,9等数来验证这一结论。 %classic "3n+1" problem from number theory. while 1 n=input('Enter n,negative quits:'); if n<=0 break end a=n; while n>1 if rem(n,2)==0 n=n/2; else n=3*n+1; end a=[a,n]; end a end Enter n,negative quits: 2. 编程求满足∑=>m i i 11000020的最小m 值。 a=0; i=1; while (a<100000) a=a+pow2(i); i=i+1; end m=i-1 3. 编写一个函数,计算下面函数的值,给出x 的值,调用该函数后,返回y 的值。 function [y]=myfun1(x)

函数及其表示练习题

1.2 函数及其表示 一、 选择题 1、函数()y f x =的图象与直线x m =的交点个数为( ) A .可能无数个 B .只有一个 C .至多一个 D .至少一个 2、设{}{} M=22,02x x N y y -≤≤=≤≤,函数()f x 的定义域为M ,值域为N ,则 ()f x 的图象可以是( ) 3、函数()x f x x =+ 的图象是如图中的( ) A . B . C . D . 4、已知()f x 是一次函数且()()()()()22315,2011,f f f f f x -=--==则( ) A .32x + B .32x - C .23x + D .23x - 5、设函数()()221,1 1,22,1x x f x f f x x x ???-≤=???+->??? 则的值为( ) A . 15 16 B .2716 - C . 89 D .18 6、一个面积为2 100cm 的等腰梯形,上底长为x cm ,下底长为上底长的3倍,则把它

的高y 表示成x 的函数为( ) A .()500y x x => B .()1000y x x => C .()50 0y x x = > D .()100 0y x x = > 7、函数( )1 3 f x x = -的定义域为( ) A .[)(]22+∞-∞- ,, B .[)()2,33+∞ , C .[)()(]2,332+∞-∞- ,, D .(]2-∞-, 8、设()() ()()1,0,00,0x x f x x x π+>?? ==??

进程句柄获取

WIN32进程快照以及进程ID和句柄查找收藏 要对进程进行某种操作,就必须首先知道该进程的进程句柄或者进程ID,否则一切无从谈起,对于程序自己创建的子进程来说,CreateProcess函数返回了进程句柄和进程ID,但如果需要调试系统中已经运行的进程,那就必须首先获取它们的句柄才行。Win32中并没有直接获取其他进程句柄的函数,但如果知道进程ID,可以由此得到进程句柄,所以可以首先通过某种途径获取进程ID。 一、获取进程ID 1. 从窗口句柄获取进程句柄 获取进程ID的方法之一是使用GetWindowThreadProcessId函数,这个函数可以从一个窗口句柄获得创建该窗口的进程的进程ID,而通过FindWindow函数得到窗口句柄是很简单的,所以GetWindowThreadProcessId函数的用途相当广泛。该函数的用法是: DWORD GetWindowThreadProcessId( HWND hWnd, // handle to window LPDWORD lpdwProcessId // process identifier ); 其中hWnd参数指定需要用来获取进程ID的窗口句柄,lpdwProcessId指向一个双字变量,函数在这里返回创建窗口的进程ID,函数的返回值是目标进程中创建该窗口的线程的线程句柄(一个有用的副产品!)。 2. 通过快照来获取进程ID 每一个应用程序实例在运行起来后都会在当前系统下产生一个进程,大多数应用程序均拥有可视界面,用户可以通过标题栏上的关闭按钮关闭程序。但是也有为数不少的在后台运行的程序是没有可视界面的,对于这类应用程序用户只能通过CTRL+ALT+DEL热键呼出"关闭程序"对话框显示出当前系统进程列表,从中可以结束指定的任务。显然,该功能在一些系统监控类软件中还是非常必需的,其处理过程大致可以分为两步:借助系统快照实现对系统当前进程的枚举和根据枚举结果对进程进行管理。本文下面即将对此过程的实现进行介绍。 当前进程的枚举 要对当前系统所有已开启的进程进行枚举,就必须首先获得那些加载到内存的进程当前相关状态信息。在Windows操作系统下,这些进程的当前状态信息不能直接从进程本身获取,系统已为所有保存在系统内存中的进程、线程以及模块等的当前状态的信息制作了一个只读副本--系统快照,用户可以通过对系统快照的访问完成对进程当前状态的检测。在具体实现时,系统快照句柄的获取是通过Win32 API函数CreateToolhelp32Snapshot()来完成的,

1.2函数及其表示练习题及答案

1.2函数及其表示练习题 一.选择题 1 函数)2 3 (,32)(-≠+= x x cx x f 满足,)]([x x f f =则常数c 等于( ) A 3 B 3- C 33-或 D 35-或 2. 已知)0(1)]([,21)(2 2 ≠-=-=x x x x g f x x g ,那么)21(f 等于( ) A 15 B 1 C 3 D 30 3. 函数2y =的值域是( ) A [2,2]- B [1,2] C [0,2] D [] 4 已知2 211()11x x f x x --=++,则()f x 的解析式为( ) A 21x x + B 2 12x x +- C 212x x + D 2 1x x +- 5.设()f x 是R 上的任意函数,则下列叙述正确的是 ( ) (A)()()f x f x -是奇函数 (B)()()f x f x -是奇函数 (C) ()()f x f x --是偶函数 (D) ()()f x f x +-是偶函数 6. 下列图中,画在同一坐标系中,函数bx ax y +=2与)0,0(≠≠+=b a b ax y 函数的图象只可能是 ( ) 7.已知二次函数)0()(2 >++=a a x x x f ,若0)(

A .正数 B .负数 C .0 D .符号与a 有关 8. 已知)(x f 的定义域为)2,1[-,则|)(|x f 的定义域为 ( ) A .)2,1[- B .]1,1[- C .)2,2(- D .)2,2[- 9. 已知在x 克%a 的盐水中,加入y 克%b 的盐水,浓度变为%c ,将y 表示成x 的函数关系式 ( ) A .x b c a c y --= B .x c b a c y --= C .x a c b c y --= D .x a c c b y --= 10.已知f 满足f (ab )=f (a )+ f (b),且f (2)=p ,q f =)3(那么)72(f 等于 ( ) A .q p + B .q p 23+ C .q p 32+ D .23q p + 11. (2010陕西文数)某学校要招开学生代表大会,规定各班每10人推选一名代表,当各班人数除以10的余数大于..6.时再增选一名代表.那么,各班可推选代表人数y 与该班人数x 之间的函数关系用取整函数y =[x ]([x ]表示不大于x 的最大整数)可以表示为 (A )y =[ 10x ] (B )y =[ 3 10x +] (C )y =[4 10 x +] (D )y =[5 10 x +] 12.(2009海口模拟)已知函数()()2113,f x x x =+≤≤则 A .()()12202f x x x -=+≤≤ B .()()12124f x x x -=-+≤≤ C .()()12202f x x x -=-≤≤ D .()()12104f x x x -=-≤≤ 13.(2009江西理)函数 ln 1x y += 的定义域为 A .()4,1-- B .4,1- C .()1,1- D .(1,1]- 14.(2008山东)设函数()2 21, 1, 2, 1,x x f x x x x ?-≤?=?+->??则 ()12f f ?? ? ??? 的值为 A . 1516 B .2716- C .8 9 D.18 15.(2008陕西) 定义在R 上的函数()f x 满足 ()()()()()2,,12f x y f x f y xy x y R f +=++∈= 则()3f -等于( ) A. 2 B. 3 C. 6 D .9 16.( 2009福建)下列函数中与函数y = 有相同定义域的是 ( ) A .()ln f x x = B 。 ()1f x x = C 。 ()f x x = D 。 ()x f x e =

matlab句柄属性

matlab图形句柄属性 句柄式图形常用函数: (1)get(h)返回句柄值h所指定的图形对象的所有属性名称与相对应的属性值 (2)a = get(h)返回由句柄值h所指定的图形对象的属性结构数组,并且该数组的字段名称就是该对象的属性名称。 (3)a = get(0,'factory')返回所有能由用户设置的属性的默认定义值。 (4)a = get(0,'FactoryObjectTypePropertyName1','FactoryObjectTypePropertyName2',...) 返回指定对象类型指定的属性值,输入参数FactoryObjectTypePropertyName为一个关键词,由字符Factory与图形对象类型(如Figure)还有属性名称(如Color)组成。 a = get(0,'factoryFigureColor')返回Figure对象的Color属性值。 (5)a = get(h,'DefaultObjectTypePropertyName1','DefaultObjectTypePropertyName1',...) 返回句柄值为h的对象指定属性的默认值。如“DefaultFigureColor”。 (6)a = get(h,'default')列出h对象的所有属性的默认属性值 (7)a = set(h)返回句柄值h所指定的图形对象的所有属性名称对应的可设置属性值,a为结构数组,存储对象的属性名称,其字段值为相对应的属性值。属性值中用{}括起来的表示默认值。 (8)set(h,a)使用指定的属性值来设置由句柄值h所指定的对象属性,a为结构数组,其字段名称为对象的属性名称,字段值为相对应的属性值。 (9)a = set(0,'factory')返回那些用户可以设置默认值的所有对象的属性,同时显示可设置的属性值。 (10)a=set(0,'FactoryObjectTypePropertyName')返回所有对象中指定的属性名称FactoryObjectTypePropertyName的所有可能的属性值。 (11)a = set(h,'属性名','属性值')设置句柄值为h的对象的与属性名对应的属性值。(12)set(h,'DefaultObjectTypePropertyName1','DefaultObjectTypePropertyName2',...) 对句柄值为h的对象设置特定属性名称的属性默认值。 (13)H = findobj;返回Root对象与其所有子对象的句柄值 (14)H = findobj(h);返回h变量的句柄值 (15)H = findobj(’属性名称‘,’属性值‘);依据对象的属性名称和属性值找出匹配的对象句柄值。 (16)H = findobj(ObjectHandles,’属性名称‘,’属性值‘);根据限定的对象列表找出与对象的属性名称和属性值匹配的对象句柄值 (17)gcf返回当前Figure对象的句柄值 gca返回当前axes对象的句柄值 gco返回当前鼠标单击的句柄值,该对象可以是除root对象外的任意图形对象,并且Matlab 会把当前图形对象的句柄值存放在Figure的CurrentObject属性中。 Figure 对象是指屏幕(root对象)中产生的窗口,并且MATLAB允许用Figure 函数建立任意数目的窗口,但所有的绘图函数,如plot surf等,如果窗口未存在时,会自动建立一个新的窗口;每个窗口则构成一个Figure 对象。

高一数学上册第一章函数及其表示知识点及练习题(含答案)

函数及其表示 (一)知识梳理 1.映射的概念 设B A 、是两个非空集合,如果按照某种对应法则f ,对A 中的任意一个元素x ,在集合B 中都有唯一确定的元素y 与之对应,则称f 是集合A 到集合B 的映射,记作f(x). 2.函数的概念 (1)函数的定义: 设B A 、是两个非空的数集,如果按照某种对应法则f ,对A 中的 任意数 x ,在集合B 中都有 唯一确定 的数y 和它对应,则这样的对应关系叫做从A 到B 的一个函数,通常记为___y=f(x),x ∈A (2)函数的定义域、值域 在函数A x x f y ∈=),(中,x 叫做自变量,x 的取值范围A 叫做函数的定义域;与x 的值相对应的y 值叫做函数值, 对于的函数值的集合所有的集合构成 值域。 (3)函数的三要素: 定义域 、 值域 和 对应法则 3.函数的三种表示法:图象法、列表法、解析法 (1).图象法:就是用函数图象表示两个变量之间的关系; (2).列表法:就是列出表格来表示两个变量的函数关系; (3).解析法:就是把两个变量的函数关系,用等式来表示。 4.分段函数 在自变量的不同变化范围中,对应法则用不同式子来表示的函数称为分段函数。 (二)考点分析 考点1:判断两函数是否为同一个函数 如果两个函数的定义域相同,并且对应关系完全一致,称这两个函数相等。 考点2:求函数解析式 方法总结:(1)若已知函数的类型(如一次函数、二次函数),则用待定系数法; (2)若已知复合函数)]([x g f 的解析式,则可用换元法或配凑法; (3)若已知抽象函数的表达式,则常用解方程组消参的方法求出)(x f 一、选择题 1. 判断下列各组中的两个函数是同一函数的为( C ) ⑴3 )5)(3(1+-+=x x x y ,52-=x y ;⑵111-+=x x y ,)1)(1(2-+=x x y ; ⑶x x f =)(,2)(x x g =;⑷()f x ()F x = ⑸21)52()(-=x x f ,52)(2-=x x f . A. ⑴、⑵ B. ⑵、⑶ C. ⑷ D. ⑶、⑸

MATLAB句柄式图形常用函数

句柄式图形常用函数: (1)get(h)返回句柄值h所指定的图形对象的所有属性名称与相对应的属性值 (2)a = get(h)返回由句柄值h所指定的图形对象的属性结构数组,并且该数组的字段名称就是该对象的属性名称。 (3)a = get(0,'factory')返回所有能由用户设置的属性的默认定义值。 (4)a = get(0,'FactoryObjectTypePropertyName1', 'FactoryObjectTypePropertyName2',...)返回指定对象类型指定的属性值,输入参数FactoryObjectTypePropertyName为一个关键词,由字符Factory与图形对象类型(如Figure)还有属性名称(如Color)组成。 a = get(0,'factoryFigureColor')返回Figure对象的Color属性值。 (5)a = get(h,'DefaultObjectTypePropertyName1', 'DefaultObjectTypePropertyName1',...) 返回句柄值为h的对象指定属性的默认值。如“DefaultFigureColor”。 (6)a = get(h,'default')列出h对象的所有属性的默认属性值 (7)a = set(h)返回句柄值h所指定的图形对象的所有属性名称对应的可设置属性值,a为结构数组,存储对象的属性名称,其字段值为相对应的属性值。属性值中用{}括起来的表示默认值。 (8)set(h,a)使用指定的属性值来设置由句柄值h所指定的对象属性,a为结构数组,其字段名称为对象的属性名称,字段值为相对应的属性值。 (9)a = set(0,'factory')返回那些用户可以设置默认值的所有对象的属性,同时显示可设置的属性值。 (10)a=set(0,'FactoryObjectTypePropertyName')返回所有对象中指定的属性名称FactoryObjectTypePropertyName的所有可能的属性值。 (11)a = set(h,'属性名','属性值')设置句柄值为h的对象的与属性名对应的属性值。 (12) set(h,'DefaultObjectTypePropertyName1','DefaultObjectTypePropertyName2',...)对句柄值为h的对象设置特定属性名称的属性默认值。 (13)H = findobj;返回Root对象与其所有子对象的句柄值 (14)H = findobj(h);返回h变量的句柄值 (15)H = findobj(?属性名称…,?属性值…);依据对象的属性名称和属性值找出匹配的对象句柄值。 (16)H = findobj(ObjectHandles,?属性名称…,?属性值…);根据限定的对象列表找出与对象的属性名称和属性值匹配的对象句柄值 (17)gcf返回当前Figure对象的句柄值 gca返回当前axes对象的句柄值 gco返回当前鼠标单击的句柄值,该对象可以是除root对象外的任意图形对象,并且Matlab会把当前图形对象的句柄值存放在Figure的CurrentObject属性中Figure对象的属性篇

MATLAB函数句柄和M文件

MATLAB函数句柄和M文件

第 6 章M 文件和函数句柄 6.1 Matlab控制流 6.2 脚本文件和函数文件 6.3 Matlab的函数类别 6.4 函数句柄 6.1 MATLAB 控制流 6.1.1 if-else-end 条件控制 6.1.2 swith-case 控制语句 6.1.3 for 循环和while 循环 6.1.4 控制程序流和的其他常用指令 6.1.1 if-else-end 条件控制 0.1x 2 例 6.1-1 】已知y e sin x 0.5(x 0.1) sin x ,在50 x 5 区间,求函数的最小值。

回顾与复习 : [x,fval,exitflag,output]=fminbnd(fun,x1,x2,options) 求一元函数在区间 (x1, x2)中极小值 在第四章中采用的方法 ( 1)采用优化算法求极小值 x1=-50;x2=5; % yx=@(x)(sin(x)^2*exp(-0.1*x)-0.5*sin(x)*(x+0.1)); [xc0,fc0,exitflag,output]=fminbnd(yx,x1,x2) <9> % ( 2)据图形观察,重设 fminbnd 的搜索区间 xx=[-23,-20,-18]; % fc=fc0;xc=xc0; % for k=1:2 [xw,fw]=fminbnd(yx,xx(k),xx(k+1)); <16> if fw

知识讲解-函数及其表示方法-基础

函数及其表示方法 编稿:丁会敏审稿:王静伟 【学习目标】 (1)会用集合与对应的语言刻画函数,会求一些简单函数的定义域和值域,初步掌握换元法的简单运用. (2)能正确认识和使用函数的三种表示法:解析法,列表法和图象法.了解每种方法的优点.在实际情境中,会根据不同的需要选择恰当的方法表示函数. (3)求简单分段函数的解析式;了解分段函数及其简单应用. 【要点梳理】 要点一、函数的概念 1.函数的定义 设A、B是非空的数集,如果按照某个确定的对应关系f,使对于集合A中的任意一个数x,在集合B中都有唯一确定的数f(x)和它对应,那么就称f:A→B为从集合A到集合B的一个函数. 记作:y=f(x),x∈A. 其中,x叫做自变量,x的取值范围A叫做函数的定义域;与x的值相对应的y值叫做函数值,函数值的集合{f(x)|x∈A}叫做函数的值域. 要点诠释: (1)A、B集合的非空性;(2)对应关系的存在性、唯一性、确定性;(3)A中元素的无剩余性;(4)B中元素的可剩余性。 2.构成函数的三要素:定义域、对应关系和值域 ①构成函数的三个要素是定义域、对应关系和值域.由于值域是由定义域和对应关系决定的,所以,如果两个函数的定义域和对应关系完全—致,即称这两个函数相等(或为同一函数); ②两个函数相等当且仅当它们的定义域和对应关系完全—致,而与表示自变量和函数值的字母无关. 3.区间的概念 (1)区间的分类:开区间、闭区间、半开半闭区间; (2)无穷区间; (3)区间的数轴表示. 区间表示: <<= {x|a≤x≤b}=[a,b]; x a x b a b {|}(,); (] x a x b a b ≤<=; {|}, x a x b a b {|}, <≤=;[) (][) x x b b x a x a ≤=∞≤=+∞. {|}-,; {|}, 要点二、函数的表示法 1.函数的三种表示方法: 解析法:用数学表达式表示两个变量之间的对应关系.优点:简明,给自变量求函数值. 图象法:用图象表示两个变量之间的对应关系.优点:直观形象,反应变化趋势. 列表法:列出表格来表示两个变量之间的对应关系.优点:不需计算就可看出函数值. 2.分段函数: 分段函数的解析式不能写成几个不同的方程,而应写函数几种不同的表达式并用个左大括号括起来,并分别注明各部分的自变量的取值情况. 要点三、映射与函数 1.映射定义: 设A、B是两个非空集合,如果按照某个对应法则f,对于集合A中的任何一个元素,在集合B中都有唯一的元素和它对应,这样的对应叫做从A到B的映射;记为f:A→B. 象与原象:如果给定一个从集合A到集合B的映射,那么A中的元素a对应的B中的元素b叫做a的象,a

函数句柄和匿名函数

函数句柄和匿名函数 内联函数inline 下面代码创建一个内联函数f: >> f = inline('1./((x-3).^2+0.01)+1./((x-.9).^2+0.04)-6','x') f(x) = 1./((x-3).^2+0.01)+1./((x-.9).^2+0.04)-6 上例中,函数inline从一个字符串创建一个函数,并以x为输入变量。要在一个函数中调用内联函数,只要将该内联函数的名字作为输入参数传递给函数即可。例如,要将quad(Fun,low,high)中的Fun 换为上面的内联韩式f,只要按下面的方式调用即可: quad(f,low,high)。 要验证一个由字符串表示的函数或一个内联函数,可以使用feval函数。下面的代码验证了正弦函数和前面创建的f函数 >> y = feval('sin',pi*(0:4)/4) y = 0 0.7071 1.0000 0.7071 0.0000 >> z = feval(f,[1- 0 1]) z=

-5.1378 5.1765 16 匿名函数 除了字符串函数和内联函数外,还由一种函数类型:匿名函数,并用函数句柄表示它。在应用中并不鼓励用户使用前两种方法,而是要尽量使用匿名韩式句柄来引用函数。下面代码给出了一个匿名函数的例子: f = @ (x) 1./((x-3).^2+0.01)+1./((x-.9).^2+0.04)-6; 其中,@符号意味这等号左边是一个函数句柄。@后面的(x)定义了函数的输入参数,最后一部分是函数表达式。我们同样可以利用feval 函数来验证匿名函数,例如,可以使用下面代码验证af_humps:>> z = feval(af_humps,[-1 0 1]) z = -5.1378 5.1765 16.0000 其实,用户根本没有必要利用feval函数来验证匿名函数,因为匿名函数可以使用自己的函数句柄直接进行验证,例如,上面的例子可以简写为: >> z = f([-1 0 1]) z =

相关主题
文本预览
相关文档 最新文档