n6ch07Word文档下载推荐.docx

上传人:b****3 文档编号:17272184 上传时间:2022-11-30 格式:DOCX 页数:14 大小:35.50KB
下载 相关 举报
n6ch07Word文档下载推荐.docx_第1页
第1页 / 共14页
n6ch07Word文档下载推荐.docx_第2页
第2页 / 共14页
n6ch07Word文档下载推荐.docx_第3页
第3页 / 共14页
n6ch07Word文档下载推荐.docx_第4页
第4页 / 共14页
n6ch07Word文档下载推荐.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

n6ch07Word文档下载推荐.docx

《n6ch07Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《n6ch07Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。

n6ch07Word文档下载推荐.docx

n=100;

a=ones(1,n);

fori=3:

n

a(i)=a(i-1)+a(i-2);

ifa(i)>

a(i),

break;

end;

end,i

10946

21

.2.4switch-case结构

【例7.2-5】学生的成绩管理,用来演示switch结构的应用。

clear;

fori=1:

a{i}=89+i;

b{i}=79+i;

c{i}=69+i;

d{i}=59+i;

c=[d,c];

Name={'

Jack'

'

Marry'

Peter'

Rose'

Tom'

};

Mark={72,83,56,94,100};

Rank=cell(1,5);

S=struct('

Name'

Name,'

Marks'

Mark,'

Rank'

Rank);

5

switchS(i).Marks

case100

S(i).Rank='

满分'

;

casea

优秀'

caseb

良好'

casec

及格'

otherwise

不及格'

end

end

disp(['

学生姓名'

得分'

等级'

]);

