matlab程序设计基础资料

上传人:w****i 文档编号:98754499 上传时间:2019-09-13 格式:PPT 页数:50 大小:1.11MB
返回 下载 相关 举报
matlab程序设计基础资料_第1页
第1页 / 共50页
matlab程序设计基础资料_第2页
第2页 / 共50页
matlab程序设计基础资料_第3页
第3页 / 共50页
matlab程序设计基础资料_第4页
第4页 / 共50页
matlab程序设计基础资料_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《matlab程序设计基础资料》由会员分享,可在线阅读,更多相关《matlab程序设计基础资料(50页珍藏版)》请在金锄头文库上搜索。

1、和其他语言一样,MATLAB的程序结构也不外三种:顺序结构、分支结构和循环结构。,5、程序结构和流程控制,5.1 顺序结构,顺序结构即指顺序往下执行的程序语句结构,其实也就是一组复合的表达式。在MATLAB中,表达式之间可以用分号、逗号或换行来分隔。如前例的函数文件summ.m和命令文件use.m均为顺序结构。,5.2 分支结构,1、MATLAB的分支结构,2、分支结构的语句形式及实例,分支结构就是由逻辑判断决定程序执行流转方向的一种结构。现有if.else.end和switch.case.end两种形式。,第一类分支结构采用的语句形式有3种:,if 表达式 语句组1 end,if 表达式 语

