第04章_MATLAB程序设计_参考解答
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高教社刘卫国《MATLAB 程序设计与应用》 (第二版)习题参考解答
第 4 章:MATLAB 程序设计
第4章
教材 P81 习题四
MATLAB 程序设计
1. 从键盘上输入一个 4 位整数, 按如下规则加密后输出。 加密规则: 每位数字都加上 7, 然后用和除以 10 的余数取代该数字;再把第一位与第三位交换,第二位与第四位交换。 答:程序设计: clear all; close all; clc; a=input('请输入一个 4 位整数:'); while (a<1000|a>9999) a=input('输入错误,不是一个 4 位整数,请输入一个 4 位整数:'); end b=fix(a/1000); %千位数字(第四位数字) c=rem(fix(a/100),10); %百位数字(第三位数字) d=rem(fix(a/10),10); %十位数字(第二位数字) e=rem(a,10); %个位数字(第一位数字) b=rem(b+7,10); %该位数字加 7,然后用和除以 10 的余数取代该数字 c=rem(c+7,10); %该位数字加 7,然后用和除以 10 的余数取代该数字 d=rem(d+7,10); %该位数字加 7,然后用和除以 10 的余数取代该数字 e=rem(e+7,10); %该位数字加 7,然后用和除以 10 的余数取代该数字 g=c;c=e;e=g; %将第一位和第三位交换 g=b;b=d;d=g; %将第二位和第四位交换 a=1000*b+100*c+10*d+e; %a 为加密后的整数 disp(['加密后:', num2str(a)]) 2. 分别用 if 语句和 switch 语句实现以下计算,其中 a,b,c 的值从键盘输入。 ⎧ ⎪ax 2 + bx + c, 0.5 ≤ x < 1.5 ⎪ ⎪ y = ⎨a sin c b + x, 1.5 ≤ x < 3.5 ⎪ c ⎪ln b + , 3.5 ≤ x < 5.5 x ⎪ ⎩ 答:程序设计: (1) 用 if 语句来实现: clear all; close all; clc; a=input('请输入 a: '); b=input('请输入 b: '); c=input('请输入 c: '); for x=0.5:1:5.5 if x>=0.5 & x<1.5 y=a.*(x.^2)+b.*x+c elseif x>=1.5 & x<3.5 y=a*(sin(b)^c)+x elseif x>=3.5 & x<5.5
sum2=0; %当 n 取 1000 时 for n=1:1000 x=(-1)^(n+1)*(1/n); sum2=sum2+x; end disp(['当 n 取 1000 时: sum=', num2str(sum2)]) sum3=0; %当 n 取 10000 时 for n=1:10000 x=(-1)^(n+1)*(1/n); sum3=sum3+x; end disp(['当 n 取 10000 时:sum=', num2str(sum3)])
高教社刘卫国《MATLAB 程序设计与应用》 (第二版)习题参考解答
第 4 章:MATLAB 程序设计
6. 当 n 分别取 100、1000、10000 时,求下列各式的值。 1 1 1 1 (1) 1 − + − + " + (−1) n +1 + " (= ln 2) 2 3 4 n 1 1 1 π (2) 1 − + − + "(= ) 3 5 7 4 1 1 1 1 1 (3) + + + " + n + "(= ) 4 16 64 4 3 ⎛ 2 × 2 ⎞⎛ 4 × 4 ⎞⎛ 6 × 6 ⎞ ⎛ (2n)(2n) ⎞ ⎛ π ⎞ (4) ⎜ ⎟ "⎜ = ⎟ ⎟⎜ ⎟⎜ ⎟ "⎜ ⎝ 1× 3 ⎠⎝ 3 × 5 ⎠⎝ 5 × 7 ⎠ ⎝ (2n − 1)(2n + 1) ⎠ ⎝ 2 ⎠ 要求分别用循环结构和向量运算(使用 sum 或 prod 函数)来实现。 答: (1) 程序设计: clear all; close all; clc; sum1=0; %当 n 取 100 时 for n=1:100 x=(-1)^(n+1)*(1/n); sum1=sum1+x; end disp(['当 n 取 100 时: sum=', num2str(sum1)])
sum1=1; %当 n 取 100 时 for n=1:100 x=4*n*n/(2*n-1)/(2*n+1); sum1=sum1*x; end disp(['当 n 取 100 时: sum=', num2str(sum1)]) sum2=1; %当 n 取 1000 时 for n=1:1000 x=4*n*n/(2*n-1)/(2*n+1); sum2=sum2*x; end disp(['当 n 取 1000 时: sum=', num2str(sum2)]) sum3=1; %当 n 取 10000 时 for n=1:10000 x=4*n*n/(2*n-1)/(2*n+1); sum3=sum3*x; end disp(['当 n 取 10000 时:sum=', num2str(sum3)])
高教社刘卫国《MATLAB 程序设计与应用》 (第二版)习题参考解答
第 4 章:MATLAB 程序设计
disp(['当 n 取 100 时: sum=', num2str(sum1)]) sum2=0; %当 n 取 1000 时 n2=0; for n=1:2:1000 x=(-1)^n2*(1/n); sum2=sum2+x; n2=n2+1; end disp(['当 n 取 1000 时: sum=', num2str(sum2)]) sum3=0; %当 n 取 10000 时 n3=0; for n=1:2:10000 x=(-1)^n3*(1/n); sum3=sum3+x; n3=n3+1; end disp(['当 n 取 10000 时:sum=', num2str(sum3)])
王成优©山东大学 (威海) MATLAB 语言 1 WangChengyou © Shandong University, Weihai
高教社刘卫国《MATLAB 程序设计与应用》 (第二版)习题参考解答
第 4 章:MATLAB 程序设计
y=log(abs(b+c./x)) end end (2) 用 switch 语句来实现: clear all; close all; clc; a=input('请输入 a: '); b=input('请输入 b: '); c=input('请输入 c: '); for x=0.5:1:5.5 switch floor(x/0.5) case {1,2} y=a.*(x.^2)+b.*x+c; case {3,4,5,6} y=a*(sin(b)^c)+x; case {7,8,9,10} y=log(abs(b+c./x)); end disp(y) end (3) 用逻辑表达式来实现: clear all; close all; clc; a=input('请输入 a: '); b=input('请输入 b: '); c=input('请输入 c: '); x=0.5:1:5.5; x1=(x>=0.5&x<1.5); x2=(x>=1.5&x<3.5); x3=(x>=3.5&x<5.5); y1=a.*(x.^2)+b.*x+c; y2=a*(sin(b)^c)+x; y3=log(abs(b+c./x)); y=y1.*x1+y2.*x2+y3.*x3; disp(y) 3. 产生 20 个两位随机整数,输出其中小于平均值的偶数。 答:程序设计: clear all; close all; clc; x=fix(rand(1,20)*89)+10; disp(['20 个两位随机数是:', num2str(x)]); x1=mean(x); disp(['平均值为:', num2str(x1)]); n=find(rem(x,2)==0 & x<x1); disp(['其中小于平均值的偶数是:', num2str(x(n))]);
(2) 调用 MATLAB 的 sum 函数: clear all; close all; clc; k=0:63; n=2.^k; s=sum(nLeabharlann Baidu; disp(['2 的 0 次方到 63 次方的和是:', num2str(s)])
王成优©山东大学 (威海) MATLAB 语言
3
WangChengyou © Shandong University, Weihai
s = 1 + 2 + 22 + 23 + " + 263 分别用循环结构和调用 MATLAB 的 sum 函数求 s 的值。 答:程序设计: (1) 用循环结构: clear all; close all; clc; s=0; for a=0:63 c=2^a; s=s+c; end disp(['2 的 0 次方到 63 次方的和是:', num2str(s)])
(3) 程序设计: clear all; close all; clc; sum1=0; %当 n 取 100 时 for n=1:100 x=1/(4^n); sum1=sum1+x; end disp(['当 n 取 100 时: sum=', num2str(sum1)])
sum2=0; %当 n 取 1000 时 for n=1:1000 x=1/(4^n); sum2=sum2+x; end disp(['当 n 取 1000 时: sum=', num2str(sum2)]) sum3=0; %当 n 取 10000 时 for n=1:10000 x=1/(4^n); sum3=sum3+x; end disp(['当 n 取 10000 时:sum=', num2str(sum3)])
(2) 程序设计: clear all; close all; clc; sum1=0; %当 n 取 100 时 n1=0; for n=1:2:100 x=(-1)^n1*(1/n); sum1=sum1+x; n1=n1+1; end
王成优©山东大学 (威海) MATLAB 语言 4 WangChengyou © Shandong University, Weihai
(4) 程序设计: clear all; close all; clc;
王成优©山东大学 (威海) MATLAB 语言 5 WangChengyou © Shandong University, Weihai
高教社刘卫国《MATLAB 程序设计与应用》 (第二版)习题参考解答
第 4 章:MATLAB 程序设计
2
王成优©山东大学 (威海) MATLAB 语言
WangChengyou © Shandong University, Weihai
高教社刘卫国《MATLAB 程序设计与应用》 (第二版)习题参考解答
第 4 章:MATLAB 程序设计
4. 输入 20 个数, 求其中最大数和最小数。 要求分别用循环结构和调用 MATLAB 的 max 函数、min 函数来实现。 答:程序设计: (1) 用循环结构来实现: clear all; close all; clc; A=input('请输入 20 个数的一个行向量(用[]括起来) :'); a=A(1); b=A(1); for m=A if a>=m a=m; elseif b<=m b=m; end end disp(['最小数是:', num2str(a)]) disp(['最大数是:', num2str(b)]) (2) 调用 MATLAB 的 max 函数、min 函数来实现: clear all; close all; clc; A=input('请输入 20 个数的一个行向量(用[]括起来) :'); maxval=max(A) %maxval 为其中最大数 minval=min(A) %minval 为其中最小数 5. 已知:
第 4 章:MATLAB 程序设计
第4章
教材 P81 习题四
MATLAB 程序设计
1. 从键盘上输入一个 4 位整数, 按如下规则加密后输出。 加密规则: 每位数字都加上 7, 然后用和除以 10 的余数取代该数字;再把第一位与第三位交换,第二位与第四位交换。 答:程序设计: clear all; close all; clc; a=input('请输入一个 4 位整数:'); while (a<1000|a>9999) a=input('输入错误,不是一个 4 位整数,请输入一个 4 位整数:'); end b=fix(a/1000); %千位数字(第四位数字) c=rem(fix(a/100),10); %百位数字(第三位数字) d=rem(fix(a/10),10); %十位数字(第二位数字) e=rem(a,10); %个位数字(第一位数字) b=rem(b+7,10); %该位数字加 7,然后用和除以 10 的余数取代该数字 c=rem(c+7,10); %该位数字加 7,然后用和除以 10 的余数取代该数字 d=rem(d+7,10); %该位数字加 7,然后用和除以 10 的余数取代该数字 e=rem(e+7,10); %该位数字加 7,然后用和除以 10 的余数取代该数字 g=c;c=e;e=g; %将第一位和第三位交换 g=b;b=d;d=g; %将第二位和第四位交换 a=1000*b+100*c+10*d+e; %a 为加密后的整数 disp(['加密后:', num2str(a)]) 2. 分别用 if 语句和 switch 语句实现以下计算,其中 a,b,c 的值从键盘输入。 ⎧ ⎪ax 2 + bx + c, 0.5 ≤ x < 1.5 ⎪ ⎪ y = ⎨a sin c b + x, 1.5 ≤ x < 3.5 ⎪ c ⎪ln b + , 3.5 ≤ x < 5.5 x ⎪ ⎩ 答:程序设计: (1) 用 if 语句来实现: clear all; close all; clc; a=input('请输入 a: '); b=input('请输入 b: '); c=input('请输入 c: '); for x=0.5:1:5.5 if x>=0.5 & x<1.5 y=a.*(x.^2)+b.*x+c elseif x>=1.5 & x<3.5 y=a*(sin(b)^c)+x elseif x>=3.5 & x<5.5
sum2=0; %当 n 取 1000 时 for n=1:1000 x=(-1)^(n+1)*(1/n); sum2=sum2+x; end disp(['当 n 取 1000 时: sum=', num2str(sum2)]) sum3=0; %当 n 取 10000 时 for n=1:10000 x=(-1)^(n+1)*(1/n); sum3=sum3+x; end disp(['当 n 取 10000 时:sum=', num2str(sum3)])
高教社刘卫国《MATLAB 程序设计与应用》 (第二版)习题参考解答
第 4 章:MATLAB 程序设计
6. 当 n 分别取 100、1000、10000 时,求下列各式的值。 1 1 1 1 (1) 1 − + − + " + (−1) n +1 + " (= ln 2) 2 3 4 n 1 1 1 π (2) 1 − + − + "(= ) 3 5 7 4 1 1 1 1 1 (3) + + + " + n + "(= ) 4 16 64 4 3 ⎛ 2 × 2 ⎞⎛ 4 × 4 ⎞⎛ 6 × 6 ⎞ ⎛ (2n)(2n) ⎞ ⎛ π ⎞ (4) ⎜ ⎟ "⎜ = ⎟ ⎟⎜ ⎟⎜ ⎟ "⎜ ⎝ 1× 3 ⎠⎝ 3 × 5 ⎠⎝ 5 × 7 ⎠ ⎝ (2n − 1)(2n + 1) ⎠ ⎝ 2 ⎠ 要求分别用循环结构和向量运算(使用 sum 或 prod 函数)来实现。 答: (1) 程序设计: clear all; close all; clc; sum1=0; %当 n 取 100 时 for n=1:100 x=(-1)^(n+1)*(1/n); sum1=sum1+x; end disp(['当 n 取 100 时: sum=', num2str(sum1)])
sum1=1; %当 n 取 100 时 for n=1:100 x=4*n*n/(2*n-1)/(2*n+1); sum1=sum1*x; end disp(['当 n 取 100 时: sum=', num2str(sum1)]) sum2=1; %当 n 取 1000 时 for n=1:1000 x=4*n*n/(2*n-1)/(2*n+1); sum2=sum2*x; end disp(['当 n 取 1000 时: sum=', num2str(sum2)]) sum3=1; %当 n 取 10000 时 for n=1:10000 x=4*n*n/(2*n-1)/(2*n+1); sum3=sum3*x; end disp(['当 n 取 10000 时:sum=', num2str(sum3)])
高教社刘卫国《MATLAB 程序设计与应用》 (第二版)习题参考解答
第 4 章:MATLAB 程序设计
disp(['当 n 取 100 时: sum=', num2str(sum1)]) sum2=0; %当 n 取 1000 时 n2=0; for n=1:2:1000 x=(-1)^n2*(1/n); sum2=sum2+x; n2=n2+1; end disp(['当 n 取 1000 时: sum=', num2str(sum2)]) sum3=0; %当 n 取 10000 时 n3=0; for n=1:2:10000 x=(-1)^n3*(1/n); sum3=sum3+x; n3=n3+1; end disp(['当 n 取 10000 时:sum=', num2str(sum3)])
王成优©山东大学 (威海) MATLAB 语言 1 WangChengyou © Shandong University, Weihai
高教社刘卫国《MATLAB 程序设计与应用》 (第二版)习题参考解答
第 4 章:MATLAB 程序设计
y=log(abs(b+c./x)) end end (2) 用 switch 语句来实现: clear all; close all; clc; a=input('请输入 a: '); b=input('请输入 b: '); c=input('请输入 c: '); for x=0.5:1:5.5 switch floor(x/0.5) case {1,2} y=a.*(x.^2)+b.*x+c; case {3,4,5,6} y=a*(sin(b)^c)+x; case {7,8,9,10} y=log(abs(b+c./x)); end disp(y) end (3) 用逻辑表达式来实现: clear all; close all; clc; a=input('请输入 a: '); b=input('请输入 b: '); c=input('请输入 c: '); x=0.5:1:5.5; x1=(x>=0.5&x<1.5); x2=(x>=1.5&x<3.5); x3=(x>=3.5&x<5.5); y1=a.*(x.^2)+b.*x+c; y2=a*(sin(b)^c)+x; y3=log(abs(b+c./x)); y=y1.*x1+y2.*x2+y3.*x3; disp(y) 3. 产生 20 个两位随机整数,输出其中小于平均值的偶数。 答:程序设计: clear all; close all; clc; x=fix(rand(1,20)*89)+10; disp(['20 个两位随机数是:', num2str(x)]); x1=mean(x); disp(['平均值为:', num2str(x1)]); n=find(rem(x,2)==0 & x<x1); disp(['其中小于平均值的偶数是:', num2str(x(n))]);
(2) 调用 MATLAB 的 sum 函数: clear all; close all; clc; k=0:63; n=2.^k; s=sum(nLeabharlann Baidu; disp(['2 的 0 次方到 63 次方的和是:', num2str(s)])
王成优©山东大学 (威海) MATLAB 语言
3
WangChengyou © Shandong University, Weihai
s = 1 + 2 + 22 + 23 + " + 263 分别用循环结构和调用 MATLAB 的 sum 函数求 s 的值。 答:程序设计: (1) 用循环结构: clear all; close all; clc; s=0; for a=0:63 c=2^a; s=s+c; end disp(['2 的 0 次方到 63 次方的和是:', num2str(s)])
(3) 程序设计: clear all; close all; clc; sum1=0; %当 n 取 100 时 for n=1:100 x=1/(4^n); sum1=sum1+x; end disp(['当 n 取 100 时: sum=', num2str(sum1)])
sum2=0; %当 n 取 1000 时 for n=1:1000 x=1/(4^n); sum2=sum2+x; end disp(['当 n 取 1000 时: sum=', num2str(sum2)]) sum3=0; %当 n 取 10000 时 for n=1:10000 x=1/(4^n); sum3=sum3+x; end disp(['当 n 取 10000 时:sum=', num2str(sum3)])
(2) 程序设计: clear all; close all; clc; sum1=0; %当 n 取 100 时 n1=0; for n=1:2:100 x=(-1)^n1*(1/n); sum1=sum1+x; n1=n1+1; end
王成优©山东大学 (威海) MATLAB 语言 4 WangChengyou © Shandong University, Weihai
(4) 程序设计: clear all; close all; clc;
王成优©山东大学 (威海) MATLAB 语言 5 WangChengyou © Shandong University, Weihai
高教社刘卫国《MATLAB 程序设计与应用》 (第二版)习题参考解答
第 4 章:MATLAB 程序设计
2
王成优©山东大学 (威海) MATLAB 语言
WangChengyou © Shandong University, Weihai
高教社刘卫国《MATLAB 程序设计与应用》 (第二版)习题参考解答
第 4 章:MATLAB 程序设计
4. 输入 20 个数, 求其中最大数和最小数。 要求分别用循环结构和调用 MATLAB 的 max 函数、min 函数来实现。 答:程序设计: (1) 用循环结构来实现: clear all; close all; clc; A=input('请输入 20 个数的一个行向量(用[]括起来) :'); a=A(1); b=A(1); for m=A if a>=m a=m; elseif b<=m b=m; end end disp(['最小数是:', num2str(a)]) disp(['最大数是:', num2str(b)]) (2) 调用 MATLAB 的 max 函数、min 函数来实现: clear all; close all; clc; A=input('请输入 20 个数的一个行向量(用[]括起来) :'); maxval=max(A) %maxval 为其中最大数 minval=min(A) %minval 为其中最小数 5. 已知: