实验02 Matlab程序操作
更新时间:2023-12-27 07:26:01 阅读量: 教育文库 文档下载
- 实验02C#语言基础推荐度:
- 相关推荐
贵州师范大学数学学院 数学实验
实验02 Matlab程序设计
实验目的:
1.掌握脚本式M文件和函数式M文件的编写、调试和运行;
2.掌握从分析问题到算法设计再到程序实现的全过程。
实验内容:
1.编写求[200,300]之间第一个能被21整除的整数的脚本式M文件,并给出运行的方法和结果。
2.编写用5次多项式拟合函数y=sin(x),x∈[0,2π]的脚本式M文件,要求绘图观察拟合的效果。
3.编写求多项式P(x)=anxn+an-1xn-1+…+a1x+a0的值的函数式M文件(不能调用函数polyval),要求通过实例调试通过。
4.编写计算第n个Fibonnaci数的函数式M文件,并应用它求第15个Fibonnaci数。
5.按“题目分析→程序设计→实现算法的程序→实例应用”的步骤解决下面的问题。
救援问题:假设洪水把一个村庄淹没了,只有那些比较高的房屋的屋顶露出水面,人们已经爬上屋顶等待求援。如右图,在图的原点是大本营,救生船每次从大本营出发,救了人之后将人送回大本营。图中的点代表屋顶,每个屋顶由其位置坐标和其上的人数表示。救生船每次从大本营出发,以速度50米/分钟驶向下一个屋
顶,达到一个屋顶后,救下其上的所有人,每人上船1分钟,船原路返回,达到大本营,每人下船0.5分钟。假设原点与任意一个屋顶的连线不穿过其它屋顶。假设屋顶数为50,给定屋顶数以及每个屋顶的坐标和人数,求出所有人都到达大本营并登陆所用的时间。并输出所有屋顶的坐标和人数。
班级:数用(2班) 姓名:李锦标 学号: 53 - 1 -
贵州师范大学数学学院 数学实验
6.按“题目分析→程序设计→算法描述→实现算法的程序→实例应用”的步骤解决下面的问题。
奖金问题:过年了,村里要庆祝一下。村长对村里的128个村民说:做一个游戏,让每个人把出生年+月+日得到一个数。例如:1968年10月28日=1968+10+28=2006。然后把这个数报上来。村里有一笔钱要作为游戏的奖金,数额为M元。如果有人报上来的数字与M相同,就把这笔钱发给这些人。如果只有一个人得奖,奖金都归这个人。如果有多于一个人得奖,则他们平分这笔钱。请写一个程序算算都有哪些人得到了奖金?得到多少?实验仪器与软件:
1.CPU主频在2GHz以上,内存在512Mb以上的PC;
2.Matlab 2010a及以上版本。 实验讲评:
实验成绩:
评阅教师: 2011年 月
班级:数用(2班) 姓名:李锦标 学号: 53 - 2 -
日贵州师范大学数学学院 数学实验
实验02 Matlab程序设计
一、求[200,300]之间第一个能被21整除的整数的脚本式M文件 脚本式M文件如下: clc clear
for n=100:200 %生成100到200之间的整数 if rem(n,21)~=0 %如果n不能被21整除 continue end break end n
二、用5次多项式拟合函数y=sin(x),x∈[0,2π]的脚本式M文件 脚本式M文件如下: clc clear
x=0:pi/20:2*pi; y=sin(x);
p=polyfit(x,y,5) x1=0:pi/30:pi*2; y1=sin(x1); y2=polyval(p,x1);
plot(x1,y1,'k-',x1,y2,'mv') legend('原曲线','拟合曲线')
三、求多项式P(x)=anxn+an-1xn-1+…+a1x+a0的值的函数式M文件 函数式M文件程序如下:
%求多项式p(x)=anxn+an-1xn-1+…+a1x+a0的值 %n代表多项式的次数 function y=polynomial(n,x)
n=input('请依次输入多项式的次数n:') y=0;
coe=zeros(1,n+1) for i=1:n+1
班级:数用(2班) 姓名:李锦标 学号: 53 - 3 -
贵州师范大学数学学院 数学实验
coe(i)=input('请依次输入多项式的系数:'); end
disp('你输入的多项式如下:') poly2sym(coe)
x=input('请输入多项式中x的值:') disp('多项式的值为:') for i=1:n+1 y=y+coe(i)*x^(n+1-i); end 函数式M文件已保存在可搜索途径范围内 四、计算第n个Fibonnaci数的函数式M文件 函数式M文件程序如下:
function F=Fb(n) %计算第n个Fibonnaci数列 %n表示下标 F(1)=1; F(2)=1; for i=3:n
F(i)=F(i-1)+F(i-2);
end end
函数式M文件已保存在可搜索途径范围内。 五、救援问题的解决 1.题目分析
根据题目分析可以把这个问题转化为一个简单的求和问题。可以单独计算出每个屋顶上的人到达大本营的时间,然后把所有时间相加即可。计算公式如下: totalTime=
totalTime+2*(sqrt(roofx(i)^2+roofy(i)^2)/speen)+roofp(i)*(up+down) 其中,totalTime是要求的总时间,N是屋顶数(本题中为50),speed是
班级:数用(2班) 姓名:李锦标 学号: 53 - 4 -
贵州师范大学数学学院 数学实验
船行驶的速度(本题中为50(米/分钟)),roof(i)是第i个屋顶的坐标,roofp(i) 是第i个屋顶上的人数。因为要在计算后输出所有屋顶位置和人数,所以需要保存所有屋顶和人数信息。 2.程序设计
⑴ 定义一个结构类型数组存放屋顶信息。
⑵ 依次读入屋顶及其上的人数信息,并保存起来。 ⑶ 计算所需营救时间。
⑷ 输出营救时间和所有屋顶坐标及人数。
3.实现算法的程序 %救援问题
%假设原点与任意一个屋顶的连线不穿过其它屋顶。假设屋顶数为50 %给定屋顶数以及每个屋顶的坐标和人数,求出所有人都到达大本营并登陆所用的时间。
%并输出所有屋顶的坐标和人数。 clear
num=50; %屋顶数 speen=50; %船速(m/min) up=1; %上船时间 down=0.5; %下船时间 totalTime=0; %救援总时间 disp('请依次输入屋顶横坐标:')
roofx=zeros(1,num); %定义一个一维数组存放屋顶的横坐标 for i=1:num
roofx(i)=input('x(i):'); end
disp('请依次输入屋顶纵坐标:')
roofy=zeros(1,num); %定义一个一维数组存放屋顶的纵坐标 for i=1:num
roofy(i)=input('y(i):'); end
disp('请依次输入屋顶人数:')
roofp=zeros(1,num); %定义一个一维数组存放屋顶人数 for i=1:num
班级:数用(2班) 姓名:李锦标 学号: 53 - 5 -
贵州师范大学数学学院 数学实验
roofp(i)=input('p(i):'); end
disp('第i个屋顶坐标(x,y)和人数p(i)依次为:') for i=1:num %输出屋顶坐标及人数 fprintf('(%g,%g)\\n',roofx(i),roofy(i)) fprintf('%g\\n',roofp(i)) fprintf('\\n') end
for i=1:num %计算总救援时间
totalTime=totalTime+2*(sqrt(roofx(i)^2+roofy(i)^2)/speen)+roofp(i)*(up+down); end
disp('总救援时间:') %输出救援时间 totalTime
4.实例应用
在上述程序中需要重复输入50个数据才能显示运行结果。太过繁琐。 所以我们只计算3个屋顶的。 令:
num= 2; %屋顶数 speen=5; %船速(m/min) 程序运行后,依次输入6个数:1、2、3、4、5、6 程序运行结果如下: %救援问题
%假设原点与任意一个屋顶的连线不穿过其它屋顶。假设屋顶数为50 %给定屋顶数以及每个屋顶的坐标和人数,求出所有人都到达大本营并登陆所用的时间。
%并输出所有屋顶的坐标和人数。 clear
num=2; %屋顶数 speen=5; %船速(m/min) up=1; %上船时间 down=0.5; %下船时间 totalTime=0; %救援总时间 disp('请依次输入屋顶横坐标:')
班级:数用(2班) 姓名:李锦标 学号: 53 - 6 -
贵州师范大学数学学院 数学实验
roofx=zeros(1,num); %定义一个一维数组存放屋顶的横坐标 for i=1:num
roofx(i)=input('x(i):'); end
disp('请依次输入屋顶纵坐标:')
roofy=zeros(1,num); %定义一个一维数组存放屋顶的纵坐标 for i=1:num
roofy(i)=input('y(i):'); end
disp('请依次输入屋顶人数:')
roofp=zeros(1,num); %定义一个一维数组存放屋顶人数 for i=1:num
roofp(i)=input('p(i):'); end
disp('第i个屋顶坐标(x,y)和人数p(i)依次为:') for i=1:num %输出屋顶坐标及人数 fprintf('(%g,%g)\\n',roofx(i),roofy(i)) fprintf('%g\\n',roofp(i)) fprintf('\\n') end
for i=1:num %计算总救援时间
totalTime=totalTime+2*(sqrt(roofx(i)^2+roofy(i)^2)/speen)+roofp(i)*(up+down); end
disp('总救援时间:') %输出救援时间 totalTime
六、奖金问题的解决 1.题目分析
首先会想到想要把128个村民报的数字读进来,本题其实就是要求一边读一边判断这128个村民报的数字是否与M相同,如果相同就记下这个村民的编号,并累积获奖村名个数,最后记下来的获奖个数去除M,得到每个人所得的奖金数。
可是事先并不知道有多少人会获奖,那么用什么样的变量来存储获奖者编
班级:数用(2班) 姓名:李锦标 学号: 53 - 7 -
贵州师范大学数学学院 数学实验
号呢?如果用128个变量来存储每个村民是否获奖就太繁琐了。所以要介绍一种称为数组的数据结构来帮助解决这个问题。 2.程序设计
可以先把村民的编号,然后用一个称为数组的数据结构来存储所有村民报的赎回自。用另一个数组存储所报数字与M相同的村民的编号。再用一个整数来存储所报数字等于M的村民的人数。 3.算法描述
⑴ 定义一个数组存放所有的村民上报的数据。 ⑵ 定义一个数组存放获奖者的编号(幸运者数组)。 ⑶ 定义一个整数存放获奖者人数。
⑷ 村民顺序上报数字,其相应编号就是存放数据的数组元素下标:0,2,3…。
⑸ 报上数字与幸运数相等,则 a、记录编号到幸运者数组中。 b、获奖者人数加1。
⑹ 打印出获奖者编号和获得的奖金数额。
4.实现算法的程序 %奖金问题。 clear
lucky_m=2006; %幸运数字 population=128; %村民人数 sum_nms=0; n=0;
disp('请输入population个村民报的数字:') nms=zeros(1,population); for i=1:population
nms(i)=input('输入数字:'); end
for i=1:population
sum_nms=sum_nms+nms(i); end
for i=1:population if nms(i)==lucky_m
班级:数用(2班) 姓名:李锦标 学号: 53 - 8 -
贵州师范大学数学学院 数学实验
n=n+1; %统计获奖村民人数 disp('获奖村民是第i个:')
i %输出是第几个村民获奖 end end
disp('共有n个村民获奖:') n
disp('获奖村民获得的奖金数:')
ave=sum_nms/n %获奖村民获得的奖金数
5.实例应用
在上述程序中需要重复输入128个数据才能显示运行结果。太过繁琐。
所以我们只计算10个村民的。 令:
lucky_m=5; %幸运数字 population=10; %村民人数
程序运行后,依次在主窗口中输以下10个数:1、2、5、6、7、5、8、9、6、5。
程序运行结果如下: %奖金问题。 clear
lucky_m=5; %幸运数字 population=10; %村民人数 sum_nms=0; n=0;
disp('请输入population个村民报的数字:') nms=zeros(1,population); for i=1:population
nms(i)=input('输入数字:'); end
for i=1:population
sum_nms=sum_nms+nms(i); end
for i=1:population if nms(i)==lucky_m
n=n+1; %统计获奖村民人数 disp('获奖村民是第i个:')
i %输出是第几个村民获奖 end end
班级:数用(2班) 姓名:李锦标 学号: 53 - 9 -
贵州师范大学数学学院 数学实验
disp('共有n个村民获奖:') n
disp('获奖村民获得的奖金数:')
ave=sum_nms/n %获奖村民获得的奖金数
七、实验总结
通过这次实验你掌握了什么,学会什么,哪些是重点掌握和加以注意的。 在本次实验中我能更进一步的掌握MATLAB的程序设计和编写,掌握了脚本式文件和函数式文件的区别与联系,特别是在保存和调用函数式文件时总是出现问题,但是经过这次实验以后自己就能够熟练的应用。但是对于后面的数学模型题,我根本找不到下手的地方,很难找到题目的开口,导致实验不能全不独立完成,在以后的学习中,应该多加强这方面的练习,多看一些数学模型题来提高自己的解题能力。
班级:数用(2班) 姓名:李锦标 学号: 53 - 10 -
正在阅读:
实验02 Matlab程序操作12-27
适用于机采棉的除尘器设计 - 图文03-15
算法效率与程序优化04-27
河道生态治理项目实施规划04-15
高中化学方程式(总)10-12
《学做家常菜》教学设计与实施案例04-03
供销社社会主义新农村建设帮扶工作组年度工作总结报告08-05
石达开“打一字”02-07
钢护筒施工方案03-07
工业萘蒸馏岗位操作规程05-09
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 实验
- 操作
- 程序
- Matlab
- 秸秆纤维素降解细菌的筛选及产酶条件优化
- 探析园林施工工程质量管理
- 最美教师演讲稿精选三篇
- 站前地下广场初步方案及功能分析
- 三年级上习作第一单元学案
- 新幼儿园小班手指游戏集(13个)
- 小学三年级工作总结
- 2011二级建造师建筑第4讲试题分析下(2011年新版)
- 精校可打印浙江省语文高考必背课文
- 第一单元数学教案
- 关于读书的作文500字共5篇
- 教材管理系统 - 图文
- 2013年中考物理真题分类汇编-电功率 4 - 图文
- 书法到底有没有规律,看启功是如何定义黄金分割定律的!
- 城市道路设计年度总结
- 初中语文教学中小组合作学习的误区
- 2017-2018年新人教版PEP版英语六年级上册第五单元检测卷
- 黄浦区2012年高考模拟考 语文试卷
- 小学四年级班主任工作计划第一学期-精选文档
- 公安机关实施停止执行职务和禁闭措施的规定