2、句组1 else 语句组2 end,if 表达式 A 语句组1 elseif 表达式B 语句组2 else 语句组3 end,注意:除直接应用上述三种形式外,第3种结构可扩展,if 还可以嵌套。,举例: 例5.1 输入数n,判断其奇偶性。 程序式书写法:* n=input(n=); if rem(n,2)=0 A=even else A=odd end,更完善的程序式书写法: n=input(n=); if isempty(n)=1 A=empty elseif rem(n,2)=0 A=even else A=odd end,命令行书写法: n=input(n=); if isempty(n

3、)=1 A=empty, elseif rem(n,2)=0; A=even,else, A=odd, end,例5.2 写程序,判断某一年是否闰年*。,C语言程序: main() int year,leap; scanf(“%d”,MATLAB程序: year=input(year=); if rem(year,4)=0 if rem(year,100)=0 if rem(year,400)=0 leap=1; else leap=0; end else leap=1; end else leap=0; end if leap display(is a leap year) else dis

4、play(is not a leap year) end,switch 表达式 case 值1 语句组1 case 值2 语句组2 otherwise 语句组n,第二类分支结构采用的语句形式如下:,注意:switch后的表达式的结果值,通常为标量或字符串。,举例: 例5.3 用switch语句改写例3.1。,程序式书写法: n=input(n=); switch mod(n,2)* case 1 A=奇 case 0 A=偶 otherwise A=空 end,例5.4 给出一百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,8089分为B,7079分为C,6069分为D,60分

5、以下为E。,C语言程序: main() int score,g; scanf(“%d”, ,MATLAB程序: score=input(score=); g=round(score/10-0.5); if g=10 display(A) else switch g case 9,display(A) case 8,display(B) case 7,display(C) case 6,display(D) otherwise display(E) end end,1、MATLAB的循环结构 循环结构就是执行重复运算的一段程序。MATLAB的循环语句有for.end和while.end两种形式。

6、 2、循环结构的语句形式及实例,5.3 循环结构,For循环结构的语句形式:,for 变量=初值:增量:终值 语句组 end,注意:for 还可以嵌套。,举例: 例5.5 列出构成Hilbert矩阵的程序。 clear, close all format rat, n=input(n=), for i=1:n for j=1:n h(i,j)=1/(i+j-1); end end h,例5.6 求100200间的全部素数*。,C语言程序: # include main() int m,k,i,n=0; for(m=101;m=k+1) printf(“%d”,m); n=n+1; ,MATLA

7、B程序: n=0;x=1:21; for m=101:2:200 k=round(sqrt(m+1)-0.5); for i=2:k if rem(m,i)=0 break, end j=i+1; if j=k+1 n=n+1; x(n)=m; end end end x,While循环结构的语句形式:,while 表达式 语句组 end,注意:while 语句中的表达式通常为关系表达式或逻辑表达式。,举例: 例5.7 求如下级数的和:1+1/2+1/3+1/4+1/100。 s=0;n=1; while n=100 s=s+1/n; n=n+1; end,s,例5.8 用/41-1/3+1/

8、5-1/7+公式求的近似值,直到最后一项的绝对值小于10-6为止。,C语言程序: #include main( ) int s; float n,t,pi; t=1, pi=0; n=1.0; s=1; while(fabs(t)1e-6) pi=pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(“pi=%10.6fn”,pi); ,MATLAB程序: t=1;pi=0; n=1;s=1; while abs(t)1e-6 pi=pi+t; n=n+2; s=-s; t=s/n; end pi=4*pi,匿名函数可以接受多个输入输出参数。创建匿名函数的格式:

9、fhandle=(arglist) expr 其中:“expr”通常是一个简单的MATLAB变量表达式,实现函数的功能;“arglist”是参数列表;“”是MATLAB中创建函数句柄的操作符.,匿名函数实例: myfhd1=(x)(x+x.2) myfhd1(2) ans=6 myfhd2=(x,y)(sin(x)+cos(y) myfhd2(pi/2,pi/6) ans=1.8660,每一个M文件第一行定义的文件就是M文件主函数,一个M文件只能包含一个主函数,通常将M文件名和M文件主函数名设为一致。,在一个函数内部可以定义一个或多个函数,这种定义在其他函数内部的函数被成为嵌套函数。,嵌套函数

10、的书写语法格式如下: function x=A(p1,p2) function y=B(p3) end end,嵌套函数的互相调用需要注意和嵌套的层次密切相关,例:function A(x,y) %外层函数A(例如主函数) B(x,y); D(y); function B(x,y) %A的嵌套函数(B的父函数为A) C(x); D(y); function C(x) %B的嵌套函数(C的父函数为B) D(x); end end,实例1 matlab神经网络工具箱,1.1 网络数据对象的建立,net=newff(xm,xM,h1,hk,f1,fk); xm,xM分别为列向量(行数为变量个数),分

11、别存储每个变量的最小值和最大值。 h1,hk表示网络各层的节点数, 一共有k层. f1,fk表示各层使用的传输函数,默认为tansig,即Sigmoid函数。还可使用函数purelin,即f(x)=x。 其它可看matlab帮助: help newff,1.2 网络数据对象net的属性,net.IW:来自输入层的加权矩阵。BP网络只用net.IW1,表示各个输入变量对第1层各节点的加权矩阵。 net.LW:来自中间层的加权向量。 BP网络用net.IW2,1表示第1隐层个节点向下一层个节点的加权矩阵; net.IW3,2表示第2隐层向下一层的加权矩阵 net.b:各层的偏移。Net.b1表示第

12、1隐层个节点的偏移,net.trainParam.epochs:最大训练步数。不过当误差准则满足时,即使没达到此步数也停止训练。缺省为100。 net.trainParam.goad:网络误差准则,当误差小于此准则时停止训练,缺省为0。 net.trainFcn:训练算法。缺省为 trainlm,即Levenberg-Marquardt算法。还可使用traingdx,即带动量的梯度下降算法;traincgf,即共轭梯度法。 其它可看matlab帮助:help-contents- Neural Network Toobox- Network Object Reference; help(net.

13、trainFcn),1.3 网络的训练,net,tr,Y1,E=train(net,X,Y); net是函数newff建立的数据对象。 X为n*m的矩阵, n为输入变量个数, m为样本数(即把每个样本是一个列向量)。 Y为k*m的矩阵, k为数出变量个数。 tr返回训练的跟踪信息, tr.epochs为训练步数, tr.perf为各步目标函数的值。 Y1和E返回网络最终的输出和误差。 训练结束后可以用plotperf(tr)来绘制目标值随着训练步数变化的曲线。,1.4 网络的泛化(预测),Y=sim(net,X); net是函数newff建立的数据对象。 X为n*m的矩阵, n为输入变量个数,

14、 m为样本数(即把每个样本是一个行向量)。 Y为k*m的矩阵, k为数出变量个数。,2 例子:神经网络函数拟合(预测),试构造合适的神经网络模型拟合如下数据点,并预测x=10的值:,matlab代码,x=0:0.5:9.5; y=0, 0.43, 0.69, 0.74, 0.61, 0.36, 0.08, -0.17, -0.34, -0.4, -0.35, -0.23, -0.08, 0.06, 0.16, 0.21, 0.2, 0.15, 0.07; net = newff(0,9.5,5, 1); net.trainParam.epochs=100; net.trainParam.goad=0.000001; net = train(net,x,y); x1=0:0.1:10; y1=sim(net,x1); figure; plot(x,y,.);hold on; plot(x1,y1,r);,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号