数学建模常用软件选讲1(5)

2019-03-11 08:06

y=1; k=1; while k<=x y=y*k; k=k+1; end

自定义函数定义好后就可以调用,调用格式为:函数名(参数表)。 例2、利用例1编写的函数计算4!,10!,在命令窗口执行该函数,马上得到结果:

>> njc(4) ans = 24

5.6.2 matlab程序控制结构

matlab语言的程序结构与其它高级语言是一致的,分为顺序结构,循环结构,分支结构。

(1)顺序结构 —— 依次顺序执行程序的各条语句

(2)循环结构 —— 被重复执行的一组语句,循环是计算机解决问题的主要手段。

(3)分支结构——根据一定条件来选择执行各条语句。

5.6.2.1 循环语句 1.for — end循环 语法为:

for i = 表达式(表达式为一个向量) 可执行语句 end

例:利用for循环求1+2+3+4+5的值 sum=0; for i=1:5 sum=sum+i; end

2.while — end 循环

while循环将循环体中的语句循环执行不定次数。 语法为: while 表达式 循环体语句 end

表达式一般是由逻辑运算和关系运算以及一般运算组成的,以判断循环的进行和停止;只要表达式的值 非0,继续循环;直到表达式值为0,循环停止。

例:用while循环求1到100间整数的和 sum=0; i=1;

while i<=100 sum=sum+i; i=i+1; end sum

5.6.2.2分支结构 1.if-else-end结构 有三种格式

A)if 表达式 执行语句 end

B)if 表达式 语句1 else 语句2 end

C)if 表达式1 语句1 elseif 表达式2 语句2 elseif 表达式3 语句3 · · · else 语句n end

例如,从键盘中输入一个正数,然后判断是奇数(odd number)还是偶数(even number)。

s=input('please input positive integer:') if mod(s,2)==0

‘This is a even number!’

else

‘This is a odd number!’ end

2.switch分支结构

switch语句可以替代多分支的if语句,且switch语句简洁明了,可读性更好,其格式为:

switch 计算表达式 case 数值1 语句1 case 数值2 语句2 ? otherwise 语句n End

例:用switch结构将百分制的学生成绩转换为五种等级的成绩输出 clear

result=input('请输入学生的成绩:'); switch fix(result/10) case 9 y='优秀'; case 8 y='良好'; case 7 y='中等';

case 6 y='及格'; otherwise y='不及格'; end y

练习:输入10个学生成绩,并找出成绩最好的前三位,并输出其分数。 for i=1:10

grade(i)=input('请输入十个学生的成绩:') end

[value,idx]=sort(grade) fore3=grade(idx(8:10))

5.7 曲线拟合

在大量的应用领域中,人们经常面临用一个解析函数描述数据的问题,对这个问题有两种方法:在插值法里,数据假定是正确的,要求以某种方法估算出新的数据点;在曲线拟合或回归中,人们设法找出某条光滑曲线,它最佳地拟合数据,但不必要经过每个数据点。

Matlab曲线拟合常见的有多项式拟合,其命令格式为:p=polyfit(x,y,N) 该函数对向量x,y所确定的原始数据构造N阶多项式p(x),使p(x)与已知数据点间函数值之差的平方和最小。当N=1时,多项式拟合就是线性拟合。一般而言,N个数据点可以确定一个N-1阶多项式。看一个例子:

x=linspace(0,1,11)

y=[-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.21] n1=1 n2=2

n10=10

p1=polyfit(x,y,n1) p2=polyfit(x,y,n2) p10=polyfit(x,y,n10) xi=linspace(0,1,100) z1=polyval(p1,xi) z2=polyval(p2,xi) z10=polyval(p10,xi)

plot(x,y,'or',xi,z1,'k:',xi,z2,'b-',xi,z10,'g*')

注意:由图可以看得出,二阶拟合比较好。一般来说,高阶多项式给出很差的数值特性,人们不应选择比所需的阶次高的多项式。随着多项式阶次的提高,曲线变得不够光滑,因为较高阶次多项式可多次求导。

也可以用命令curvefit(‘fun’,x0,x,y)作曲线拟合,例如,某数据近似符合规律y(t)?a?be?Kt,已知从100到1000时分别对应于(x0是初值,应适当取)

cdata=0.00001*[454 499 535 565 590 610 626 639 650 659] 求a,b,k使?(a?be?Kt?cdata)2尽可能地小。

i?110tdata=linspace(100,1000,10)

cdata=0.00001*[454 499 535 565 590 610 626 639 650 659] x0=[0.02,0.5,0.01] %x0=[0.001 0.0051 0.01]

x=curvefit('curvefun',x0,tdata,cdata) ydata=x(1)+x(2)*exp(-x(3)*tdata) plot(tdata,ydata,'r',tdata,cdata,'-b')

(完)


数学建模常用软件选讲1(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:对折剪纸

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

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