解答手册 ©

配套教材

MATLAB 工程应用 第五版

作者

William J. Palm III

罗得岛大学

第 1 章习题解答

文字处理软件与解答文件使用提示

MATLAB 内置编辑器不能识别标准键盘以外的某些符号。因此,将文字处理软件中的文件复制粘贴到编辑器时,若文件包含非标准键盘符号,编辑器可能报错。例如,表达式 y = -2*x 中的减号用连字符输入,并非公式编辑器生成的“真正的”减号。将后者粘贴到 MATLAB 编辑器会报错,许多其他符号及希腊字母也有同样问题。

另一类错误来自成对的单引号,例如 xlabel('x')。某些文字处理软件会自动将其转换为“智能引号”(如 `x´),这也会使 MATLAB 编辑器报错。此外,MATLAB 编辑器用三个句点 (. . .) 表示续行,而某些文字处理软件会将它们合成一个编辑器无法识别的符号。因此,创建文件时只使用标准键盘上的符号,可避免这类错误。

本解答手册尽量避免在 MATLAB 代码中使用智能引号、单字符省略号及“真正的”减号,以便将代码直接复制粘贴到 MATLAB 编辑器。如有遗漏,请告知。

 

理解测试题

T1.1-1 根据已安装的工具箱,您应看到类似以下内容。

MATLAB                                   Version 9.10        (R2021a)

Simulink                                   Version 10.3        (R2021a)

Control System Toolbox        Version 10.10     (R2021a)

Symbolic Math Toolbox         Version 8.7         (R2021a)

 

T1.1-2  a) 6*10/13 + 18/(5*7) + 5*9^2. 答案为 410.1297.

b) 6*35^(1/4) + 14^0.35. 答案为 17.1123.

 

T1.1-3 输入题目给出的表达式,可得到 a) 0.04 b) 0.02 c) 0.2 d) 32。

 

T1.1-4 命令窗口操作如下:

>>x = -5 +9i; y = 6 - 2i;

>>S = x +y

S =

   1.0000 + 7.0000i

>>P = x*y

P =

 -12.0000 +64.0000i

>>R = x/y

R =

  -1.2000 + 1.1000i

 

T1.3-1 命令窗口操作如下:

>>x = cos(0):0.02:log10(100);

>>length(x)

ans =

51

>>x(25)

ans =

1.4800

 

T1.3-2 命令窗口操作如下:

>>roots([1, 6, -11, 290]

原文疑似笔误:roots 命令缺少右括号。

ans =

-10.000

2.0000 + 5.0000i

2.0000 - 5.0000i

根为 −10 和 2 ± 5i。

 

T1.3-3 脚本如下:

x = 0:0.01:10;

y = 3*x.^2 + 2;

plot(x,y), xlabel('x'),ylabel('y')

题图 T1.3-3

 

T1.3-4 命令窗口操作如下:

>>t = 0:0.01:5;

>>s = 2*sin(3*t+2) + sqrt(5*t+1);

>>plot(t,s),xlabel('Time (sec)'),ylabel('Speed (ft/sec)')

题图 T1.3-4

 

T1.3-5 命令窗口操作如下:

>>x = 0:0.01:1.5;

>>y = 4*sqrt(6*x+1);

>>z = 5*exp(0.3*x)-2*x;

>>plot(x,y,x,z,'--'),xlabel('Distance (m)'),ylabel('Force (N)')

题图 T1.3-5

 

T1.4-1 脚本如下:

r = input('Enter the sphere radius:');

A = 4*pi*r^2;

disp('The surface area is:')

disp(A)

 

T1.4-2 脚本如下:

a = input('Enter a: ')

b = input('Enter b: ')

c = sqrt(a^2+b^2)

 

T1.5-1 输入 help nthroot,返回:

“nthroot(X, N) 返回 X 中各元素的实数 N 次根。”

“X 和 N 均须为实数;若 X 为负数,N 须为奇整数。”

 

T1.5-2 输入 lookfor hyperbolic,将返回 30 多个函数。

 

T1.5-3 输入“help why”,返回:

“why 为几乎所有问题提供简短的回答。”

“单独使用 why 时,给出一个随机答案。”

“why(N) 给出第 N 个答案。”

“请根据自己的喜好完善或修改此函数。”

 

章末习题

1.1   命令窗口操作如下:

>>x = 10; y = 3;

>>u = x + y

u =

13

>>v = x*y

v =

30

>>w = x/y

w =

3.3333

>>z = sin(x)

z =

-0.5440

>>r = 8*sin(y)

r =

1.1290

>>s = 5*sin(2*y)

s =

-1.3971

 

1.2 命令窗口操作如下:

>>y*x^3/(x-y)

ans =

-13.3333

>>3*x/(2*y)

ans =

0.6000

>>3*x*y/2

ans =

15

>>x^5/(x^5-1)

ans =

1.0323

 

1.3 命令窗口操作如下:

>>x = 5; y = 2;

>>1/(1-1/x^5)

ans =

1.0003

>>3*pi*x^2

ans =

235.6194

>>3*y/(4*x-8)

ans =

0.5000

>>4*(y-5)/(3*x-6)

ans =

-1.3333

 

1.4 a) x = 3;y = 6*x^3 + 4/x. 答案为 y = 50.

原文疑似笔误:本题多项代码与所列数值不一致,例如 a) 代入 x=3 时并不得到 50;此处均按原文保留。

b) x = 7;y = (x/4)*3. 答案为 y = 6.7500.

c) x = 9;y = (4*x)^2/25. 答案为 y = 40.9600.

d) x = 4;y = 2*sin(x)/5. 答案为 y = 0.0564.

e) x = 30;y = 7*x^(1/3) + 4*x^0.58. 答案为 y = 41.7340.

 

1.5 命令窗口操作如下:

>>a = 1.12; b = 2.34; c = 0.72;d = 0.81;f = 19.83;

>>x = 1 + a/b + c/f^2

x =

1.4805

>>s = (b-a)/(d-c)

s =

13.5556

>>r = 1/(1/a + 1/b + 1/c + 1/d)

r =

0.2536

>>y = a*b/c*f^2/2

y =

715.6766

 

1.6 命令窗口操作如下:

>>a = (3/4)*6*7^2+4^5/(7^3-145);

>>b = (48.2*55-9^3)/(53+14^2);

>>c = 27^2/4+319^(4/5)/5+60*14^-3;

答案为:a = 225.6717、b = 7.7189、c = 202.4120。

 

1.7 a) 1/16、16^-1 和 16^(-1) 均得到正确答案:0.0625。

b) 16^(-1/2) 得到正确答案:0.25。16^-1/2 不正确。

c) 16^(-1/2) 得到正确答案:0.25。

d) 64^(3/2) 得到正确答案:512。64^3/2 不正确。

 

1.8  a) 0.01  b) 0.005 c)  0.1  d)  500,000

 

1.9 a) c=8,上溢;b) f = 0,下溢;c) i) x = 8 ii) y = 25,x=7.5

 

1.10 命令窗口操作如下:

>>r = 5; h = 15

>>V = pi*r^2*h;

>>V = 1.2*V;

>>r = (V/(pi*h))^(1/2)

r =  5.4772

所需半径为  5.4772.

 

1.11 命令窗口操作如下:

>>r = 3;

>>V = 4*pi*r^3/4;

原文疑似笔误:球体积式写为 4*pi*r^3/4;通常球体积公式分母为 3,原式及结果未改。

>>V = 1.3*V;

>>r = ((3*V)/(4*pi))^(1/3)

r =

2.9748

所需半径为 2.9748.

 

1.12 命令窗口操作如下

>>x = -7-5i;y = 4+3i;

>>x+y

ans =

-3.0000 - 2.0000i

>>x*y

ans =

-13.0000 -41.0000i

>>x/y

ans =

-1.7200 + 0.0400i

 

1.13 命令窗口操作如下:

>>(3+6i)*(-7-9i)

ans =

33.0000 -69.0000i

>>(5+4i)/(5-4i)

ans =

0.2195 + 0.9756i

>>3i/2

ans =

0 + 1.5000i

>>3/2i

ans =

0 - 1.5000i

 

1.14 命令窗口操作如下:

>>x = 6+9i;y = -5+4i

>>u = x + y

u =

   1.0000 +13.0000i

>>v = x*y

v =

 -66.0000 -21.0000i

>>w = x/y

w =

   0.1463 - 1.6829i

>>z = exp(x)

z =

  -3.6758e+02 + 1.6626e+02i

>>r = sqrt(y)

r =

   0.8376 + 2.3878i

>>s = x*y^2;

s =

   4.1400e+02 - 1.5900e+02i

 

1.15 命令窗口操作如下:

>>n = 1;R = 0.08206;T = 273.2;V=22.41;

>>a = 6.49;b = 0.0562;

>>Pideal = n*R*T/V

Pideal =

1.0004

>>P1 = n*R*T/(V - nb)

原文疑似笔误:nb 未定义,可能漏写乘号。

P1 =

1.0029

>>P2 = (a*n^2)/V^2

P2 =

0.0129

>>Pwaals = P1 + P2

原文疑似笔误:此处用加号组合 P1 与 P2,与通常范德瓦耳斯压力表达式的符号不同。

Pwaals =

1.0158

理想气体定律预测的压力为 1.0004 个大气压,而范德瓦耳斯模型

预测的压力为 1.0158 个大气压。差异主要来自 P2 项,该项描述

分子间的吸引作用。

 

1.16 理想气体定律给出

原文疑似笔误:原文理想气体关系与随后给出的温度体积关系不一致。

因此 T1V1=T2V2,即 V2=V1T2/T1。命令窗口操作如下:

>>V1 = 28500;T1 = 273.2 - 15;T2 = 273.2 + 31;

>>V2 = V1*T2/T1

V2 = 3.3577e+4

体积为 33,577 立方英尺。

 

1.17 a)  exp(2) 得到 7.3891.

b)  log10(2) 得到 0.3010.

c) log(2) 得到 0.6931。ln(2) 返回“未定义函数或变量 'ln'。”

d) 600^(1/4) 得到正确答案:4.9492。600^1/4 得到 150,此结果不正确。

 

1.18 a)  cos(pi/2) 得到 6.1232e-17.

b)  cosd(80) 得到 0.1736.

c)  acos(0.7) 得到 0.7954.

 

1.19 a)  atan(2) 得到 1.1071.

b)atand(100) 得到 89.4271.

c)  atan2d(3,2) 得到 56.3099 度。

d)  atan2d(3,-2) 得到 123.6901 度。

e)  atan2d(-3,2) 得到 -56.3099 度。

d)  acosd(0.6) 得到 53.1301.

原文疑似笔误:小问编号 d) 在原文重复出现。

 

1.20 命令窗口操作如下:

>>x=1:0.2:5;

>>y = 7*sin(4*x);

>>length(y)

ans =

     21

>>y(3)

ans =

     -4.4189

共有 21 个元素。第三个元素为 −4.4189。

 

1.21 命令窗口操作如下:

>>x = sin(-pi/2):0.05:cos(0);

>>length(x)

ans =

41

>>x(10)

ans =

-0.5500

共有 41 个元素。第十个元素为 0.55。

原文疑似笔误:文字写为 0.55,而前面的输出为 -0.5500。

 

1.22 命令窗口操作如下:

>>a = exp(-2.1^3)+3.47*log10(14)+(287)^(1/4);

>>b = 3.4^7*log10(14)+(287)^(1/4);

>>c = (cos(4.12*pi/6))^2;

>>d = cos((4.12*pi/6)^2);

答案为 a = 8.0931、b = 6.0240 × 10³、c = 0.3062、d = −0.0587。

 

1.23 命令窗口操作如下:

>>a = 6*pi*atan(12.5)+4;

>>b = 5*tan(3*asin(13/5));

>>c = 5*log(7);

>>d = 5*log10(7);

结果为 a = 32.1041、b = 0.0000 − 5.0006i、c = 9.7296、d = 4.2255。在 (b) 中,

请注意:当 |x| > 1 时,asin(x) 得到复数结果;当 x 为

复数时,tan(x) 也得到复数结果。

 

1.24 命令窗口操作如下:

>>ratio=10^(1.5*6.8)/10^(1.5*5.8)

ratio =

   31.6228

答案为能量增至 31.6228 倍。

 

1.25 命令窗口操作如下:

>>p = ([13,182,-184,2503];

原文疑似笔误:p 的赋值表达式含未闭合的左圆括号。

>>r = roots(p)

r =

-15.6850

0.8425 + 3.4008i

0.8425 - 3.4008i

根为 x = −15.685 和 x = 0.8425 ± 3.4008i。

 

1.26 命令窗口操作如下:

>>p = [60, 20, -15, 30];

>>roots(p)

ans =

  -1.0381 + 0.0000i

   0.3524 + 0.5979i

   0.3524 - 0.5979i

根为 −1.0381 和 0.3524 ± 0.5979i。

 

1.27 命令窗口操作如下:

>>t = 1:0.005:3;

>>T = 7*log(t) - 8*exp(-0.3*t);

>>plot(t,T),title('Temperature Versus Time'),...

xlabel('Time t (min)'),ylabel('Temperature T ^\circ C)')

题图 1.27

 

1.28 命令窗口操作如下:

>>x = 0:0.01:2;

>>u = 3*log10(70*x+1);

>>v = 4*cos(7*x);

>>plot(x,u,x,v,'--'),ylabel('Speed (mi/hr)'),xlabel('Distance x (mi)')

题图 1.28

 

1.29 命令窗口操作如下

>>x1 = [0,pi];x2 = [-pi,0];

>>x = -pi:0.01:pi;

>>f1 = [1,1];f2 = -[1,1];

>>series=(4/pi)*(sin(x)+(1/3)*sin(3*x)+(1/5)*sin(5*x)+(1/7)*sin(7*x));

>>plot(x,series,x1,f1,x2,f2),xlabel('x')

曲线如图所示。

题图 1.29

 

1.30 命令窗口操作如下

>>r = 10;

>>phi = 0:0.01:4*pi;

>>x = r*(phi-sin(phi));

>>y = r*(1-cos(phi));

>>plot(x,y),xlabel(‘x’),ylabel(‘y’)

原文疑似笔误:xlabel、ylabel 的引号为弯引号,可能导致 MATLAB 报错。

曲线如图所示。

 

1.31 脚本如下

 v=30; % 速度(km/hr)

 T=3; % 总时间(hr)

 phi =  atan(24/17); % 航向角(rad)

 t = 0:0.005:T; % 时间变量

 x = -5 + (v*cos(phi))*t; % x 变量

 y = (24/17)*x + 154/17; % y 变量

 theta = atan2d(y,x); % 方位角

 plot(t,theta), xlabel('t (hr)'),ylabel('theta (deg)')

题图 1.31

 

1.32 答案取决于用户的计算机系统。

 

1.33 注意

因此,面积由下式给出。

可由此解出 L:

周长由下式给出。

脚本文件如下:

W = 8; A = 100;

L = (A - W^2/4)/W

P = 2*L + W + 2*W/sqrt(2)

答案为 L = 10.5 米;总长度即周长 P = 40.3137。

单位为米。

 

1.34 对两个三角形应用余弦定理,得到

利用已知数值,可先由第一个方程求出 a1,再由第二个方程

求出 c2。第二个方程是关于 c2 的二次方程,可写为

脚本文件如下:

b1 = 200;b2 = 180;c1 = 120;

A1 = 120*pi/180;A2 = 100*pi/180;

a = sqrt(b1^2 + c1^2 - 2*b1*c1*cos(A1));

roots([1,-2*b2*cos(A2),b2^2-a^2])

两个根为 c2 = −247.9984 和 c2 = 185.4851。取正根,得到 185 米。

 

1.35 脚本如下

disp('To compute the roots of x^3+ax^2+bx+c=0, enter a, b, and c.')

a = input('Enter a: ');

b = input('Enter b: ');

c = input('Enter c: ');

roots([1,a,b,c])

例如,若 a = 23、b = 4、c = 5,则根为

-22.8344 + 0.0000i

  -0.0828 + 0.4606i

  -0.0828 - 0.4606i

 

1.36 输入“help plot”可获得所需信息。输入“help label”则返回

“未找到 label”。此时需要更具体地指定,例如输入

“help xlabel”,因为 label 不是命令或函数;也可输入“lookfor label”。

类似地,输入“help cos”可获得所需信息,但输入“help cosine”则返回

“未找到 cosine”。输入“lookfor cosine”会引导您找到 cos 命令。

输入“help :”和“help *”可获得所需信息。

 

1.37 输入“help sqrt”,返回“sqrt(X) 为 X 中各元素的平方根。若 X 不是正数,会产生复数结果。”

建议研究 realsqrt(X),该函数返回 X 中各元素的平方根;若 X 为负数,则报错。

 

1.38 输入“help exp”,返回“exp(X) 为 X 中各元素的指数函数,即 e 的 X 次幂。对于复数 Z=X+i*Y,exp(Z) = exp(X)*(COS(Y)+i*SIN(Y))”。

根据欧拉恒等式,若 z = x + iy,则有

 

1.39 (a) 若忽略阻力,机械能守恒意味着球抛出时的动能

必须等于球到达最大高度时的势能。

因此

其中 v 为初速度,h 为最大高度。可由此求解 v:

注意质量 m 被约去,因此结果与 m 无关。

当 h = 20 英尺时,得到

由于多数人更熟悉以英里每小时表示的速度,可将答案换算成该单位,以检查其是否符合实际。结果为 v = 35.9(3600)/5280 = 24.5 英里每小时,看起来合理。

(b) 这里需要考虑杆的抛掷方式以及阻力对杆的影响。

若阻力可忽略,并使质心具有 35.9 英尺/秒的速度,

则杆的质心将达到 20 英尺的高度。然而,若给予杆

相同的动能,却握住杆的一端将其向上抛出,杆就会

旋转,因而达不到 20 英尺。杆的动能为

其中 vmc 为杆质心的速度。在相同转速和动能下,

转动惯量 I 较大的杆所能达到的高度较小,因为其能量中

有更大比例包含在旋转运动中。杆的转动惯量 I 随其长度

和半径增大而增大。此外,较长的杆受到的阻力更大,因而

达到的高度低于利用机械能守恒预测的高度。

 

1.40 (a) 当 A = 0 时,d = L1 + L2。当 A = 180 时,d = L1 − L2。行程为

两者之差。因此行程为 L1 + L2 − (L1 − L2) = 2L2,

仅取决于 L2。

b) MATLAB 命令窗口操作与教材中的示例类似,只是第一幅图取 L1 = 0.6,

第二幅图取 L1 = 1.4。所得曲线见以下两幅图。

两条曲线的总体形状相似,但在竖直方向上相互平移。

 

解答手册 ©

配套教材

MATLAB 工程应用 第五版

作者

William J. Palm III

罗得岛大学

第 2 章习题解答

文字处理软件与解答文件使用提示

MATLAB 内置编辑器不能识别标准键盘以外的某些符号。因此,将文字处理软件中的文件复制粘贴到编辑器时,若文件包含非标准键盘符号,编辑器可能报错。例如,表达式 y = -2*x 中的减号用连字符输入,并非公式编辑器生成的“真正的”减号。将后者粘贴到 MATLAB 编辑器会报错,许多其他符号及希腊字母也有同样问题。

另一类错误来自成对的单引号,例如 xlabel('x')。某些文字处理软件会自动将其转换为“智能引号”(如 `x´),这也会使 MATLAB 编辑器报错。此外,MATLAB 编辑器用三个句点 (. . .) 表示续行,而某些文字处理软件会将它们合成一个编辑器无法识别的符号。因此,创建文件时只使用标准键盘上的符号,可避免这类错误。

