matlabR第六章答案.docx

上传人:b****6 文档编号:6388856 上传时间:2023-01-06 格式:DOCX 页数:19 大小:98.86KB
下载 相关 举报
matlabR第六章答案.docx_第1页
第1页 / 共19页
matlabR第六章答案.docx_第2页
第2页 / 共19页
matlabR第六章答案.docx_第3页
第3页 / 共19页
matlabR第六章答案.docx_第4页
第4页 / 共19页
matlabR第六章答案.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

matlabR第六章答案.docx

《matlabR第六章答案.docx》由会员分享,可在线阅读,更多相关《matlabR第六章答案.docx(19页珍藏版)》请在冰豆网上搜索。

matlabR第六章答案.docx

matlabR第六章答案

第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)

clear

clc

while1%<6>

n=input('请输入一个能被4整除的正整数!

n=');

ifmod(n,4)==0%<8>

break%<9>

end%<10>

end%<11>

G=logical(eye(4,4)+rot90(eye(4,4)));%

m=n/4;

K=repmat(G,m,m);%

N=n^2;

A=reshape(1:

N,n,n);

A(K)=N-A(K)+1%

请输入一个能被4整除的正整数!

n=A=

1441325108966173604810912112

21311193850837186983523134

31301183951827087993422135

141162810593647657451121249

140172910492657756441131258

612711542547967901023119138

712611443557866911033018139

137203210189688053411161285

136213310088698152401171294

1012311146587563941062715142

1112211047597462951072614143

13324369785728449371201321

(2)

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可用以记录计算所花的时间。

1.for循环求解

tic

a=0;

fori=0:

1000000;

a=a+0.2^i;

end

a

t1=toc

a=

1.2500

t1=

0.1316

While循环求解:

clear

tic

K=0;

i=0;

whilei<=1000000

K=K+0.2^i;

i=i+1;

end

K

t2=toc

K=

1.2500

 

t2=

0.1407

数值法求解:

tic

i=0:

1000000;

d=0.2.^i;

K2=sum(d)

t3=toc

K2=

1.2500

 

t3=

0.0981

符号法求解:

clear

tic

symsi

fi=0.2^i;

K=vpa(symsum(fi,i,0,inf))

t4=toc

K=

1.25

t4=

3.0357

 

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

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

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

(提示:

nargin,error,int2str)

function[]=xitiliu(N)

%画出N边形

%xitiliu(),画出单位圆

%xitiliu(N),画出大于的N边形

switchnargin

case0

N=100;

R=1;

t=0:

2*pi/N:

2*pi;

x=R*cos(t);

y=R*sin(t);

plot(x,y,'-r','lineWidth',5);

title('circle')

axisequal

axisoff

shg

case1

ifN~=round(N)||N==2||N<=0

error('请输入大于2的整数')

elseifN==round(N)

R=1;

t=0:

2*pi/N:

2*pi;

x=R*cos(t);

y=R*sin(t);

plot(x,y,'-r','lineWidth',4)

title(['polygonnit','int2str(N)','edges'])

axisequal

%axisoff

shg

end

end

 

xitiliu(6)

3.用泛函指令fminbnd求

在x=0附近的极小值。

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

(提示:

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

.clear

symsx

x1=-20;x2=20;

yx=@(x)(-exp(-x)*abs(sin(cos(x))));

[xn0,feal,exitflag,output]=fminbnd(yx,x1,x2)

xn0=

-19.7129

 

feal=

-2.2031e+008

 

exitflag=

1

 

output=

iterations:

16

funcCount:

17

algorithm:

'goldensectionsearch,parabolicinterpolation'

message:

[1x112char]

 

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,及字符串的拆分、合并操作技术。

clear

b=pwd

which('smoke')

b_d=b;

b_d(end-4:

end)=[];

str=[b_d,'\toolbox\matlab\elmat\private'];

cd(str)

SM=@smoke;

cd(b)

A=SM(3,0,'double')

disp('')

pwd

which('smoke')

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

当前位置:首页 > 表格模板 > 合同协议

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

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