Matlab程序设计基础第四讲-MATLAB程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Matlab程序设计基础第四讲-MATLAB程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 程序设计 基础 第四 课件
- 资源描述:
-
1、MATLAB程序设计基础v程序设计vM文件 两种形式:命令形式(Script)函数形式(Function)命令式M文件在运行过程中可以调用MATLAB工作域内所有的数据,而且,所产生的所有变量均为全局变量,直到用户执行clear命令清除;函数式文件中所有变量除特殊声明,均为局部变量。v命令式M文件 提示:标点符号要运用恰当;注意程序的书写风格,保持程序的可读性;要以m为文件扩展名,在低版本的matlab中,文件名要符合8.3格式。v函数式M文件 function 返回变量列表=函数名(输入变量列表)注释说明语句段 函数体 提示:第一行为function语句;function后定义函数名和输入输
2、出参数,函数被调用时按此格式执行;文件名必须与函数名一一对应;函数执行完后,只保留返回结果,不保留中间过程;v例:function f=fibfun(n)%FIBFUN for calculating fibonacci numbers.%Incidengtally,the name fibonacci comes from%Filius Bonassi,or son of Bonassus%fibfun.mif n2 f=fibfun(n-1)+fibfun(n-2);else f=1;end?help fibfun FIBFUN for calculating fibonacci numb
3、ers.Incidengtally,the name fibonacci comes from Filius Bonassi,or son of Bonassus fibfun.m?lookfor fibFIBFUN for calculating fibonacci numbers.注:为了利用MATLAB的关键字搜索功能,应该在M文件的第一行注释中,尽可能多的包含函数的特征信息。控制语句v循环语句 有两种方式:for循环和while循环 for循环 for 循环变量=s1:s3:s2 循环体语句组 end说明:for 语句一定要有end结束标志;循环语句中要用“;”防止中间结果的输出;书写
4、时采用锯齿结构以增加可读性;v例:求 mysum=0;for i=1:1:100 mysum=mysum+i;end;mysum 求取s1的值ii在s1和s2之间?循环体语句组i+s3-i是否结束循环1001iiv for 循环的一般形式 for v=vect statements end vect为任意给定的向量,则循环变量从向量的第一个数值一直循环到最后一个数值。例1(见前例):mysum=0;v=1:100;for i=v;mysum=mysum+i;end mysum 例2:x=;for i=Hello,x=i x;end,xv while循环 while 逻辑变量 循环体语句组 en
5、d例(见前例):mysum=0;i=1;while(i10000),break;end mysum=mysum+m;end m,mysum if 条件式 条件块语句组1 else 条件块语句组2 end条件语句组语句组1语句组2是否例:多项式加例:多项式加 p1=1 5 4;p2=1 6 11 6;n1=length(p1);n2=length(p2);if n1firstlevel num1=num1+1;elseif list(i)secondlevel num2=num2+1;else num3=num3+1;endend?global firstlevel secondlevel?fi
6、rstlevel=85;?secondlevel=75;?a,b,c=test3(90,89,60,79,89,60,99,98,100)a=1b=2c=0子函数与局部函数v函数文件中题头定义的函数为主函数,在函数体内定义的其他函数即为子函数。子函数只能为主函数或同一主函数下其他的子函数所调用。function c=test(a,b)%main functionc=test1(a,b)*test2(a,b);function c=test1(a,b)%sub functionc=a+b;function c=test2(a,b)%sub functionc=a-b;v放置于目录private下
7、的函数称为局部函数,这些函数只有private目录的父目录中的函数才可以调用,其他目录的函数不能调用。局部函数与一般函数文件的编辑相同。vMATLAB在调用函数时,首先检测该函数是否为此文件的子函数;如果不是,再检测是否为可用的局部函数;如果仍不是,则检测MATLAB搜索路径中其他的M文件。程序设计的辅助函数v执行函数 y1,y2,yn=feval(function,x1,x2,xn)以函数名为输入变量的函数。evalin(workspacename,expression)对指定工作空间workspacename中的变量进行操作,计算表达式expression的值。v容错函数 error(错误
8、信息)触发函数error时,中断程序的运行,显示错误信息。warning用法类似,但不会中断程序。function c=testerror(a,b)flag=0;if ischar(a)&ischar(b)flag=1;else error(Input must be a string!);endif flag c=strcat(a,b);endv时间控制函数 日期表达形式:dd-mmm-yyyy mm/dd/yy mm/dd 12-Oct-2019 10/12/03 10/12 时间表达形式:HH:MM:SS HH:MM:SS PM v cputime的调用:t=cputime;程序段;t=
9、cputime-t;显示该程序段运行所占用的CPU时间。v tic、toc的调用方法 tic;程序段;toc;显示运行该程序段所需的时间。vetime(time2,time1)计算两时刻的时间差。程序设计优化v以矩阵为操作主体 以向量运算代替循环运算,提倡矩阵操作?tic;x=1;for i=1:1000,y(i)=sin(x);x=x+0.1*pi;end,tocelapsed_time=0.0500?tic;x=1:0.1*pi:1000*pi;y=sin(x);tocelapsed_time=0.0100v在多重循环的情况下,建议外循环执行循环次数少的,内循环执行循环次数多的。例:生成5
10、10000的Hilbert矩阵,其中 hi,j=1/(i+j-1)Test2.mticfor j=1:10000 for i=1:5 H(i,j)=1/(i+j-1);endendtocTest1.mticfor i=1:5 for j=1:10000 H(i,j)=1/(i+j-1);endendtoc?test1elapsed_time=0.2970?test2elapsed_time=0.6100v大型矩阵预先定维 大型矩阵动态的定维会降低程序运行效率,所以,应预先估计变量的最大维数,用zeros或ones等进行预先定维。ticH=zeros(5,10000);for i=1:5 for
11、 j=1:10000 H(i,j)=1/(i+j-1);endendtocticH=zeros(5,10000);for i=1:5 H(i,:)=1./i:i+9999;endtoc?test1elapsed_time=0.2970?test2elapsed_time=0.0310 对于二重循环,还可以使用meshgrid函数来构造。v优先考虑内在函数v采用有效算法v采用Mex技术?tic,i,j=meshgrid(1:5,1:10000);H=1./(i+j-1);tocelapsed_time=0.0150面向对象的程序设计v类和对象的构造 类的概念是结构体的拓展,类中可以包含变量形成员
12、,也可以包含与这些变量相关联的函数或运算。对象是类的一个实例。首先定义一个适当的名字;以这个名字建立一个子目录,目录名为该名称前加符号;编写一个引导函数,函数名与类同名。v例:定义一个多项式类如果不给出输入变量,则建立一个空多项式;如果输入变量a为多项式类,则直接把它传送给输出变量p;如果a为向量,则将此向量变换成行向量,再构造一个多项式对象;function p=polynom(a)if nargin=0 p.c=;p=class(p,polynom);elseif isa(a,polynom),p=a;else p.c=a(:).;p=class(p,polynom);endv类的显示 在
展开阅读全文