本解答手册尽量避免在 MATLAB 代码中使用智能引号、单字符省略号及“真正的”减号,以便将代码直接复制粘贴到 MATLAB 编辑器。如有遗漏,请告知。

 

理解测试题

T2.1-1 命令窗口操作如下

>>B = [2,4,10,13;16,3,7,18;8,4,9,25;3,12,15,17];

>>A=[B;B']

>>A(5,3)

8

 

T2.1-2 a) 命令窗口操作如下

>>B = [2,4,10,13;16,3,7,18;8,4,9,25;3,12,15,17];

>>[x,k] = max(B);

>>[maxB,column]=max(x)

 maxB =

      25

 column

      4

>>row=k(column)

row

     3

b) 继续上述命令窗口操作:

>>C = sort(B)

C =

       2     3     7    13

       3     4     9    17

       8     4    10    18

       16    12    15    25

 

T2.3-1

>> x = [6,5,10]; y = [3,9,8];

>> s =  x+y;

>> w = x.*y;

>> z = y.*x

答案 a. s = [9, 14, 18] b. w = [18, 45, 80] c. z = [18, 45, 80]。两者相同。

 

T2.3-2

>>A=[6,4;5,3]; B=[5,2;7,9];

>>S = A+B;

>>w = A.*B;

>>z = B.*A;

