解答手册 ©
配套教材
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 =
![]() |
原文疑似笔误: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
答案为![]()
>>[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。
>>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
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 命令。