ch6编程.docx

上传人:b****5 文档编号:8517654 上传时间:2023-01-31 格式:DOCX 页数:14 大小:109.38KB
下载 相关 举报
ch6编程.docx_第1页
第1页 / 共14页
ch6编程.docx_第2页
第2页 / 共14页
ch6编程.docx_第3页
第3页 / 共14页
ch6编程.docx_第4页
第4页 / 共14页
ch6编程.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

ch6编程.docx

《ch6编程.docx》由会员分享,可在线阅读,更多相关《ch6编程.docx(14页珍藏版)》请在冰豆网上搜索。

ch6编程.docx

ch6编程

第6章M文件和函数句柄

.1MATLAB控制流

.1.1if-else-end条件控制

【例6.1-1】

(1)

functiony=exm060101(x)

%

n=length(x);

fork=1:

n

ifx(k)<-1

y(k)=x(k);

elseifx(k)>=1

y(k)=exp(1-x(k));

else

y(k)=x(k)^3;

end

end

(2)

x=[-2,-1.2,-0.4,0.8,1,6]

y=exm060101(x)

x=

-2.0000-1.2000-0.40000.80001.00006.0000

y=

-2.0000-1.2000-0.06400.51201.00000.0067

.1.2switch-case控制结构

【例6.1-2】

clear;

%

fork=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>

%

fork=1:

5

switchA{2,k}%

case100%

r='满分';

casea%

r='优秀';

caseb%

r='良好';

casec%

r='及格';

otherwise%

r='不及格';

end

A(3,k)={r};

end

A

A=

'Jack''Marry''Peter''Rose''Tom'

[72][83][56][94][100]

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

.1.3for循环和while循环

【例6.1-3】

(1)

K=5;

A=zeros(K,K);%

form=1:

K%

forn=1:

K%

A(m,n)=1/(m+n-1);

end

end

formatrat

A

formatshortg

A=

11/21/31/41/5

1/21/31/41/51/6

1/31/41/51/61/7

1/41/51/61/71/8

1/51/61/71/81/9

(2)

%

clear

tic%

K=1000;

form=1:

K

forn=1:

K

A1(m,n)=1/(m+n-1);

end

end

t1=toc%

t1=

17.434

%

tic

K=1000;

A2=zeros(K,K);%

form=1:

K

forn=1:

K

A2(m,n)=1/(m+n-1);

end

end

t2=toc

t2=

2.1895

(3)

%

tic

N=1000;

n=repmat(1:

N,N,1);

m=n';

A3=1./(n+m-1);

t3=toc

t3=

0.13909

【例6.1-4】

(1)

function[S,N]=exm060104(epsilon)

%

k=0;

s=0;

d=inf;

S=0;

whiled>epsilon

k=k+1;

s=s+k;%

d=1/s;

S=S+d;

end

N=k;

(2)

[S,N]=exm060104(0.0001)

S=

1.9859

N=

141

symsknN

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

SINF=

2

N=141;

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

SN=

1.9859154929577464788732394366197

【例6.1-5】

(1)

(2)

clear,clc

n=12;

[A,n]=exm060105_ZZY(n);

s0=round(n*(n*n+1)/2);%

disp([int2str(n),'阶魔方矩阵的标称和是',int2str(s0)])

Ns0=round(2*(n+1));%

B=A';

SC=sum(A);%

SR=sum(B);%

Sd=sum(diag(A));%

Sdi=sum(diag(B));%

LS=[SC,SR,Sd,Sdi]==s0;%

NS=round(sum(LS));%

ifNS==Ns0

disp('经验证,A是魔方矩阵。

')

else

disp('经验证,A不是魔方矩阵。

')

end

12阶魔方矩阵的标称和是870

经验证,A是魔方矩阵。

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

.2脚本文件和函数文件

.2.1M脚本文件

.2.2M函数文件

.2.3局部变量和全局变量

.2.4M函数文件的一般结构

【例6.2-1】

(1)

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

%

switchnargin

case0

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

case1

R=1;str='-b';

case2

str='-b';

case3

;%

otherwise

error('输入量太多。

');

end;

t=0:

2*pi/N:

2*pi;

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

ifnargout==0

plot(x,y,str);

elseifnargout>2

error('输出量太多。

');

else

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

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

fill(x,y,str)

end

axisequalsquare

boxon

shg

(2)

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

S=

10.3923

L=

12.0000

图6.2-1绿色正六边形

.3MATLAB的函数类别

.3.1主函数(Primaryfunction)

.3.2子函数(Subfunction)

【例6.3-1】

(1)

functionHr=exm060301(flag)

%

t=(0:

50)/50*2*pi;

x=sin(t);

y=cos(t);

Hr=@cirline;%

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

%

functioncirline(wd,x,y,t)

%

switchwd

case'line'

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

case'circle'

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

axissquareoff

otherwise

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

')

end

shg

(2)

HH=exm060301('circle')

HH=

@cirline

图6.3-1绿色圆周线

(3)

t=0:

2*pi/5:

2*pi;x=cos(t);y=sin(t);%

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

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

.3.3匿名函数(Anonymousfunction)

.4函数句柄

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

【例6.4-1】

(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:

'C:

\MATLABR2010a\toolbox\matlab\elmat\magic.m'

(4)

M1=hm(4)

M1=

162313

511108

97612

414151

(5)

M2=feval(hm,4)

M2=

162313

511108

97612

414151

.4.2函数句柄的基本用法

【例6.4-2】

(1)

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

S=

5.1962

L=

10.3923

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

(2)

Hexm=@exm060201,%

Hexm=

@exm060201

(3)

which('exm060201')

'exm060201'notfound.

(5)

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

?

?

?

Undefinedcommand/function'exm060201'.

(6)

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

S=

5.1962

L=

10.3923

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

【例6.4-3】

(1)

clear

(2)

Hexm_2=@exm060201

Hexm_2=

@exm060201

(3)

class(Hexm_2)

isa(Hexm_2,'function_handle')

ans=

function_handle

ans=

1

(4)

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

?

?

?

Undefinedcommand/function'exm060201'.

习题6

1.请分别写出用for和while循环语句计算

的程序。

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

(提示:

sum和“指数采用数组”配合;tic,toc可用以记录计算所花的时间。

2.编写一个函数M文件,它的功能:

没有输入量时,画出单位圆(见图p6-1);输入量是大于2的自然数N时,绘制正N边形,图名应反映显示多边形的真实边数(见图p6-2);输入量是“非自然数”时,给出“出错提示”。

此外,函数M文件应有H1行、帮助说明和程序编写人姓名。

(提示:

nargin,error,int2str)

图p6-1

图p6-2

3.用泛函指令fminbnd求

在x=0附近的极小值。

fminbnd的第一个输入量要求使用匿名函数表达。

(提示:

注意搜索范围的选择;假如极值在边界附近,进一步扩大搜索范围是合理的选择。

4.在matlab的\toolbox\matlab\elmat\private文件夹上有一个“烟圈矩阵”发生函数smoke.m。

运行指令smoke(3,0,'double'),将生成一个3阶伪特征根矩阵如下

A=

-0.5000+0.8660i1.00000

0-0.5000-0.8660i1.0000

1.000001.0000

现在的问题是:

在MATLAB当前目录为\work情况下,如何利用函数句柄调用smoke.m函数,产生3阶伪特征根矩阵。

请写出相应的程序或操作步骤。

(提示:

注意函数句柄创建的有效性;若想编写能完全自动执行的解题程序,注意使用cd,pwd,which,及字符串的拆分、合并操作技术。

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

当前位置:首页 > 工程科技 > 建筑土木

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

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