答案 a. S = [11, 6; 12, 12] b. w = [30, 8; 35, 27] c. z = [30, 8; 35, 27]。是。

 

 T2.3-3

>>x=[6,5,10];

>>y=[3,9,8];

>>w=x./y;

>>z=y./x;

答案 a. w=[2, 0.5556, 1.25]     b. z=[0.5, 1.8, 0.8]

 

 T2.3-4

>>A=[6,4;5,3];

>>B=[5,2;7,9];

>>C=A./B;

>>D=B./A;

>>E=A.\B;

>>F=B.\A;

答案 a. C=[1.2, 2; 0.7143, 0.3333] b. D=[0.8333, 0.5; 1.4, 3] c. E=[0.8333, 0.5; 1.4, 3] d. F=[1.2, 2; 0.7143, 0.3333] e. C 与 F 相同;D 与 E 相同。

 

T2.3-5 a) 命令窗口操作如下

>>A = [21,27;-18,8];B = [-7,-3;9,4];

>>A.*B

ans

     -147   -81

     -162    32

>>A./B

ans

     -3    -9

     -2     2

>>B.^3

ans

      -343   -27

      729    64

 

 T2.4-1

>>x=[6;5;3];

>>y=[2,8,7];

>>w=x*y;

>>z=y*x;

答案 a. w=[12, 48, 42; 10, 40, 35; 6, 24, 21] b. z=73,显然不相同!

 

T2.4-2 命令窗口操作如下

>>u = [6,-8,3]; w = [5,3,-4]

>>u*w'

ans

     -6

 

T2.4-3 命令窗口操作如下

>>A = [7,4;-3,2;5,9];B = [1,8;7,6]

>>A*B

ans

     35    80

     11   -12

     68    94

 

T2.4-4  命令窗口操作如下:

>>A = [4,3;8,2];

>>b = [23;6];

>>x = A\b

x =

      2.0000

      5.0000

原文疑似笔误:所列输出为正 5.0000,而随后文字解为 y=-5,存在符号冲突。

为检查答案,计算方程右端:

>>A*x

ans

     23    6

因此,正确解为 x=2、y=-5。

 

T2.4-5 命令窗口操作如下

>>A = [4,-2;3,5];b = [16;-1]

>>x = A\b

x =

    3.0000

     -2.0000

为检查答案,计算方程右端:

>>A*x

ans

     16    -1 

因此,正确解为 x=3、y=-2。

 

T2.4-6  命令窗口操作如下:

>>A = [6, -4, 8; -5, -3, 7; 14, 9, -5];

>>b = [112; 75; -67];

>>x = A\b

x =

     2.0000

     -5.0000

     10.0000

为检查答案,计算方程右端:

>>A*x

ans

     112    75    -67

因此,正确解为 x=2、y=-5、z=10。

 

T2.5-1 命令窗口操作如下

>>roots([1,13,52,6])

ans

    -6.4406 + 2.9980i

    -6.4406 - 2.9980i

     -0.1189         

>>poly(ans)

ans

     1.0000   13.0000   52.0000    6.0000

 

T2.5-2 命令窗口操作如下

>>p1 = [20,-7,5,10];p2 = [4,12,-3]

>>conv(p1,p2)

ans

     80   212  -124   121   105   -30

 

T2.5-3 命令窗口操作如下

>>p1 = [12,5,-2,3];p2 =[3,-7,4 ]

>>[q,r] = deconv(p1,p2)

q =

     4.0000   11.0000

r =

     0    0.0000   59.0000  -41.0000

 

T2.5-4 命令窗口操作如下

>>p1 = [6,4,0,-5];p2 = [12,-7,3,9]

>>ratio = polyval(p1,2)/polyval(p2,2)

ratio =

    0.7108

使用 deconv 命令,操作如下:

>>p1 = [6,4,0,-5]; p2 = [12,-7,3,9]

>>[q,r] = deconv(p1,p2);

>>ratio = polyval(q,2)+polyval(r,2)/polyval(p2,2)

ratio =

   0.7108

 

T2.5-5 命令窗口操作如下

>>x = -7:0.01:1;

>>plot(x,polyval([1,13,52,6],x)),xlabel('x'),ylabel('y')

 

T2.7-1 脚本文件如下

student(1).name = 'John Smith';

student(1).number = '392771786';

student(1).email = 'smithj@myschool.edu';

student(1).tests = [67,75,84];

student(2).name = 'Mary Jones';

student(2).number = '431569832';

student(2).email = 'jonesm@myschool.edu';

student(2).tests = [84,78,93];

student(3).name = 'Alfred E. Newman';

student(3).number = '555123456';

student(3).email = 'NewmanA@myschool.edu';

student(3).tests = [55,45,58];

 

T2.7-2 命令窗口操作如下

>>student(3).tests(2) = 53;

 

T2.7-3 命令窗口操作如下

>>new_student = rmfield(student,'SSN')

 

章末习题

2.1 a) x = [5:23/99:28] 或 x = linspace(5,28,100) 均可。

b) x = [2.:0.2:14] 或 x=linspace(2,14,61)} 均可。

原文疑似笔误:表达式末尾有多余的右花括号。

c) x = [-2:1/7:5] 或 x =linspace(-2,5,50) 均可。

 

2.2 a) 输入 x= logspace(10,1000,50);b) 输入 x=logspace(10,1000,20);

原文疑似笔误:logspace 的前两个参数是以 10 为底的指数;原文写法是否符合题意需结合题干核对。

 

2.3 命令窗口操作如下

>>x = linspace(0,10,6);

>>A = [3*x;5*x-20]

A =

     0     6    12    18    24    30

     -20   -10     0    10    20    30

 

2.4 使用转置运算符。命令窗口操作如下:

>>x = linspace(0,10,6);

>>A = [3*x;5*x-20]'

A =

       0     -20

       6     -10

      12      0

      18    10

      24    20

      30    30

 

2.5 命令窗口操作如下

>>A = [3,7,-4,12;-5,9,10,2;6,13,8,11;15,5,4,1];

>>v = A(:,2);

>>w = A(2,:);

 

2.6 命令窗口操作如下

>>A = [3,7,-4,12;-5,9,10,2;6,13,8,11;15,5,4,1];

>>B = A(:,2:4);

>>C = A(2:4,:);

>>D = A(1:2,2:4);

 

2.7 三个向量的长度均为 3。以下操作计算各元素的绝对值。

>>x = [2,4,7];

>>length(x)

ans

     3

>>abs(x)

ans

     2     4     7

>>y=[2,-4,7];

>>abs(y)

ans

     2     4     7

>>z=[5+3i,-3+4i,2-7i];

>>abs(z)

ans

     5.8310    5.0000    7.2801

 

2.8 命令窗口操作如下

>>A = [3,7,-4,12;-5,9,10,2;6,13,8,11;15,5,4,1];

>>min(A)

ans

     -5     5    -4     1

>>max(A)

ans

15    13    10    12

