MATLAB教程2012a第6章习题解答-张志涌

更新时间:2023-10-16 11:20:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第6章 M文件和句柄函数

习题6及解答

1 请

分别写出用

for 和while 循环语句计算

1000000K??0.2i?1?0.2?0.22??0.21000000的程序。此外,还请写出

i?0避免循环的数值、符号计算程序。

〖解答〗 (1)for 环

tic s1=0;

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

1.2500

Elapsed time is 1.453482 seconds.

(2)while环

tic

s2=1;k=1;

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

1.2500

Elapsed time is 2.716870 seconds.

(3)数值求和指令

tic

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

1.2500

Elapsed time is 0.626723 seconds.

(4)符号求和指令

tic

syms k;

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

1

1.2500000000000000000000000000000 Elapsed time is 4.029501 seconds.

〖说明〗

? 使用数值求和指令和“数组运算”的计算速度最快。 ? 符号计算的精度最高,但速度慢。 ? 以上程序运行时间仅供参考。具体时间与所用机器、那程序是否初次运行、在MATLAB

指令窗还是在M-book中运行等因素有关。

2 编写一个函数

M文件,它的功能:没有输入量时,画出单位圆

(见图p6.2-1);输入量是大于2的自然数N时,绘制正N边形,图名应反映显示多边形的真实边数(见图p6.2-2);输入量是“非自然数”时,给出“出错提示”。此外,函数M文件应有H1行、帮助说明和程序编写人姓名。

〖解答〗

(1)函数M文件

function prob_solve602(n)

% prob_solve602(n) plot a circle or a polygon with n edges % prob_solve602 plot a circle % n 应为大于2的自然数

% By ZZY, 2006-2-15 if nargin==0

t=0:pi/100:2*pi; x=exp(i*t); str='Circle'; else

if (nargin~=0)&(n<=2)

error('输入量应是大于2的自然数') end;

if n-round(n)~=0 %检查非自然数 error('输入量应是大于2的自然数') end;

t=(0:n)/n*2*pi; x=exp(i*t);

str=['Polygon with ', int2str(n),' edges']; % 合成字符串 end

plot(real(x),imag(x),'r','LineWidth',4) title(str)

axis square image off shg

(2)各典型运行情况

prob_solve602

2

Circle图 p6.2-1

prob_solve602(6) Polygon with 6 edges图 p6.2-2

prob_solve602(2)

??? Error using ==> prob_solve602 输入量应是大于2的自然数

prob_solve602(7.3)

??? Error using ==> prob_solve602 输入量应是大于2的自然数

3 用泛函指令

fminbnd求y(x)??e?x|sin[cosx]|在x=0附近的极小

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

〖解答〗

(1)在0附近的较小区间 [-0.5, 0.5]内搜索

3

y=@(x)-exp(-x).*abs(sin(cos(x))); [x1,y1]=fminbnd(y,-0.5,0.5) x1 =

-0.4999 y1 =

-1.2681

(2)在包含0的更大区间内搜索 在 [-0.5, 0.5] 区间搜索到的极小值点在该搜索区间的边界上,所以搜索区间应该进一步扩大。

[x2,y2]=fminbnd(y,-1,1) x2 =

-0.8634 y2 =

-1.4348

〖说明〗

? 在[-1, 1]区间的搜索结果是区间的内点。进一步扩大搜索区间,只可能找到更远离0的

极小值点,所以没有必要进一步搜索。

4 在matlab的 \\toolbox\\matlab\\elmat\\private文件夹上有一个“烟

圈矩阵”发生函数smoke.m。运行指令smoke(3,0,'double') ,将生成一个3阶伪特征根矩阵如下

A =

-0.5000 + 0.8660i 1.0000 0 0 -0.5000 - 0.8660i 1.0000 1.0000 0 1.0000

现在的问题是:在MATLAB当前目录为\\work情况下,如何利用函数句柄调用smoke.m函数,产生3阶伪特征根矩阵。请写出相应的程序或操作步骤。

clear

b=pwd %获取当前目录名字符串

which('smoke') %检查在当前目录下能否看到smoke.m b_d=b;

b_d(end-4:end)=[]; %在b字符串中去除最后的四个字符,即work。

str=[b_d,'\\toolbox\\matlab\\elmat\\private']; %构造smoke所在的目录字符串 cd(str) %把smoke.m 所在目录设置为当前目录。 SM=@smoke; %创建smoke.m的函数句柄 cd(b) %使work恢复为当前目录

disp(' ') %为显示清楚起见,产生一个显示空行。

A=SM(3,0,'double') %产生一个3阶“伪特征根”矩阵 disp(' ') pwd %显示当前所在目录,以证实符合题意。

which('smoke') %再次检查在当前目录下能否看到smoke.m,起证实作用。disp(' ') b =

C:\\MATLAB2006\\R2006a\\work 'smoke' not found. A =

-0.5000 + 0.8660i 1.0000 0 0 -0.5000 - 0.8660i 1.0000 1.0000 0 1.0000

4

ans =

C:\\MATLAB2006\\R2006a\\work 'smoke' not found.

(2)在当前目录下,进行直接调用smoke.m的尝试

B=smoke(3,0,'double') %用来证实:直接调用smoke函数将失败的事实 ??? Undefined command/function 'smoke'.

5

本文来源:https://www.bwwdw.com/article/c0ff.html

Top