MATLAB上机习题三 解答

发布时间: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

运行屏幕截图:

MATLAB上机习题三 解答.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219