>>min(A')

ans

     -4    -5     6     1

>>max(A')

ans

     12    10    13    15

 

2.9 命令窗口操作如下

>>A = [3,7,-4,12;-5,9,10,2;6,13,8,11;15,5,4,1];

>>B = sort(A)

 B =

      -5     5    -4     1

     3     7     4     2

     6     9     8    11

     15    13    10    12

>>C = [sort(A')]'

 C =

      -4     3     7    12

      -5     2     9    10

       6     8    11    13

       1     4     5    15

>>D = sum(A)

 D =

     19    34    18    26

>>E = sum(A')

 E =

     18    16    38    25

 

2.10 a) 命令窗口操作如下

>>A = [1,4,2;2,4,100;7,9,7;3,pi,42];

>>B = log(A)

>>B(2,:)

答案为 0.6931、1.3863 和 4.6052。

b) 输入 sum(B(2,:))。答案为 6.6846。

c) 输入 B(:,2).*A(:,1)。答案为 1.3863、2.7726、15.3806、3.4342。

d) 输入 max(B(:,2).*A(:,1))。答案为 15.3806。

e) 输入 sum(A(1,:)./B(1:3,3)')。答案为 3.3391。

 

2.11 脚本文件如下

 A = [3,-2,1;6,8,-5;7,9,10];

 B = [6,9,-4;7,5,3;-8,2,1];

 C = [-7,-5,2;10,6,1;3,-9,8];

 D(:,:,1) = A;

 D(:,:,2) = B;

 D(:,:,3) = C;

 max(max(D))

 max(max(max(D)))

运行此文件,得到以下结果:

ans(:,:,1) =

     10

ans(:,:,2) =

     9

ans(:,:,3) =

     10

ans

     10

因此,第一、第二和第三层中的最大元素分别为 10、9 和 10。整个数组中的最大元素

为 10。

 

2.12

>>x = [5,9,-3];y=[7,4,2];

>>S = x+y;

>>w = x.*y;

>>z = y.*x;

答案 a. s=[12, 13, -1] b. w=[35, 36, -6] c. 两者相同。

 

2.13

>>A = [9,6;2,7];B=[8,9;6,2];

>>w = A.*B;

>>z = B.*A;

答案 a. w=[17, 15; 8, 9] b. z=[72, 54; 12, 14] c. 是。

原文疑似笔误:w 的所列结果与前文逐元素乘法命令不一致。

 

2.14

>>x = [10,8,3]y = [9,2,6];

原文疑似笔误:x 和 y 两次赋值之间缺少分隔符。

>>w = x./y;

>>z = y./x;

答案。 a. w=[1.1111,    4,    0.5]     b. z=[0.9,    0.25,    2]

 

2.15  命令窗口操作如下

>>A = [-7,11;4,9]; B = [4,-5;12,-2]; C = [-3,-9;7,8];

>>A+B+C

ans

     -6     -3

     23    15

>> A-B+C

ans

     -14    7

     -1    19

>>(A+B)+C

ans

     -6     -3

     23    15

>>A+(B+C)

ans

     -6     -3

     23    15

>> B+C+A

ans

     -6     -3

     23    15

>>A+C+B

ans

     -6     -3

     23    15

 

2.16

>>A = [5,9;6,2];B=[4,7;2,8];

>>C = A./B;

>>D = B./A;

>>E = A.\B;

>>F = B.\A;

答案 a. C=[1.25, 1.2857; 3, 0.25] b. D=[0.8, 0.7778; 0.3333, 4] c. E=[0.8, 0.7778; 0.3333, 4] d. F=[1.25, 1.2857; 3, 0.2500] e. C 与 F 相等。D 与 E 相等。

 

2.17  命令窗口操作如下

>>A = [56,32;24,-16]; B = [14,-4;6,-2];

>>A.*B

ans

     784        -128

     144          32

>> A/B

ans

     176    -168

     -12     32

>> B.^3

ans

     2744         -64

     216          -8

 

2.18 脚本如下

% a 部分

v0 = 50;A = 50;g=9.81;

t_guess = input('Enter a guess for time to hit:  ')

d = t_guess/1000;

t = [0:d:t_guess];

y =( v0*sind(A))*t-0.5*g*t.^2;

% y_max 为最大高度;t_max 为达到 y_max 的时间。

[y_max,i_max] = max(y)

t_max = d*i_max

原文疑似笔误:数组从 t=0 开始,直接用 d*i_max 计算时间可能存在一个步长的偏差。

t_hit = 2*t_max

% b 部分

clear t y

t = [0:d:2*t_max];

x = v0*cosd(A)*t;

y = (v0*sind(A))*t-0.5*9.81*t.^2;

plot(x,y),xlabel('x (m)'),ylabel('y (m)')

输入对落地时间的估计值:10

t_guess =

    10

y_max =

  74.7736

i_max =

   391

t_max =

    3.9100

t_hit =


   7.8200

原文疑似笔误:t_hit 数值前有异常数字串 1366788245377。

题图 2.18

 

2.19 命令窗口操作如下:

>>x = linspace(-2,16,300);

>>f=(4*cos(x))./(x+exp(-0.75*x));

>>plot(x,f),xlabel('x'),ylabel('y')

题图 2.19

 

2.20 命令窗口操作如下:

>>x = linspace(-2*pi,2*pi,300);

>>f=3*x.*(cos(x)).^2-2*x;

>>plot(x,f),xlabel('x'),ylabel('y')

题图 2.20

 

2.21 命令窗口操作如下:

>>x = linspace(-3.5,10,300);

>>f = 2.5.^(0.5*x).*sin(5*x);

>>plot(x,f),xlabel('x'),ylabel('y')

题图 2.21

 

2.22 命令窗口操作如下:

>>x = linspace(-20,40,200);

>>y = (200-5*x)/6;

>>D = sqrt(x.^2+y.^2);

>>min_dist=min(D)

答案为 D = 25.6076 km。

 

2.23  命令窗口操作如下

>>F = [400,550,700,500,600]; D = [3,0.5,0.75,1.5,5];

>>W = F.*D

 W =

     1200         275         525         750        3000

>>Total_Work = sum(W)

 Total_Work =

     5750

各段所做的功依次为 1200、275、750 和 3000 焦耳。(1 焦耳 = 1 N m。)总功为 5750

原文疑似笔误:文字仅列四段功,遗漏了上方输出中的 525。

焦耳。

 

2.24 设单位向量 i 和 j 分别指向东和北,则飞机 A 的速度为

飞机 B 的速度为 vB = –150i。飞机 A 相对于飞机 B 的速度为 vr = vA – vB。操作如下:

>>v_A = 300*[-cos(pi/4),-cos(pi/4)];

>>v_B = [-150,0];

>>v_R = v_A - v_B

 v_R =

     -62.1320 -212.1320

>>s_R = sqrt(v_R(1)^2 + v_R(2)^2)

 s_R =

     221.0439

相对速度为 vR = -62.132i – 212.132j mi/hr,相对速率为 221.0439 mi/hr。因此,飞机 A 相对于飞机 B 向西以 62.132 mi/hr、向南以 212.132 mi/hr 运动。相对速率也可用 s_R = sqrt(sum(v_R.*v_R)) 或 s_R = sqrt(v_R*v_R') 计算。

 

2.25 命令窗口操作如下

>>wage = [5,5.5,6.5,6,6.25]; hours = [40,43,37,50,45];

>>output = [1000,1100,1000,1200,1100];

>>earnings = wage.*hours

 earnings =

     200.0000  236.5000  240.5000  300.0000  281.2500

>>total_salary = sum(earnings)

 total_salary =

     1.2582e+003

>>total_widgets = sum(output)

 total_widgets =

     5400

>>average_cost = total_salary/total_widgets

average_cost =

     0.2330

>>average_hours = sum(hours)/total_widgets

 average_hours =

     0.0398

>>[maximum,most_efficient] = max(output./earnings) 

maximum =

     5

 most_efficient =

     1

>>[minimum,least_efficient] = min(output./earnings)

minimum =

     3.9111

 least_efficient =

     5

各工人的收入依次为 $200、$236.50、$240.50、$300 和 $281.25。总工资为 $1258.20,共生产 5400 个零件。每个零件的平均生产成本为 23.3

原文疑似笔误:所列个别工资与总工资存在舍入或抄录差异,均保留原文。

美分,平均用时为 0.0398 hr。第一位工人效率最高,每一美元工资对应生产 5 个零件。第五位工人效率最低,每一美元工资对应生产 3.911 个零件。

 

2.26 设以下三个单位向量分别指向西、北和下方。两名潜水员的位置为

(a) 的答案为 |D1|;(b) 为 D = D2 – D1;(c) 为 |D|。命令窗口操作如下:

>>D_1 = [-100,-30,40]; D_2 = [-30,-40,60];

>>magD_1 = sqrt(D_1*D_1')

 magD_1 =

      111.8034

>>D = D_2 - D_1

 D =

     70   -10    20

>>magD = sqrt(D*D')

 magD =

     73.4847

因此,潜水员 1 距起点 111.8034 ft。要到达潜水员 2,潜水员 1 必须向西游 70 ft、向南游 10 ft、向上游 20 ft。若沿直线前往,则需游 73.4847 ft。

原文疑似笔误:游动方向的文字与前文坐标约定、位移符号可能不一致。

 

2.27 命令窗口操作如下

>>force = [11,7,8,10,9]; k = [1000,600,900,1300,700];

>>x = force./k

 x =

     0.0110    0.0117    0.0089    0.0077    0.0129

>>energy = 0.5*k.*x.^2

 energy =

     0.0605    0.0408    0.0356    0.0385    0.0579

压缩量的单位为米;能量的单位为焦耳。

 

2.28  命令窗口操作如下:

>>price = [300,550,400,250,500];

>>quantity = [5,4,6;3,2,4;6,5,3;3,5,4;2,4,3];

>> monthly_expenses = [price'.*quantity(:,1),price'.*quantity(:,2), price'.*quantity(:,3)]

 monthly_expenses =

     1500        1200        1800

     1650        1100        2200

     2400        2000        1200

     750        1250        1000

     1000        2000        1500

>>May_expenses = sum(monthly_expenses(:,1))

May_expenses =

     7300

>>June_expenses = sum(monthly_expenses(:,2))

 June_expenses =

     7550

>>July_expenses = sum(monthly_expenses(:,3))

 July_expenses =

      7700

>>three_month_total = sum(monthly_expenses') 

three_month_total =

     4500        4950        5600        3000        4500

>>total = sum(three_month_total)

total =

     22550

 

2.29 脚本文件如下:

 A = 2500;

 R = [0.01:0.01:40];

 L = (A-0.5*pi*R.^2)./(2*R);

 cost = 40*2*(R+L)+50*pi*R;

 [mincost,k] = min(cost);

 Rmin = R(k)

 Lmin = L(k)

 mincost

答案为:

Rmin =  23.9600, Lmin = 33.3521, mincost =  $8348.60

 

2.30 脚本文件如下:

r = [2:0.01:10];V = 500;

h = (V-2*pi*r.^3/3)./(pi*r.^2);

cost = 600*pi*r.*h+800*pi*r.^2;

plot(r,cost),xlabel('Radius (meters)'),ylabel('Cost ($)'), …

[radius,mincost] = ginput(1)

 hmin = (V-2*pi*radius.^3/3)./(pi*radius.^2)

曲线如图所示。最低成本为 $91334,最佳半径为 4.8915 m,所需高度为 3.3909 m。

题图 2.30

2.31 MATLAB 表达式如下:

f = 1./sqrt(2*pi*c./x)

E = (x + w./(y + z))./(x + w./(y - z))

A = exp(-c./(2*x))./(log(y).*sqrt(d*z))    

S = x.*(2.15 + 0.35*y).^1.8./(z.*(1-x).^y)

 

2.32 a) C(t) = 0.5C(0) implies that .  Solve for :      .  脚本文件如下:

 k = [0.047:0.001:0.107];

thalf = -log(0.5)./k;

plot(k,thalf),xlabel('Elimination Rate Constant (1/hour)'), ylabel('Half-Life (hours)')

题图 2.32a

题 2.32(b):

b) 在以下给定条件下,脚本文件如下:

 k = [0.047:0.001:0.107];

 C = (1 - exp(-k))./k;

 plot(k,C),xlabel('Elimination Rate Constant (1/hour)'),…

     ylabel('Concentration (dimensionless)')

曲线如图所示。

题图 2.32b

2.33 a) 脚本文件如下

W = 100; Lb = 4; Lc = 6;

D = [0:0.01:Lb+1.5];

T = Lb*Lc*W./(D.*sqrt(Lc^2-D.^2));

[minT, k] = min(T)

minD = D(k)

minT = 133.3334, k =  425, minD =  4.2400

b) 在 (a) 的脚本文件后追加以下各行。

 Dplot = [1.5:0.001:5.5];

 upper =  1.1*minT

 Tplot = Lb*Lc*W./(Dplot.*sqrt(Lc^2-Dplot.^2));

 plot(Dplot,Tplot,[1.5, Lb + 1.5],[upper,upper]),grid,ginput(2)

张力上限为 1.1(133) = 146 N。图中两条曲线的交点给出两个解,约为 D = 3.26 m 和 D = 5.05 m。


题图 2.33b

2.34 命令窗口操作如下:

>>x=[3;7;2];

>>y=[4,9,5];

>>w = x*y;

>>z = y*x;

答案。 a. w=[12, 27, 15; 28, 63, 35; 8, 18, 10]  b. z=85. No.

 

2.35 命令窗口操作如下:

>>x = [3;7;2];

>>A = [2,6,5;3,7,4;8,10;9];

>>y = A*x;

>>z = x*A;

答案 a. y=[58; 66; 112] b. 内部维数不相等,因此乘积未定义。

 

2.36  命令窗口操作如下

>>A = [11,5;-9,-4]; B = [ -7,-8;6,2];

>>A*B

ans

     -47      -78

     39        64

>>B*A

ans

     -5       -3

     48       22

 

2.37  命令窗口操作如下

>>A = [4,-2,1;6,8,-5;7,9,10]; B = [6,9,-4;7,5,3;-8,2,1];

>>C = [-4,-5,2;10,6,1;3,-9,8];

>>A*(B+C)

ans

     -31    -13     -7

     173    147    -25

     117     57    112

>>A*B+A*C

ans

     -31    -13     -7

     173    147    -25

     117     57    112

>>(A*B)*C

ans

     209          347         -136

      297         -111          308

     11207          562          250

>>A*(B*C)

ans

     209          347         -136

      297         -111          308

     11207          562          250

 

2.38 对于 (a),注意第一季度的材料成本由下式计算:

7(16) + 3(12) +9(8) +2(14) + 5(13) = 326

第二季度的材料成本由下式计算:

7(14) + 3(15) + 9(9) + 2(13) + 6(16) = 346

依此类推。因此,将单位成本矩阵的转置与季度产量矩阵相乘,即可求得季度成本。所得矩阵为 quarterly_costs,第一行为材料成本,第二行为人工成本,第三行为运输成本;四列分别对应四个季度。对于 (b),将 quarterly_costs 的各行求和,即可得到全年材料、人工及运输成本;这等价于对其转置矩阵的各列求和。对于 (c),将 quarterly_costs 的各列求和,即可得到各季度总成本。命令窗口操作如下:

>>unit_cost = [7,3,2;3,1,3;9,4,5;2,5,4;6,2,1];

>>quarterly_volume = [16,14,10,12;12,15,11,13;8,9,7,11;…

     14,13,15,17;13,16,12,18];

>>quarterly_costs = unit_cost'*quarterly_volume

quarterly_costs =

     326    346    268    364

     188    190    168    214

     177    186    160    204

>>yearly_costs = sum(quarterly_costs') 

yearly_costs =

     1304          760          727

>>total_quarter_cost = sum(quarterly_costs)

total_quarter_cost

     691    722    596    782

(下页续)

题 2.38 续

下表由矩阵 quarterly_costs 生成。所有成本均以千美元计。

Category

第 1 季度

第 2 季度

第 3 季度

第 4 季度

材料

326

346

268

364

人工

188

190

168

214

运输

177

186

160

204

从向量 yearly_costs 得到以下信息:

全年材料成本 = $1,304,000,

全年人工成本 = $760,000,

以及

全年运输成本 = $727,000。

从向量 total_quarter_cost 可知,各季度总成本依次为 $691,000、$722,000、$596,000 和 $782,000。

 

2.39 为各生产 1000 吨合金所需的铜(Cu)量,可将表中 Cu 列乘以 1000(0.01) = 10 得到。(0.01 用于将百分数转换为小数。)因此所需铜量为 1000(0.01)(4.4+0+0+1.6+0) = 60 吨。将此方法推广

method, we can see that we must multiply the matrix composition obtained from the table by a row vector consisting of five columns containing the value 10. 命令窗口操作如下

>>composition = [4.4,1.5,.6,0,0;0,1,0,.6,0;0,1.4,0,0,4.5;  …

     1.6,2.5,0,0,5.6;0,.3,0,7,0];

>>alloy = 10*ones(1,5)

 alloy =

     10     10     10     10     10

 raw_material = alloy*composition

 raw_material =

      60.0000    67.0000     6.0000    76.0000   101.0000

因此,需要铜 60 吨、镁 67 吨、

锰 6 吨、硅 76 吨和锌 101 吨。

 

2.40 脚本文件如下

 %在下面输入四种产品的单位人工成本。

 labor1 = input('Enter the unit labor cost for product 1: ');

 labor2 =  input('Enter the unit labor cost for product 2: ');

 labor3 =  input('Enter the unit labor cost for product 3: ');

 labor4 =  input('Enter the unit labor cost for product 4: ');

 u1 = [6, 2, 4, 9];u3 = [1, 4, 2, 3];

 u2 = [labor1,labor2,labor3,labor4];

 U = [u1', u2', u3'];

 P = [10, 12, 13, 15;8, 7, 6, 4;12, 10, 13, 9;6, 4, 11,5];

 C = U'*P;

 Quarterly_Costs = sum(U'*P);

 Category_Costs = sum((U'*P)');

 disp('The cost for quarter 1 is: ')

 disp(Quarterly_Costs(1))

 disp('The cost for quarter 2 is: ')

 disp(Quarterly_Costs(2))

 disp('The cost for quarter 3 is: ')

 disp(Quarterly_Costs(3))

 disp('The cost for quarter 4 is: ')

 disp(Quarterly_Costs(4))

 disp('The materials cost is: ')

 disp(Category_Costs(1))

 disp('The labor cost is: ')

 disp(Category_Costs(2))

 disp('The transportation cost is: ')

 disp(Category_Costs(3))

结果如下(单位为千美元):

第 1 季度成本为:444

第 2 季度成本为:391

第 3 季度成本为:558

第 4 季度成本为:392

材料成本为:760

人工成本为:709

运输成本为:316

 

2.41

A=[6,-3,4;12,5,-7;-5,2,6];

b=[41;-26;16];

x=A\b

x =

    2.0035

   -2.6848

    5.2312

 

2.42 a.

A = [6,2,10;3,5,2;2,5,3];

b = [35;40;40];

x = A\b

x =

    1.3571

    6.6429

    1.3571

P = 300*x(1) + 500*x(2) + 200*x(3)

P =

    4000

b. 因为这些方程是线性的,若将向量 b 加倍,解 x 和利润 P 也会加倍。

 

2.43 位置向量为 r = [2, 10t+3, 0]。命令窗口操作如下:

>>t = [0:.5:5];

>>P = [2*ones(1,length(t))',10*t'+3,zeros(1,length(t))];

>>location_5 = P(11,:)

location_5 =

     2     53      0

>>v = [0,10,0];

>>L = 5*cross(P(11,:),v)

 L =

     0      0    100

t = 5 s 时,质点的位置由向量 location_5 给出,其坐标为 x =2、y =53、z =0 m。t = 5 s 时的角动量向量为 L = 0i + 0j + 100k,完全沿 z 方向,大小为 100 kg m2/sec。

 

2.44  命令窗口操作如下

>>F = [12,-5,4];

>>r = [-3,5,2];

>>n = [6,5,-7];

>>M = dot(cross(r,F),n)

 M =

     8675

大小为 M = 675 N m。

 

2.45 命令窗口操作如下

>>A = [7, -3, 7]; B = [-6, 2, 3]; C = [2, 8, -8];

>>left = cross(A,cross(B,C))

 left =

     50    84  -414

>>right = B*dot(A,C)-C*dot(A,B)

 right =

     450    84  -414

因此,等式左右两端得到相同结果。

 

2.46 注意,为使用叉积,必须将向量表示为三维向量。命令窗口操作如下:

>>A = [5, 0, 0]; B = [1, 3, 0];

>>C = cross(A,B);

>>area = sqrt(C*C')

area =

     15

面积为 15。若事先知道 C 仅有一个分量(C = [0, 0, 15]),便无需使用 area = sqrt(C*C')} 这一行计算面积。

原文疑似笔误:原句有拼写错误及多余右花括号;数学表达式按原文保留。

 

2.47  命令窗口操作如下

>>A = [5, 0, 0]; B = [2, 4, 0]; C = [3, 0, -2];

>>D = cross(B,C);

>>E = dot(A,D);

>>volume = abs(E)

 volume =

     40

体积为 40。注意,点积的结果是标量,因此可用 abs 函数计算其大小。

 

2.48

a = [6,9,4]; b = [-3,7,9];

cos_th = dot(a,b)/(norm(a)*norm(b));

th = acosd(cos_th)

th =

   53.4351

答案的单位为度。

 

2.49 向量 a 从 P 指向 Q:a = [0, 1, 0][1, 0, 0] = [1, 1, 0];向量 b 从 P 指向 R:b = [0, 0, 1][1, 0, 0] = [1, 0, 1]。MATLAB 命令窗口操作如下:

原文疑似笔误:坐标差表达式缺少明确减号,且给出的向量符号可能有误。

>> a = [-1,1,0]; b = [-1,0,1];

>> c = cross(a,b);

>> d = norm(c);

>> area = 0.5*d

area =

    0.8660

 

2.50    命令窗口操作如下

>>p1 = [3,-6,8,4,90];

>>p2 = [3, 5, -8, 70];

>>x = [-3:0.01:3];

>>y = polyval(p1,x);

>>z = polyval(p2,x);

>>plot(x,y,x,z,'--'),xlabel('x'),…

ylabel('y and z'),gtext('y'),gtext('z')

 

2.51  命令窗口操作如下

>>p = [3,-5,-28,-5,200];

>>x = [-1:0.01:1];

>>y = polyval(p,x);

>>plot(x,y,),xlabel('x'),ylabel('y'),grid,[x,y] = ginput(1)

在峰值处读出的数值为 x = -0.0970、y = 200.2190。这些数值为近似值,因为它们取决于光标位置和图的大小。峰值的精确位置可用微积分确定,为 x = -0.0917。

 

2.52 命令窗口操作如下:

>>conv([5,0,-3,7,10],[4,-7,9,2])

ans =

      20   -35    33    59   -36   -13   104    20

答案为

 

2.53 命令窗口操作如下

>>[q,r] = deconv([5,-7,2,8],[6,3,-2])

q =

    0.8333   -1.5833

r =

         0         0    8.4167    4.8333

答案及余式如下。

 

2.54 使用 deconv 命令,操作如下:

>>p1 = [36,-8,2]; p2 = [36, -5, 4, -3];

>>[q,r] = deconv(p1,p2);

>>ratio = polyval(q,5)+polyval(r,5)/polyval(p2,5)

 ratio =

      0.1963

 

2.55 命令窗口操作如下

>>conv([10,-9,-6,12],[5,-4,-12,8])

ans

     50    -85   -114    272    -48   -192     96

答案为

 

2.56 命令窗口操作如下

>>[q,r] = deconv([14,-6,3,9],[5,7,-4])

 q =

     2.8000    -5.1200

 r =

     0.0000     0.0000    50.0400   -11.4800

答案为 2.8x - 5.12,余式为 50.04x – 11.48。

 

2.57 使用 deconv 命令,操作如下:

>>p1 = [24,-9,0,-7]; p2 = [10,5,-3,-7];

>>[q,r] = deconv(p1,p2);

>>ratio = polyval(q,5)+polyval(r,5)/polyval(p2,5)

 ratio =

      2.0458

 

2.58 解理想气体定律得到 V = RT/P。为求解范德瓦耳斯方程中的 V,将两端乘以 V 并合并各项,得到关于 V 的三次方程:

脚本文件如下:

 P = 0.95;T = 300;R = 0.08206;a = 6.49;b = 0.0562;

 ideal = R*T/P

 Waals = roots([P,-(P*b + R*T),a,-a*b])

理想气体定律给出 V = 25.9137。范德瓦耳斯模型给出 V = 25.7047(另两个根接近零,没有物理意义)。

 

2.59 a) 飞机 A 的位置、飞机 B 的位置以及两者间的距离依次如下。可使用 conv 函数计算。

>>yB = [-160,410]; xA = [320, -800];

>>D2 = conv(xA,xA) + conv(yB,yB)

 D2 =

     128000     -643200      808100

因此

继续以下命令窗口操作:

>>t = [2:0.005:3];

>>D = sqrt(polyval(D2,t));

>>plot(t,D),xlabel('t'),ylabel('D'),grid,[x,y] = ginput(1)

由图确定的最小距离约为 D = 8.5 mi,出现在下午 1:00 之后约 t = 2.51 hr。

b) 对于以下条件,须求解方程:

这是关于变量 t 的二次多项式方程。继续之前的操作:

>>S = conv(xA,xA) + conv(yB,yB) - [0,0,900];

>>roots(S)

ans

     2.5925

     2.4325

解为下午 1:00 之后 t = 2.5925 hr 和 t = 2.4325 hr。这两个时刻飞机之间的距离均为 30 mi。

2.60  脚本文件如下

  num = [3, -12, 20];

 den = [1, -7, 10];

 dt = 0.03;

 x1 = [0:0.01:2-dt];

 x2 = [2+dt:0.01:5-dt];

 x3 = [5+dt:0.01:7];

 y1 = polyval(num,x1)./polyval(den,x1);

 y2 = polyval(num,x2)./polyval(den,x2);

 y3 = polyval(num,x3)./polyval(den,x3);

 plot(x1,y1,x2,y2,x3,y3),xlabel('x'),ylabel('y')

y 的范围由 dt 决定。dt 较小时,y 的范围较大,曲线形状难以辨认。除 dt = 0.03 外,其他取值也可使用。曲线如图所示。

题图 2.53

2.61 脚本文件如下:

 rho = 0.002378;S = 36;alpha=10;

 V=[0:0.5:150]*(5280/3600);

 CL = [4.47e-5,1.15e-3,6.66e-2,0.102];

 CD = [5.75e-6,5.09e-4,1.81e-4,1.25e-2];

 L = 0.5*rho*S*polyval(CL,alpha).*V.^2;

 D = 0.5*rho*S*polyval(CD,alpha).*V.^2;

 plot(V*(3600/5280),L,V*(3600/5280),D,'--'),...

     title('Lift and Drag Versus Speed for \alpha = 10^o'),...

     xlabel('Speed (miles/hour)'),…

ylabel('L, D (pounds)'),gtext('L'),gtext('D')

曲线如图所示。

题图 2.61

2.62 脚本文件如下

 rho = 0.002378;S = 36;

 alpha = [-2:0.01:22];

 CL = [4.47e-5,1.15e-3,6.66e-2,0.102];

 CD = [5.75e-6,5.09e-4,1.81e-4,1.25e-2];

 LoverD = polyval(CL,alpha)./polyval(CD,alpha);

 plot(alpha,LoverD),xlabel('Angle of Attack \alpha (degrees)'),...

     ylabel('Lift/Drag (dimensionless)')

曲线如图所示。

题图 2.62

 

2.63 脚本如下

% a 部分

v0 = 70;

A = 45;

g = 9.81;

t_hit = 2*v0*sind(A)/g

d = t_hit/1000;

t = [0:d:t_hit];

x = (v0*cosd(A))*t;

y = (v0*sind(A))*t-0.5*9.81*t.^2;

plot(x,y),xlabel('x (m)'),ylabel('y (m)')

% b 部分

yd=100;

td=roots([g/2,-v0*sind(A),yd])

yd=200;

td=roots([g/2,-v0*sind(A),yd])

答案 a. t_hit = 10.0912 s。

b. 对于以下条件,结果为 7.2975 和 2.7938 s,分别对应抛射体上升和下降经过 100 m 高度的时刻。见下图。

对于以下条件,结果如下。由于抛射体从未达到 200 m 高度,所得结果为复数,见下图。

题图 2.63

 

2.64 脚本文件如下

 % 使用元胞索引:

 A(1,1) = {'Motor 28C'};

 A(1,2) = {'Test ID 6'};

 A(2,1) = {[3,9;7,2]};

 A(2,2) = {[6,5,1]};

 % 使用内容索引:

 B{1,1} = 'Motor 28C';

 B{1,2} = 'Test ID 6';

 B{2,1} = [3,9;7,2];

 B{2,2} = [6,5,1];

 disp(B{2,1}(1,1))

运行此文件,显示答案 3。

 

2.65 此处创建一个三维元胞数组。三个层分别对应

L = 1、2、3。某些 r 与 d 的组合会使电容 C 为负数或无穷大,因此这些情况无效。脚本文件如下:

epsilon = 8.854e-12;

r1 = .001*[1,2,3]; r = [r1',r1',r1',r1'];

d1 = .001*[3,4,5,10];  d=[d1;d1;d1];

L = 1;

C{1,1,1} = 'L = 1';

C{1,2,1} = 'd';

C{2,1,1} = 'r';

C{2,2,1} = pi*epsilon*L./log((d-r)./r);

 L = 2;

C{1,1,2} = 'L = 2';

C{1,2,2} = 'd';

C{2,1,2} = 'r';

C{2,2,2} = pi*epsilon*L./log((d-r)./r);

L = 3;

C{1,1,3} = 'L = 3';

C{1,2,3} = 'd';

C{2,1,3} = 'r';

C{2,2,3} = pi*epsilon*L./log((d-r)./r);

C{2,2,2}(1,3)

输入 C 可查看数组 C 的结构。第一层显示如下:

C(:,:,1) =

     ' L = 1 '      'd'

     'r'     [3x4 double]

另外两层具有类似结构。输入 celldisp(C) 可查看整个数组。

各层的电容值均位于 (2,2) 元胞中。以下指定参数对应第二层,因为 L = 2 是 L 的第二个取值。电容 Cij 对应 ri 和 dj。因此,r = 0.001、d = 0.005 对应 (2,2) 元胞中数组的 (1,3) 元素,因为 r = 0.001 是 r 的第一个取值,而 d = 0.005 是 d 的第三个取值。电容值如下。

 

2.66 (a) 1 slug 等于 14.594 kg,1 磅等于 4.4482 N,1 英尺等于 0.3048 米。脚本文件名为 convert.m,内容如下:

 %将 slug 转换为 kg

 convert(1).mass = 14.594;

 %将 kg 转换为 slug

 convert(2).mass = 1/convert(1).mass;

 %将磅转换为牛顿

 convert(1).force = 4.4482;

 %将牛顿转换为磅

 convert(2).force = 1/convert(1).force;

 %将英尺转换为米

 convert(1).length = .3048;

 %将米转换为英尺

 convert(2).length = 1/convert(1).length;

(b) 命令窗口操作如下

>>convert(1).length*70

ans

     21.3360

>>convert(2).length*150

ans

     492.1260

>>convert(2).force*48

ans

     10.7909

>>convert(1).force*17

ans

     75.6194

>>convert(1).mass*15

ans

     218.9100

>>convert(2).mass*40

ans

     2.7409

 

2.67 脚本文件如下

 bridge(1).location = 'Smith St';

 bridge(1).maxload = 80;

 bridge(1).yearbuilt = 1928;

 bridge(1).duemaint = 2025;

 bridge(2).location = 'Hope Ave';

 bridge(2).maxload = 90;

 bridge(2).yearbuilt = 1950;

 bridge(2).duemaint = 2027;

 bridge(3).location = 'Clark St';

 bridge(3).maxload = 85;

 bridge(3).yearbuilt = 1933;

 bridge(3).duemaint = 2024;

 bridge(4).location = 'North Rd';

 bridge(4).maxload = 85;

 bridge(4).yearbuilt = 1960;

 bridge(4).duemaint = 2023;

 

2.68 命令窗口操作如下

>>bridge(3).duemaint = 2026;

 

2.69 命令窗口操作如下

>>bridge(5).location = 'Shore Rd';

>>bridge(5).maxload = 85;

>>bridge(5).yearbuilt = 1997;

>>bridge(5).duemaint = 2022;

 

解答手册 ©

配套教材

MATLAB 工程应用 第五版

作者

William J. Palm III

罗得岛大学

第 3 章习题解答

文字处理软件与解答文件使用提示

MATLAB 内置编辑器不能识别标准键盘以外的某些符号。因此,将文字处理软件中的文件复制粘贴到编辑器时,若文件包含非标准键盘符号,编辑器可能报错。例如,表达式 y = -2*x 中的减号用连字符输入,并非公式编辑器生成的“真正的”减号。将后者粘贴到 MATLAB 编辑器会报错,许多其他符号及希腊字母也有同样问题。

另一类错误来自成对的单引号,例如 xlabel('x')。某些文字处理软件会自动将其转换为“智能引号”(如 `x´),这也会使 MATLAB 编辑器报错。此外,MATLAB 编辑器用三个句点 (. . .) 表示续行,而某些文字处理软件会将它们合成一个编辑器无法识别的符号。因此,创建文件时只使用标准键盘上的符号,可避免这类错误。

本解答手册尽量避免在 MATLAB 代码中使用智能引号、单字符省略号及“真正的”减号,以便将代码直接复制粘贴到 MATLAB 编辑器。如有遗漏,请告知。

 

理解测试题

T3.1-1 命令窗口操作如下

>>x = [5:20:85];

>>y = [10:30:130];

>>log(x.*y)-(log(x)+log(y))

ans

     1.0e-014 *

   -0.0444               0         -0.1776         -0.1776          0.1776

这些数值基本为零,因此恒等式成立。

 

T3.1-2  命令窗口操作如下

>>x = sqrt(2+6i)

x =

         2.0402 + 1.4705i

>>abs(x)

ans

         2.5149

>>angle(x)

ans

         0.6245

>>real(x)

ans

         2.0402

>>imag(x)

ans

         1.4705

 

T3.1-3 命令窗口操作如下

>>x = [0:0.4:2*pi];

>>exp(i*x)-(cos(x)+i*sin(x))

答案基本为零,说明恒等式成立。

 

T3.1-4 命令窗口操作如下

>>x = [0:0.4:2*pi];

>>asin(x)+acos(x)-pi/2

答案基本为零,说明恒等式成立。

 

T3.1-5 命令窗口操作如下

>>x = [0:0.4:2*pi];

>>tan(2*x)-2*tan(x)./(1-tan(x).^2)

答案基本为零,说明恒等式成立。

 

T3.1-6 命令窗口操作如下

>>x = [0:0.1:5];

>>sin(i*x)-i*sinh(x)

答案基本为零,说明恒等式成立。

T3.1-7 命令窗口操作如下

>>x = [-10:0.1:10];

>>asinh(x)-log(x+sqrt(x.^2+1))

答案基本为零,说明恒等式成立。

 

T3.2-1 函数如下:

function [ V, A] = cube(L)

% 边长为 L 的立方体的体积 V 和表面积 A。

V =  L.^3;

A = 6*L.^2;

end

测试用例如下:

>>[V,A] = cube(10)

V =

        1000

A =

        600

 

T3.2-2 函数如下:

function [ V ] = cone(r,h)

% 半径为 r、高为 h 的圆锥体的体积。

V = pi*h.*r.^2/3;

end

测试用例如下:

>>V = cone(5,30)

V =

    785.3982

T3.2-3 函数文件如下

function y = f5(x)

y = exp(-0.2*x).*sin(x+2)-0.1;

end

可绘制函数曲线,得到供 fzero 使用的解的估计值,也可直接尝试 0 到 10 之间的 x 值。命令窗口操作如下:

>>fzero(@f5,0)

ans

         1.0187

>>fzero(@f5,4)

ans

         4.5334

>>fzero(@f5,6)

ans

         7.0066

因此,解为 x = 1.0187、4.5334 和 7.0066。

 

T3.2-4  函数文件如下

function y = f6(x)

y = 1 + exp(-0.2*x).*sin(x+2);

end

可绘制函数曲线,得到供 fminbnd 使用的解的估计值,也可直接尝试 0 到 10 之间的 x 值。命令窗口操作如下:

>>fminbnd(@f6,0,3)

ans

     2.5150

>>f6(ans)

ans

         0.4070

>>fminbnd(@f6,3,10)

ans

         8.7982

>>f6(ans)

ans

         0.8312

因此,解为 (x,y)=(2.5150, 0.4070) 和 (x,y)=(8.7982,0.8312)。

 

T3.2-5 参见例 3.2-2。修改例中的函数文件,将面积由 100 平方英尺改为 200 平方英尺。函数文件如下:

function L = channel(x)

L = 200./x(1)-x(1)./tan(x(2))+2*x(1)./sin(x(2));

end

由于此题与例 3.2-2 类似,可以尝试采用例中相同的初始估计。命令窗口操作如下:

>>x = fminsearch(@channel,[20,1])

 x =

         10.7457          1.0472

答案为 d = 10.7457 ft,θ = 1.0472 弧度,即 60 度。

 

章末习题

3.1 命令窗口操作如下

>> x = [0:2];

>> y = -3+i*x;

>> abs(y)

ans

      3.0000        3.1623          3.6056

>> sqrt(y)

ans

      0 + 1.7321i       0.2848 + 1.7553i         0.5503 + 1.8174i

>> (-5-7i)*y

ans

      5.0000 + 21.0000i    22.0000 + 16.0000     29.0000 + 11.0000i

>> y/(6-3i)

ans

      -0.4000 - 0.2000i   -0.4667 - 0.0667i   -0.5333 + 0.0667i

 

3.2  命令窗口操作如下

>>x = -5-8i; y = 10-5i;

>>abs(x*y)

ans

         105.4751

>>angle(x*y)

ans

         -2.5930

>>abs(x/y)

ans

         0.8438

>>angle(x/y)

ans

         -1.6657

 

3.3 命令窗口操作如下

>>(180/pi)*atan2(8,5)

ans

         57.9946

>>(180/pi)*atan2(8,-5)

ans

          122.0054

>>(180/pi)*atan2(-8,5)

ans

         -57.9946

>>(180/pi)*atan2(-8,-5)

ans

          -122.0054

答案的单位为度。

 

3.4 命令窗口操作如下

>>x = [0:0.5:5];

>>sinh(x)-((exp(x)-exp(-x))/2)

ans

   0     0     0     0     0     0     0     0     0     0    0 

所有结果均为零,因此对于给定的 x,恒等式成立。

 

 3.5 命令窗口操作如下

>> x=linspace(1,100,500);

>> acosh(x)-log(x+sqrt(x.^2-1))

答案基本为零,因此对于给定的 x,恒等式成立。

 

3.6  脚本文件如下

epsilon = 8.854e-12;

L = 1; r = 0.001;

d = input('Enter a value for d in meters:')

C = pi*epsilon*L./log((d-r)./r);

disp('The capacitance in farads is: ')

disp(C)

取 d = 0.004 的测试用例得到 C= 2.5319e-11。

 

 3.7 脚本文件如下

beta_deg = input('Enter a value for beta in degrees:'); 

% 转换为弧度。

beta = (pi/180)*beta_deg;

mu = input('Enter a value for mu:');

F2 = input('Enter a value for force F2:');

F1 = F2*exp(mu*beta);

disp('The force F1 is:')

disp(F1)

当 beta = 130 度、F2 = 100、μ = 0.3 时,答案为 F1 =197.5217 N。

 

3.8   函数文件如下

function y = temp(x)

% 从华氏温度转换为摄氏温度。

y = (5/9)*(x-32);

测试操作如下。

>>temp([32,212])

ans

         0         100

 

3.9 命令窗口操作如下:

>>% 创建函数。

>>fun = @(x) 0.3*x-sin(2*x);

>>% 绘制函数曲线。

>>xp = 0:0.001:4;

>>plot(xp,fun(xp))

曲线显示,零点位于 1.356 附近,全局最小值位于 0.659 附近。因此继续以下操作:

>>% 求根。

>>x1 = fzero(fun,1.356)

x1 =

    1.3606

>>x2 = fminbnd(fun,0,1)

x2 =

   0.7101

 

3.10  函数文件如下

function t = time(h,v0,g)

% 计算初速度为 v0 时达到高度 h 所需的时间 t。

roots([0.5*g,-v0,h])

end

测试操作如下。

>> time(100,50,9.81)

ans

         7.4612

         2.7324

较小的数值为上升时达到该高度的时刻;较大的数值为下降时达到该高度的时刻。

 

3.11 函数文件如下

function h = height(V,r)

h = (V-2*pi*r.^3/3)./(pi*r.^2);

end

function cost = tower(r)

h = height(1000,r);

cost = 1000*pi*r.*h+1400*pi*r.^2;

end

命令窗口操作如下:

>>optimum_r = fminbnd(@tower,0,100)

     optimum_r =

         6.0095

>>min_cost = tower(optimum_r)

     min_cost =

         2.4960e+05

>>optimum_h = height(1000,optimum_r)

     optimum_h =

         4.8076

因此,最佳半径为 6.0075 m,最佳高度为 4.8076 m,最低成本为 $249,600。

3.12 根据直角三角形的几何关系,

因此

面积为

可由此解出 L。

周长 P 为

函数文件如下

function [L, P] = field(W,A)

L = (A-W.^2/4)./W;

P = 2*L+W+2*W/sqrt(2);

end

命令窗口操作如下:

>>[L, P] = field(6,80)

结果为 L = 13.3333 米,总长为 39.6519 米。

3.13 a. 根据直角三角形的几何关系,

因此

面积为

可由此解出 L。

周长 P 为

代入 L,得到

文件如下:

function [W,P,L] = angular_fence(A,Wmin,Wmax,d);

% 计算围成面积 A 所需的最小周长 P 和宽度 W。

% Wmin 和 Wmax 定义 W 的估计范围。

% d 为步长。

% 定义 W 向量。

W_guess = [Wmin:d:Wmax];

% 计算周长。

P_guess = 2*A./W_guess+W_guess/2+sqrt(2)*W_guess;

[min_perimeter,i_P_min]=min(P_guess);

W = W_guess(i_P_min);

P = min_perimeter;

L = A./W-W/4;

end

当 Wmin = 1、d = 0.01、Wmax =50 时,答案为 W = 9.1400、L=6.4677、P=35.0014。

(b) 部分下页续。

 

题 3.13 续。

b. 以下文件基于 (a) 中的方程。按预期,它们给出与 (a) 相同的答案。

function [P] = perimeter(W)

A = 80;

P = 2*A./W+W/2+sqrt(2)*W;

end

function [P,W,L] = dimensions(A,Pmin,Pmax)

optimum_W = fminbnd(@perimeter,Pmin,Pmax);

W = optimum_W;

P = perimeter(W);

L = A./W-W/4;

end

 

3.14 面积由下式求得:

求解 L:

函数文件如下:

function [ R,L, C ] = curved_fence(A, c1, c2, R1,R2,d);

R_guess=[R1:d:R2];

L_guess = (A-0.5*pi*R.^2)./(2*R);

原文疑似笔误:函数使用 R,而前文定义的是 R_guess;变量名称疑似不一致。

C_guess = c1*(2*R_guess+2*L_guess)+c2*pi*R_guess;

[C, i_C_min]=min(C_guess);

R=R_guess(i_C_min)

L=L_guess(i_C_min)

end

其中 A 为面积,c1 和 c2 为成本系数,R1 和 R2 指定半径估计范围的下限和上限,d 为步长(此处 d = 0.1 英尺)。

命令窗口操作如下

>> [ R,L, C ] = curved_fence(2000, 40, 50, 1,50,0.1)

R =

   21.4000

L =

   29.9215

C =

   7.4672e+03

R =

   18.6000

L =

   28.4023

C =

   5.1575e+03

最佳半径为 21.4000 英尺,对应长度为 29.9215 ft,最低成本为 $74,672。

原文疑似笔误:所列最低成本可能与函数及数值输出不一致,请结合原题核对。

3.15 面积由下式求得:

求解 L:

函数文件如下

function cost = fence(R)

A = 2500;

L = (A-0.5*pi*R.^2)./(2*R);

cost = 50*(2*R+2*L)+60*pi*R;

命令窗口操作如下

>>optimum_R = fminbnd(@fence,0,100)

optimum R =

   24.4001

>>min_cost = fence(optimum_R)

min_cost =

   1.0246e+04

>>A = 2500;

>>optimum_L = (A-0.5*pi*optimum_R.^2)./(2*optimum_R)

optimum_L =

   32.0656

最佳半径为 24.4001 英尺,对应长度为 32.0656 英尺,最低成本为 $10,256。

 

 3.16 函数文件如下

 function deltaV = volume(t)

 global r x

 V = 1e+9+1e+8*(1-exp(-t/100))-r*t;

 deltaV = V-0.01*x*1e+9;

 function time = decrease(x,r)

 global r x

 time = fzero(@volume,1);

命令窗口操作如下

>>time = decrease(50,1e+7)

time =

         54.1832

因此,大约需要 54 天。

 

3.17 a.

  b. 函数文件如下

 function A = area(r)

 global V

 A = pi*r.*sqrt(r.^2+9*V.^2./(pi^2*r.^4));

c) 首先绘制面积关于 r 的曲线,粗略确定最小值的位置。该位置介于 r=1 与 r=3 之间。命令窗口操作如下:

>>global V

>>V = 10;

>>r = [0.5:0.01:5];

>>plot(r,area(r))

>>[r, A] = fminbnd(@area,1,3);

>>h = 3*V/(pi*r^2)

结果为 r = 1.8901、A = 19.4393、h = 2.6730。绘制 A 关于 r 的曲线可知,当 r 约为 1.48 和 2.35 时,A 比其最小值高 10%。

 

3.18  a) 函数如下

function [V, A] = torus(a,b)

V = 0.25*pi^2*(a+b).*(b-a).^2;

A = pi^2*(b.^2-a.^2);

命令窗口操作如下

>>a = [0.25:0.01:4];

>>b = a+2;

>>[V,A] = torus(a,b);

>>subplot(2,1,1),plot(a,V),xlabel(’a (in.)’,ylabel(‘V (cu. in.)’)

>>subplot(2,1,2),plot(a,A),xlabel(‘a (in.)’),ylabel(‘A (sq. in.)’)

曲线如下。

题图 3.18



 

 3.19  函数如下

 function [a,b,c,d] = cubicpoly(x,y)

 for k = 1:4

      A(:,k) = x.^(4-k);

 end

 B = y’;

 coeff = A\B;

 a = coeff(1);

 b = coeff(2);

 c = coeff(3);

 d = coeff(4);

end

命令窗口操作如下

>>x = [-2,0,2,4];

>>y = [-20,4,68,508];

>>[a,b,c,d] = cubicpoly(x,y)

>>p=[a,b,c,d]

a =

     7

b =

     5

c =

    -6

d =

     4

>>polyval(p,x)

ans =

   -20     4    68   508

这验证了答案正确。多项式为

 

3.20 函数如下

function []= savings_balance(N,A,r)

% 题 3.19 的解答

原文疑似笔误:原注释写“题 3.19 的解答”,但本题编号为 3.20。

format bank

n=1:N;

B=A*(1+r/100).^n;

Table=[n' B'];

disp('          Year      Balance')

disp(Table)

format short

end

测试操作如下:

>>savings_balance(10,1000,3.5)

          年份      余额

          1.00       1035.00

          2.00       1071.22

          3.00       1108.72

          4.00       1147.52

          5.00       1187.69

          6.00       1229.26

          7.00       1272.28

          8.00       1316.81

          9.00       1362.90

         10.00       1410.60



 

3.21 函数如下:

function [] = ellipse_plot(a,b)

% 绘制一个椭圆。

x = linspace(-a,a,200);

y1 = sqrt((1-x.^2/a^2).*b^2);

y2 = -sqrt((1-x.^2/a^2).*b^2);

plot(x,y1,x,y2,xlabel('x'),ylabel('y')

end

测试用例如下:

>>ellipse_plot(1,2)

题图 3.20

 

3.22 a. 尝试使用多个不同的 x 上限绘图。您会发现,在 0 到 1.5 之间有两个零点。

b. 函数如下

function y = fex(u)

y = 1-7*u.*exp(-2*u);

end

From part a we use [0, 1.5] as the range. 命令窗口操作如下:

>> fzero(@fex, [0, 1.5])

得到以下提示:

使用 fzero 时出错(第 274 行)

区间端点处的函数值必须异号。

因此,尝试

fzero(@fex, [0, 0.5])

ans =

    0.2233

因此,零点为 x = 0.2233。然后尝试:

fzero(@fex, [0.5, 1.5])

ans =

    0.9443

因此,第二个零点为 x = 0.9443。

3.23 代入给定的参数值,并用逻辑斯谛函数减去指数函数,得到

因此,寻找使 y(t) 为零的 t。创建以下函数。

function y = f23(t)

% 逻辑斯谛函数减去指数函数。

y =  (50./(10+40*exp(-t))-exp(0.1*t));

end

绘制 y 的曲线,显示在 0 到 50 之间存在一个零点,因此操作如下:

>> fzero(@f23,50)

ans =

   16.0944

>> 10*exp(-0.1*ans)

ans =

    2.0000

在 t = 16.0944 时,两种模型预测的种群数量均为 2。

3.24 命令窗口操作如下

>>ex = @(x) 10*exp(-2*x);

>>x = [0:0.01:2];

>>plot(x,ex(x)),xlabel('x'),ylabel('10e^{-2x}')

曲线如下图所示。

题图 3.24

 

3.25  命令窗口操作如下

 >>fn = @(x) 30*x.^2-300*x + 4;

 >>x = [4:0.01:6];

 >>plot(x,fn(x)),xlabel('x'),grid

多次绘图表明,最小值出现在 x = 3 到 x = 6 之间。因此继续以下操作:

 >>[x, fval] = fminbnd(fn,3,6)

返回 x = 4.1667,即最小值所在的位置;fval = -516.8333,即最小值。

 

3.26  脚本文件如下

f = @(x) x.^2;

g = @(x) 3*cos(x);

h = @(x) 6*exp(x);

u = @(x) h(g(f(x)));

x = [0:0.01:4];

plot(x,u(x)),xlabel('x'),ylabel('h')

曲线如下图所示。

题图 3.26

 

3.27 创建以下函数文件。

     function f = cubic(a,b,c,d)

     f = @p;

             function y = p(x)

                     y = a*x.^3+b*x.^2+c*x+d;

             end

     end

命令窗口操作如下

>> f = cubic(5,-14,-40,90);

>>x = [-5:0.01:5];

>>plot(x,f(x)),grid

>>fzero(f,-4)

ans =

   -2.6828

>>fzero(f,2)

ans =

    1.8437

>>fzero(f,5)

ans =

    3.6391

三个零点分别为 x=-2.6828、1.8437 和 x=3.6391。

 

3.28 创建以下函数文件。

function f = parabola(a,b,c)

f = @p;

         function y = p(x)

                 y = a*x.^2+b*x+c;

          end

end

命令窗口操作如下

>>f = parabola(20,-200,12);

>>[x,fval] = fminbnd(f,0,10)

返回 x = 5,即最小值所在的位置;fval = -488,即最小值。

 

3.29 命令窗口操作如下:

>>% 创建带参数的函数。

>>parfun = @(x,a) x.^4-5*x.^3+4*x.^2+2*x.*sin(a*x-4*a)+7;

>>% 设置参数值。

>>a = pi;

>>% Create a function of x alone.

>>fun = @(x) parfun(x,a);

>>% 绘制函数曲线。

>>xp = 0:0.001:4;

>>plot(xp,fun(xp)),xlabel(‘x’),ylabel(‘f(x)’)

曲线显示,零点在 x = 1.6 附近,最小值在 x = 3.37 附近。继续以下操作。

>>% 求根。

>>x1 = fzero(fun,1.6)

x1 =

    1.6357

>>x2 = fminbnd(fun,0,4)

x2 =

    3.3755

 

3.30 首先创建函数 sse_quadratic。

function sse = sse_quadratic(x,tdata,ydata)

%  Fit a quadratic y = at^2 + bt + c

a = x(1);

b = x(2);

c = x(3);

sse = sum((ydata-a*tdata.^2-b*tdata+c).^2);

原文疑似笔误:残差式中 c 项为 +c,与注释中的拟合式及通常残差写法不一致。

end

程序的其余部分如下。

tdata = 0:2:10;

ydata = [6,13.1,34,75,139,202];

fun_quadratic = @(x)sse_quadratic(x,tdata,ydata);

x0 = [1,1,1];

coeffs = fminsearch(fun_quadratic,x0);

tp=0:0.001:10;

y=coeffs(1)*tp.^2+coeffs(2)*tp+coeffs(3);

plot(tp,y, tdata,ydata,'o')

系数 a、b、c 为

coeffs = 2.0174   -0.1927   -5.1750

题图 3.30

 

3.31 首先创建函数 sse_logistic。

function sse = sse_logistic(x,tdata,ydata)

%  Fit a logistic y = c/(1 + a*exp(-b*t))

a = x(1);

b = x(2);

c = 100;

sse = sum((ydata- c./(1 + a*exp(-b*tdata))).^2);

end

程序的其余部分如下。

tdata = 0:1:15;

ydata = [13,16,20,25,31,39,45,49,55,63,69,77,82,86,89,92];

fun_logistic = @(x)sse_logistic(x,tdata,ydata);

x0 = [1,1];

coeffs = fminsearch(fun_logistic,x0);

tp=0:0.001:15;

c = 100;

yp = c./(1 + coeffs(1)*exp(-coeffs(2)*tp));

plot(tp,yp,tdata,ydata,'o')

系数 a 和 b 为

coeffs =  6.9948    0.2817

题图 3.31

3.32 假设数据已存入文本文件 Prob3p28.txt,命令窗口操作如下:

原文疑似笔误:文字文件名为 Prob3p28.txt,而下面加载命令为 Prob3p32.txt。

>>load Prob3p32.txt

>>A = Prob3p32;

>>mean(A)

返回的答案为 56.2500、44.2500、93.7500。

 

3.33 假设数据已保存在 Excel 电子表格文件 Prob3p33.xls 中,命令窗口操作如下:

>>A = xlsread('Prob3p33');

>>S = sum(A)

S =

         227   169   377

各列总和为 227、169 和 377。

 

3.34 求解此题不需要 MATLAB 命令。