资源描述
课程设计名称: 设计一: MATALB入门(基础篇) 指导教师: 张莉
课程设计时数: 2 课程设计设备:安装了Matlab、C++软件的计算机
课程设计日期: 实验地点: 第五教学楼北802
课程设计目的:
掌握MATLAB的基本语法结构、工作环境、变量与数据操作等,能够利用MATLAB编程解决实际问题。
课程设计准备:
1. 在开始本实验之前,请回顾教科书的相关内容;
2. 需要一台准备安装Windows XP Professional操作系统和装有数学软件的计算机。
课程设计内容及要求
(1)编制m文件,等待键盘输入,输入密码123,密码正确,显示输入密码正确,程序结束;否则提示重入密码。
(2)输入x,y的值,并将它们的值互换后输出。
(3) 利用rand产生10个随机数,利用for循环对其进行排序(从大到小)。
(4)编制m文件,输入n(正整数),显示所有小于n的质数。
课程设计过程:
要求:设计过程必须包括问题叙述、问题分析、实验程序及注释、实验数据及结果分析和实验结论几个主要部分。
(1)问题叙述:密码验证问题即事先设定一个字符串作为密码,编写程序需提醒用户输入密码,甚至密码的格式等,待用户输入密码后能够判断密码是否正确,如果正确显示输入密码正确,否则提示用户密码错误,请重新输入。
问题分析:首先设定密码为123,待用户运行该程序时显示提示语“请输入密码;用if语句判断输入的字符串是否与密码相等,如果相等则输出密码正确程序结束;否则提醒用户重新输入密码。
实验程序及注释:
code=123; %设定密码
a=input('please enter the code \n'); %输入提示
while a~=code
a=input('please enter again \n'); %输入错误请重新输入
end
if a==code
disp('the code is right'); %输入正确
end
实验数据及结果分析:在MATLAB命令窗口中输入密码,若输入123则提示用户输入密码正确,程序结束;若密码不正确(如输入456)则提示用户重新输入,当多次输入仍不正确时程序将不断循环,不断提示用户重新输入密码,直到输入密码正确为止。
(2)问题叙述及分析:该问题要求编写程序将两个变量的值进行交换,首先两个变量的数值从键盘输入,这样当不同用户要交换的值不同时避免了修改程序。主程序引入一个临时变量来交换两变量的值,最后输出两变量交换后的值。
实验程序及注释:
x=input('输入x的值\n');
y=input('输入y的值\n');
b=x; %将x的值赋给临时变量b
x=y; %将y的值赋给x
y=b; %将临时变量的值赋给y
x,y
实验数据及结果分析:由键盘输入x、y的值,如输入7、9,交换后输出的结果为x=9、y=7。
(3)问题叙述:对随机产生的10个数按从大到小排序,编写程序需从第一个数开始逐一比较,一旦遇到比自己大的数即进行交换,这样使小数排在大数后面。
问题分析:程序利用两个for循环语句来实现10个数的排序,第一个for循环表明共进行9趟比较,即前9个数和它后面的数做比较,第二个for循环表明每趟比较中进行10-i次两两比较,即第一个数和它后面的所有数比较,第二到第九个数只和它们之后的数比较,若发现前面的数比后面的数小的情况则交换两数。
实验程序及注释:
a=rand(1,10);
for i=1:1:10 %共进行9趟比较
for j=1:1:10-i %每趟中进行10-i次两两比较
if a(j)<a(j+1) %如果前面的数小于后面的数则进行交换
temp=a(j);
a(j)=a(j+1);
a(j+1)=temp;
end
end
end
a
实验数据及结果分析;执行程序时MATLAB随机产生10个数,然后从第一个数开始与其后的9个数比较,遇到大于它的数即交换;再将第二个数与其后8个数比较,按从大到小的原则进行判断,依此类推,将前9个数都进行一次这样的比较,即可将小数下沉大数上浮。
(4)问题叙述:输入一个正整数n,找出小于n的质数,首先质数是除了1和本身不能整除其他数的数,所以编写程序要判断这个数能不能被1和本身以外的数整除,如果不能则该数为质数。
问题分析:由于偶数不可能为质数,该程序在寻找小于n的质数时只需判断小于n的奇数是否为质数即可。而判断的方法是用该数除以2和根号下自身之间的数,由于一个数总可以分解为一个大数和一个小数的乘积(除去平方的情况),所以只要该数不能被这之间的数整除则证明是质数。
实验程序及注释:
n=input('n=\n');
prime=[2];k=0; %初始化数组
for i=3:n
for m=2:fix(sqrt(i)) %m取2到i的平方根
if mod(i,m)==0 %若i除以m的余数为零,即i不是余数
k=1; %k用来表示i是不是质数,k等于1表示i不是质数
break;
else
k=0;
end
end
if k==0
prime=[prime [i]]; %往数组里添加新找出的质数
end
end
prime
实验数据及结果分析:如输入n的值为25,定义一个数组来存储找出的质数,容易知道1不是质数,2是质数,所以将不再判断这两个数。直接将数组赋初值为[2],从3开始判断,在[2,]的区间内判断n能否被整除,得出25以内的质数有2、3、5、7、11、13、17、19、23。这样只判断2到根号n之间的数大大减小了程序的时间复杂度。
课程设计总结(由学生填写): 本次实验我学会了MATLAB中一些基本程序的应用。问题一是设置密码问题,用if语句判断输入的密码是否正确,若不正确则用while循环语句返回程序提醒用户重新输入密码。问题二只需借助一个临时变量,将其中一个数的值赋给临时变量,这样就实现了两个数的交换。问题三是冒泡排序法,利用两个for循环从第一个数到第九个数逐一与其后的数进行比较,实现小数排在后大数排在前。问题四在找小于n的质数时只需判断小于n的奇数是否为质数即可,对于判断一个数i是否为质数的方法,用i除以2到根号i以内的数,若都不能整除即为质数。本次实验难度不大,是MATLAB的入门知识,在完成该实验的过程中遇到了一些细节上的问题,今后会更加努力的学习MATLAB知识,在下一次遇到这些问题时能熟练的解决。
课程设计名称: 设计二: 开方算法 指导教师: 张莉
课程设计时数: 2 课程设计设备:安装了Matlab、C++软件的计算机
课程设计日期: 实验地点: 第五教学楼北802
课程设计目的:
掌握开方算法的基本思想,能够套用开方算法的基本公式,并在此基础上改进和创新开方算法。
课程设计准备:
1. 在开始本实验之前,请回顾教科书的相关内容;
2. 需要一台准备安装Windows XP Professional操作系统和装有数学软件的计算机。
课程设计内容及要求
利用平方法求解,在此基础上,请给出新的求解方法,并对结果进行适当地分析(速度和精度等)。
课程设计过程:
要求:设计过程必须包括问题叙述、问题分析、实验程序及注释、实验数据及结果分析和实验结论几个主要部分。
普通开方算法:
问题叙述:本题要求x=的解,相对于加减乘除等简单四则运算来说,开方算法无疑是比较复杂的,因此我们需要设计出一种算法,使复杂的开方算法归结为四则运算的重复,这样就能根据一步步检验求出该方程比较精确的解。
问题分析:开方算法的基本思想是,给出一个计算开方的迭代公式,对于任给的x0大于0,对k=0,1,2,…执行该算式,直到前后两项偏差小于一个给定的精度为止,最终获得的近似值即为所求。因此在编写程序时需要有执行迭代的语句,并有结束迭代的条件。
实验程序及注释:
x0=input('input x0\n'); %设定迭代初值
a=3;er=1;
n=0; %定义一个计数器记录循环次数
while er>0.00001 %当误差大于0.00001时执行
x=0.5*(x0+a/x0); %迭代公式
er=abs(x-x0);
x0=x; %数值解
n=n+1;
end
x
sqrta=sqrt(a) %真实数值
n,er
实验数据及结果:设定迭代初始值为1,求出根号3的解为1.73205080756888,与真实值基本相等。该程序运行的迭代次数为5次,误差值为2.44585e-009小于0.00001,执行结果较好。
改进的开方算法:
在普通的开方算法中,我们设定初始值为1,但当需要开方的数比较大时,它的根显然是大于1的,所以在改进的开方算法中我们通过一个for循环来确定初始值,这样就减少了计算的时间。
实验程序及注释:
a=3;er=1;
n=0; %定义一个计数器记录循环次数
for i=1:a
if(i*i<=a)
x0=i;
end
end
while er>0.00001 %当误差大于0.00001时执行
x=0.5*(x0+a/x0); %迭代公式
er=abs(x-x0);
x0=x; %数值解
n=n+1;
end
x
sqrta=sqrt(a) %真实数值
n,er
课程设计总结(由学生填写): 通过本次实验我掌握了开方的普通算法,经过在预报值上加上一个校正值来导出迭代公式,利用误差小于某一精度的条件来终止程序,这样最终得到一个较好的近似值。对于开方算法的改进方法,通过一个for循环语句来确定初始值,这样不仅减少了计算的时间复杂度还提高了求解结果的精度。
展开阅读全文