disp('

'

5;

disp([S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank]);

学生姓名得分等级

Jack72及格

Marry83良好

Peter56不及格

Rose94优秀

Tom100满分

.2.5try-catch结构

【例7.2-6】try-catch结构应用实例。

clear,N=4;

A=magic(3);

try

A_N=A(N,:

),

catch

A_end=A(end,:

),

lasterr

A_end=

492

Indexexceedsmatrixdimensions.

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

.3脚本文件和函数文件

.3.1M脚本文件

.3.2M函数文件

.3.3局部变量和全局变量

.3.4M文件的一般结构

【例7.3-1】M函数文件示例。

[circle.m]

functionsa=circle(r,s)

%CIRCLEplotacircleofradiirinthelinespecifiedbys.

%r指定半径的数值

%s指定线色的字符串

%sa圆面积

%

%circle(r)利用蓝实线画半径为r的圆周线.

%circle(r,s)利用串s指定的线色画半径为r的圆周线.

%sa=circle(r)计算圆面积,并画半径为r的蓝色圆面.

%sa=circle(r,s)计算圆面积,并画半径为r的s色圆面.

%编写于1999年4月7日,修改于1999年8月27日。

ifnargin>

2

error('

输入宗量太多。

'

);

ifnargin==1

s='

b'

clf;

t=0:

pi/100:

2*pi;

x=r*exp(i*t);

ifnargout==0

plot(x,s);

else

sa=pi*r*r;

fill(real(x),imag(x),s)

axis('

square'

.3.5P码文件

10一语法分析过程和伪代码

10二P码文件的预生成

10三内存中P码文件的列表和清除

.3.6MATLAB的搜索过程

.4变量的检测传递和限权使用函数

.4.1输入输出宗量检测指令

.4.2跨空间变量传递

10一跨空间计算串表达式的值

【例7.4-1】evalin运行机理与eval的异同。

(1)编写M函数文件

[evalinzzy.m]

functiony1=evalinzzy(a,s)

t=(0:

a)/a*2*pi;

y1=subevalinzzy(4,s);

%------------subfunction-------------

functiony2=subevalinzzy(a,s)

ss='

a*exp(i*t)'

switchs

case{'

base'

caller'

}

y2=evalin(s,ss);

case'

self'

y2=eval(ss);

(2)在Notebook或MATLAB指令窗中运行以下指令

clear,a=30;

sss={'

fork=1:

3

y0=evalinzzy(8,sss{k});

subplot(1,3,k)

plot(real(y0),imag(y0),'

r'

LineWidth'

3),axissquareimage

end

图7.4-1利用不同工作空间中的变量值计算eval('

10二跨空间赋值

【例7.4-2】assignin运作机理示范。

[assigninxyq.m]

functiony=assigninxyq(x)

y=sqrt(x);

t=x^2;

assignin('

yy'

t)

(2)在Notebbok或MATLAB指令窗中运行以下指令

x=4;

y=assigninxyq(x);

disp([blanks(5),'

x'

blanks(5),'

y'

blanks(4),'

]),disp([x,y,yy])

xyyy

4216

.4.3子函数和私用函数

10一子函数

10二私用函数

.5串演算函数

.5.1eval

【例7.5-1】计算“语句”串,创建变量。

clear,t=pi;

eval('

theta=t/2,y=sin(theta)'

theta=

1.5708

y=

1

【例7.5-2】计算“合成”串。

CEM={'

cos'

sin'

tan'

theta=pi*k/12;

y(1,k)=eval([CEM{k},'

('

num2str(theta),'

)'

y

0.96590.50001.0000

.5.2feval

【例7.5-3】对字符串类型函数只能用eval,而不能用feval。

x=pi/4;

Ve=eval('

1+sin(x)'

Ve=

1.7071

Vf=feval('

x)

?

Errorusing==>

feval

Invalidfunctionname'

.

【例7.5-4】函数句柄只能被feval运用,而不能被eval调用。

(1)

rand('

seed'

1);

A=rand(2,2);

Heig=@eig;

d=feval(Heig,A)

d=

0.7568

-0.1488

(2)

de=eval(Heig,A)

eval

Function'

eval'

notdefinedforvariablesofclass'

function_handle'

(3)

dn=feval('

eig'

A)

dn=

.5.3内联函数

【例7.5-5】用内联函数对象实现

G=inline('

a*exp(x)*cos(y)'

a'

disp([class(G),blanks(10),char(G)])

argnames(G)

inlinea*exp(x)*cos(y)

ans=

GG=vectorize(G)

GG=

Inlinefunction:

GG(a,x,y)=a.*exp(x).*cos(y)

GG(2,[1,2],[pi/3,pi])

2.7183-14.7781

【例7.5-6】演示:

最简练格式创建内联函数;

内联函数可被feval指令调用。

Z2=inline('

P1*x*sin(x^2+P2)'

2)

Z2=

Z2(x,P1,P2)=P1*x*sin(x^2+P2)

z2=Z2(2,2,3)

fz2=feval(Z2,2,2,3)

z2=

2.6279

fz2=

2.6279

.6函数句柄

.6.1函数句柄的创建和观察

【例7.6-1】为MATLAB的“内建”函数创建函数句柄,并观察其内涵。

hsin=@sin;

class(hsin)

size(hsin)

function_handle

11

CC=functions(hsin)

CC=

function:

type:

overloaded'

file:

MATLABbuilt-infunction'

methods:

[1x1struct]

(4)

CC.methods

sym:

d:

\matlabr12\toolbox\symbolic\@sym\sin'

.6.2函数句柄的基本用法

【例7.6-2】本例通过sin函数及其句柄演示若干基本用法。

fhandle=str2func('

ys=sin(pi/4)

yfold=feval('

pi/4)

yfnew=feval(fhandle,pi/4)

ys=

0.7071

yfold=

yfnew=

0.7071

Alpha=sym('

pi/4'

yss=sin(Alpha)

Alpha)

ynews=feval(fhandle,Alpha)

yss=

1/2*2^(1/2)

ynews=

1/2*2^(1/2)

xold=fminbnd('

0,2*pi)

xnew=fminbnd(fhandle,0,2*pi)

xold=

4.7124

xnew=

4.7124

【例7.6-3】自建函数及其句柄的使用。

通过本例可看到:

只要在当前MATLAB工作空间中存在函数句柄,那末不管该函数当前是否在搜索范围内,均可通过函数句柄实现正确的运作。

[zzy076_3.m]

functionHr=zzy076_3(flag)

%ZZY076_3为演示函数、子函数句柄而设计的绘图文件。

%flag可以取字符串'

line'

或'

circle'

100)/100*2*pi;

x=sin(t);

y=cos(t);

Hr=@cirline;

%创建子函数的句柄

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

%-------------subfunction---------------------------

functioncirline(wd,x,y,t)

%wd接受字符串'

或'

%t画线用的独立参变量

%x由t产生的横坐标变量

%y由t产生的纵坐标变量

switchwd

plot(t,x,'

t,y,'

2)

plot(x,y,'

g.'

MarkerSize'

30),

axissquareoff

otherwise

输入宗量只能取'

或'

shg

Hzzy076_3=@zzy076_3

zzy076_3('

Hzzy076_3=

@zzy076_3

图7.6_1exm076_3.m绘制的曲线

which('

zzy076_3'

zzy076_3notfound.

feval('

Undefinedfunctionorvariable'

(6)

feval(Hzzy076_3,'

【例7.6-4】子函数句柄的创建与使用。

本例仍然使用上例中的zzy076_3.m文件。

通过本例可以看到:

原先只能在“父函数”视野(Scope)内被调用的子函数,借助其句柄,可扩大使用范围。

即,只要MATLAB工作空间中有子函数的句柄,它就能被正确调用,不管该子函数是否在当前视野内,也不管该子函数的父函数是否在搜索路径上。

HCL=zzy076_3('

HCL=

@cirline

图7.6_2zzy076_3.m绘制的圆

tt=(0:

xx=sin(tt);

yy=cos(tt);

cirline('

xx,yy,tt);

xx,yy,tt)

cirline'

feval(HCL,'

习题7

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1