MATLAB上机习题三 解答
发布时间:2024-10-12
发布时间:2024-10-12
合肥工业大学MATLAB答案
MATLAB上机习题三
请按以下步骤完成上机实验:
1) 在FTP上下载“MATLAB上机习题三.doc”文件,所有习题列在该文件内; 2) 在MATLAB中完成所有习题;
3) 如果是仅需要在命令窗口输入完成的习题,则只需将屏幕截图粘贴到相应习题后面; 3) 如果习题是问答题,请将答案写在题目后;
4) 如果有的习题要求提供脚本文件,请将脚本文件内容拷贝到相应习题后,并将运行结果的截图粘贴到
相应习题后;
,上传到FTP上的“上传作业”5) 将文件保存并重命名为自己的学号-姓名,例如“20110771-张三.doc”
目录
1. 完成下列操作:
1)使用input函数提示需要输入一个字符串,将输入的字符串保存在变量str1中; 2)将字符串转换成大写,存储在str2中;
3)使用menu函数,选项分别是str1和str2,获取用户的选择;
4)使用fprintf函数按‘你选择的是xxx’格式('xxx'是相应的字符串内容)输出选择结果到命令窗口。 解答:
(拷贝各函数脚本到如下方框中): %1)
str1 = input('请输入一个字符串:','s'); %2)
str2 = upper(str1); %或使用上一次作业的方法 %3)
id = menu('请选择字符串', str1, str2); %4)
ss = char(str1,str2);
合肥工业大学MATLAB答案
fprintf('你选择的字符串是%s\n',ss(id,:));
运行屏幕截图: 略
2. 我国第二代身份证号码一共18位,其中第7~14位为出生日期,用input命令提示并获取输入的身份证号,存储在字符串变量s中,尝试将初始年月日解析到变量year、month和day中,并用sprintf函数按“你的生日是xxxx年xx月xx日”格式输出到字符串str中,并在命令窗口显示str的值,其中xx表示对应的数值,如身份证号为‘123456199908153333’,应输出'你的生日是1999年8月15日'。提示:使用str2num将字符串转换为数值,如:
x = str2num('3.14')
则x的值为3.14 解答:
(拷贝各函数脚本到如下方框中):
s = input('请输入您的身份证号:','s'); year = str2num(s(7:10)); month = str2num(s(11:12)); day = str2num(s(13:14));
str = sprintf('你的生日是%d年%d月%d日',year,month,day); disp(str)
运行屏幕截图: 略
3. 用fprintf函数按如下格式输出-1/6的值: 1)小数点后8位数字的浮点数形式; 2)小数点后8位数字的科学计数法形式 解答:
(拷贝各函数脚本到如下方框中): %1)
fprintf('%11.8f\n', -1/6) %2)
合肥工业大学MATLAB答案
fprintf('%16.8E\n', -1/6)
运行屏幕截图: 略
4. 生成5*5的魔术矩阵A,完成下列任务:
1)使用save命令将A保存到文件A.mat中,然后使用clear命令清除变量A,再使用load命令将变量A读取到MATLAB中;
2)使用csvwrite将A保存到文件'A.csv'中;
3)使用csvread命令将第二问保存的文件内容读取到变量B,与A的值作比较观察是否正确; 4)使用dlmread、dlmwrite命令,用空格作为分隔符完成第2、3问。 解答:
(拷贝各函数脚本到如下方框中): A = magic(5); %1)
save('A.mat', 'A'); %注意必须将变量放在引号中 clear A
load('A.mat'); %2)
csvwrite('A.csv', A); %3)
B=csvread('A.csv'); %4)
dlmwrite('A.txt', A, ' '); B = dlmread('A.txt', ' ');
运行屏幕截图: 略
5. 使用input函数获取输入值,并使用if系列选择结构解决下列问题(使用disp或fprintf函数输出信息):
1)目前我国的法定结婚年龄为男性不低于22周岁、女性不低于20,判断指定性别的公民是
合肥工业大学MATLAB答案
否满足结婚年龄要求。
2)在产品制造时,通常会规定产品尺寸的容许误差。假设某产品的长度为5.4cm,可以允许有0.1cm的正负误差,判断输出长度产品是否符合技术要求。
3)固体燃料火箭发动机有三级。第一级的燃料耗尽后与箭体分离,第二级点火。然后第二级燃尽分离后第三级点火。最后,第三级燃尽后与导弹分离,处于自由飞行阶段。各级的燃烧时间如下所示:
一级 二级 三级
1~100s 100~170s 170~260s
判断输入时间火箭正处于哪一阶段。(提示,可返回1~4分别表示1~3级以及自由飞行阶段) 解答:
(拷贝各函数脚本到如下方框中): %1)
sex=input('请输入性别(0=女性, 其它=男性):'); age=input('请输入年龄:');
if (sex==0 && age>=22) || (sex~=0 && age>=20) disp('满足结婚年龄要求') else
disp('不满足结婚年龄要求') end %2)
len = input('请输入产品长度(单位cm):') if len<(5.4-0.1) || len>(5.4+0.1) disp('产品不符合技术要求') else
disp('产品符合技术要求') end
运行屏幕截图:
合肥工业大学MATLAB答案
略
6. 已知今日汽油价格如下表所示,
90 93 97 0
9.66元/升 7.46元/升 7.9元/升 7.36元/升
使用switch结构,创建计算总费用的函数,输入变量为油品类型(如93号汽油类型值为93)、加油量,并进行测试。 解答:
(拷贝各函数脚本到如下方框中): function P = TotalOilPrice(n,v) %计算加油费用 %使用方法:
% TotalOilPrice(n,v)
%n -- 油品类型,只能是以下数值之一: 90,93,97,0 %v -- 加油量,单位为L
switch n case 0
P=7.36*v; case 90
P=9.66*v; case 93
P=7.46*v; case 97
P=7.9*v; otherwise
disp('无效的油品编号'); end end
运行屏幕截图:
合肥工业大学MATLAB答案
7. 创建函数g满足下面的要求:
x< π 1
=g(x) cosx π≤x≤π
1x>π
选择合适的步长,使用plot函数画出x在-2π到2π范围内的函数曲线。 解答:
(拷贝各函数脚本到如下方框中): %1)
函数脚本文件func_g.m function g = func_g(x) if x<-pi g=-1;
elseif x>=-pi & x<=pi %注意,此处不能用双逻辑运算符&& g=cos(x); else g=-1; end end
%2)调用函数func_g计算并绘图的脚本 x=linspace(-2*pi,2*pi,100); y=zeros(size(x)); for n=1:length(x) y(n)=func_g(x(n));
合肥工业大学MATLAB答案
end plot(x,y)
运行屏幕截图:
8. 从热电偶监测到的温度数据保存在文件temp.csv中,其数据格式如下表所示: 时间(小时) 1 2 ... 24
热电偶1温度
68.70 65.00 ... 74.87
热电偶2温度 58.11 58.52 ... 55.25
热电偶3温度 87.81 85.69 ... 89.53
表中第一列为测量时间,每隔1小时测一次,其余几列为各个热电偶的温度数据。
合肥工业大学MATLAB答案
提示:使用csvread函数读取数据,参见第四讲内容。
1)编写程序查找温度高于86.0的数据的位置(时间序号和传感器号),提示:可用find函数; 2)查找并输出温度低于65.0的数据的位置(时间序号和传感器号); 3)查找并输出最高温度以及出现最高温度的时间和热电偶编号。 解答:
(拷贝脚本程序到如下方框中): clear all clc
%首先将数据读入到数组中 A=csvread('temp.csv'); T=A(:,1); %取出第一列时间项
A(:,1)=[]; %移除时间第一列时间项,此时A的第i列代表第i个传感器 %1)
[tid1,sid1]=find(A>86) %tid1中存放时间序号(行号),sid1中存放传感器编号 %2)
[tid2,sid2]=find(A<65) %tid2中存放时间序号(行号),sid2中存放传感器编号 %3)
[tid3,sid3]=max(A) %tid3中存放每列的最大值,sid3中存放最大值所在行号 [data,id]=max(tid3) %data为tid3中的最大值,id为tid3中最大值的编号 fprintf('最高温度的时间编号为: %d\n',sid3(id)); fprintf('最高温度的传感器编号为: %d\n',id);
fprintf('最高温度的传感器时间为: %f\n',T(sid3(id))); fprintf('最高温度的传感器数据: %f\n',data);
%说明,此题也可以用循环语句来查找,具体方法自行思考.
运行屏幕截图: 略
合肥工业大学MATLAB答案
9. 已知x = [-3,0,0,2,5,8],y = [-5,-2,0,3,4,10],
1)分别使用数组运算、for、while循环实现z=x+y,注意比较结果判断计算是否有误; 2)使用for循环对z的元素求和,和sum函数的计算结果进行对比。 解答:
(拷贝输入命令到如下方框中): x=[-3 0 0 2 5 8]; y=[-5 -2 0 3 4 10]; %1)
%1.1)使用数组运算 z=x+y
%1.2)使用for循环
z=zeros(size(x)); %初始化z for n=1:length(x) z(n)=x(n)+y(n); end disp(z)
%1.3)使用while循环
z=zeros(size(x)); %初始化z n=1;
while n<=length(x)
z(n)=x(n)+y(n); n=n+1; end disp(z) %2)
sumz=0; %初始化和为0 for n=1:length(z) sumz=sumz+z(n); end
合肥工业大学MATLAB答案
disp(sumz) disp(sum(z))
运行屏幕截图: 略
10. 已知银行存款利率为6%(即存款100元,1年的利息为6元),想在20年内累积1百万元财富,平均每年需要向银行存多少钱?请使用循环结构来计算。 解答:
(拷贝脚本到如下方框中): clear all
clc
msum=0;
for mm=1:50000 msum=0;
for nn=1:20
msum=(msum+mm)*1.06; end
if msum>=1000000
fprintf('每年至少需要存入 %d 元.\n',mm) break; end end
运行屏幕截图:
上一篇:初二测试题.学生
下一篇:红领巾广播站工作安排表