实验02 Matlab程序操作
更新时间:2024-03-11 13:16: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程序操作03-11
山西省2022年年注册会计师考试《审计》:防范措施模拟试题04-09
各技术框架架构图11-09
领导者的眼光:前瞻性和洞察力01-01
2011年村官考试论述题(汇总)04-07
如何调动学生学习的积极性和主动性01-08
3套专升本模拟试卷及答案1-302-28
今天我十岁诗朗诵04-25
Hadoop的安装部署03-28
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 实验
- 操作
- 程序
- Matlab
- 城市道路设计年度总结
- 探析园林施工工程质量管理
- 论油画色彩的表现与光影黑白灰
- 汉语言文学专业学士论文:柳青《创业史》的人物形象分析
- 我与课改同行
- SF4-不良贷款清收管理办法(试行)
- 三年级上习作第一单元学案
- 张海涛《窗》教学设计
- 公安机关实施停止执行职务和禁闭措施的规定
- 第六章 组 织
- SimpleCalendar.js日历插件
- 牵引变流器变流器工作原理概览
- 2017-2018年新人教版PEP版英语六年级上册第五单元检测卷
- 制浆造纸机械设备的安装研究
- 3式简单美颜瑜伽 瘦出紧致小脸
- 2011届中考英语模拟调研测试题1 - 图文
- 1.1.2《信用工具和外汇》
- 水文学试题
- 初中英语听、说、读、写训练经验谈
- 从跨国婚姻看中西婚姻爱情观差异 - 图文