数学软件实训任务一
一 题目:MATLAB程序设计及应用初步
二 目的:掌握MATLAB程序设计的基本方法,会利用MATLAB程序设计思想编程处理一些简单问题。
三 要求:
1 掌握控制流的基本语法结构。
2 会应用for循环,while循环及分支语句if …else和switch…case等进行编程。
3 结合实际应用,会用基本语句进行简单的交叉编程。
四 实训内容:
1 MATLAB控制流语法结构及其意义
(1) 循环语句
for循环语句结构
for 循环变量=数组
指令组;
end
对于循环变量依次取数组中的值,循环指令组直到循环变量遍历数组。数组最常用的形式是:初值:增量:终值。
while循环语句结构
while 条件式
指令组
End
当条件式满足,指令组一直执行,循环指令组直到条件式不满足。使用while语句要注意避免出现死循环。
(2)分支语句
if …else分支语句结构
if 条件式1,
指令组 1;
elseif 条件式2
指令组 2;
………
else
指令组 k;
End
如果条件式1满足,则执行指令组1.且结束该语句;否则检查条件式2,如果条件式2满足,且结束该语句;……,若所有条件式都不满足,则执行指令组k并结束该语句。
switch分支语句结构
switch 分支变量,
case值1,
指令组1 ;
case值2,
指令组2 ;
………
otherwise
指令组k;
end
若分支变量取值1,则执行指令组1,且结束该语句;若分支变量取值2,则执行指令组2,且结束该语句;……;若分支变量不取所列的值,则执行指令组k并结束该语句。
(3)中断语句
pause 中断语句
暂停执行,直到击键盘。pause(n)暂停n秒后再继续。
pause 中断语句
break中断执行,用在循环语句内表示跳出循环。
return中断执行该程序,回到主调函数或指令窗口
error 提示错误并显示字符串说明
2 编程计算
(1) 计算$\sum_{n=1}^{100}\frac{1}{n^{2}}$
代码:
>> s=0; >> for i=1:1:100 s=s+1./(i*i); end >> s s = 1.6350
(2)已知矩阵$a_{m*n}$的元素$a_{ij}=i+j$,使求当m=3,n=4时,$a_{ij}$的全部元素。
clear A=zeros(3,4); for i=1:3 for j=1:4 A(i,j)=i+j; end end >> A A = 2 3 4 5 3 4 5 6 4 5 6 7
(3)利用while循环语句来计算1!+2!+3!+...+50!
>> ans=0;s=1;i=1; >> while(i<=50) s=s*i; ans=ans+s; i=i+1; end >> ans ans = 3.1035e+64
(4)试用条件分支语句编程计算函数
$f(x)=\left\{\begin{matrix}
x & x<1\\
2x-1& 1\leq x\leq 10\\
3x-11& 10\leq x\leq 30\\
sinx+cosx &x>30
\end{matrix}\right.$
%m文件 function y=fenduan(x) if x<1 y=x; elseif x>=1&&x<=10 y=2*x-1; elseif x>=10&&x<=30 y=3*x-11; else y=sin(x)+log(x); end %调用 g=fenduan(1) g = 1
(5)试用if语句描述符号函数
$g(x)=\left\{\begin{matrix}
1 &x>0 \\
0&x=0 \\
-1 &x<0
\end{matrix}\right.$
%m文件 function y=fenduan(x) if x>0 y=1; elseif x==0 y=0; elseif x<0 y=-1; end %调用 g=fenduan(-12) g = -1
(6)编写一个转换成绩等级的函数文件,其中成绩等级转换标准为考试成绩分数在[90,100]分显示优秀,在[80,89]显示良好,[60,79]显示及格,在[0,59]显示不及格。
%m文件 function y=score(x) switch fix(x/10) case {10,9} fprintf(‘优秀\n‘) case 8 fprintf(‘良好\n‘) case {6,7} fprintf(‘及格\n‘) otherwise fprintf(‘不及格\n‘) end %调用 score(90) 优秀
(7)公元前五世纪我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”。鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一,百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
for i=0:100 for j=0:100-i if(i*15+9*j+(100-i-j)==300) [i,j,100-i-j] end end end
(8)设是一长度为n的数组
编程计算
$s=\sqrt{\frac{1}{n-1}\begin{bmatrix}
\sum_{i=1}^{n}{x_{i}}^{2}-n\overline{x}
\end{bmatrix}^{2}}$
,$n>1,\overline{x}=\frac{1}{n}\sum_{i=1}^{n}x_{i}$
计算出当x=[3,4,7,8,12]时的$\overline{x}$及s的值。
%m文件 function [s1,s]=fc1(x) s1=0;s2=0;s3=0; %s1是平均数,s2是平方累加,s3是根号内方程的值,s是最终结果;1?£? n=length(x); for i=1:n s1=s1+x(i); s2=s2+x(i)*x(i); end s1=s1/n; s3=(s2-n*s1)*(s2-n*s1)/(n-1); s=sqrt(s3); %调用 x=[3 4 7 8 12]; [a,b]=fc1(x) a = 6.8000 b = 124
(9)求满足$\sum_{n=0}^{m}ln(1+n)>100$的最小的m值
>> s=0; >> i=0; >> while(s<100) s=s+log(1+i); i=i+1; end >> i-1 ans = 37