MATLABC基础与编程入门 恒润科技 HIRAIN TECHNOLOGIES MATLAB编程入门 HiRain Technologies
MATLAB®基础与编程入门 MATLAB 编程入门
恒润科技 HiRain Technologies HIRAIN TECHNOLOGIES 本章概述 ■流程控制和数组操作 ■性能提高 函数结构语法 子函数 ■私有函数 ■嵌套的函数 ■变量和工作区 ■可视化调试和剖析 www.hirain.com
2 本章概述 ◼ 流程控制和数组操作 ◼ 性能提高 ◼ 函数结构语法 ◼ 子函数 ◼ 私有函数 ◼ 嵌套的函数 ◼ 变量和工作区 ◼ 可视化调试和剖析
恒润科技 HiRain Technologies HIRAIN TECHNOLOGIES MATLAB路径 ■ MATLAB路径: MATLAB搜索路径(包括 toolbox目录) 路径缓存: Toolbox下文件和位置的清单 在程序启动时建立,以提高运行速度 路径设置: Path browser(命令 PATHTOOL) path, addpath, empath www.hirain.com
3 MATLAB路径 MATLAB路径: MATLAB 搜索路径(包括\toolbox目录) 路径缓存: \toolbox下文件和位置的清单 在程序启动时建立,以提高运行速度 路径设置: Path browser(命令PATHTOOL) path, addpath,rmpath
恒润科技 HiRain Technologies HIRAIN TECHNOLOGIES 流程控制结构 ■逻辑控制: )if /elseif /else switch/ case/otherwise ■循环体: for while www.hirain.com
4 流程控制结构 逻辑控制: if / elseif / else switch / case / otherwise 循环体: for while
恒润科技 HiRain Technologies HIRAIN TECHNOLOGIES 逻辑控制程序结构 ■条件语句的使用 ■ MATLAB中的跳转一一旦条件为真,或条件匹配,则中断 当前的顺序执行方式 ■涉及字符串操作时使用 switch-case语句比 elseif更有效 if工 switch algori thm A(工,J)=2 case 'ode23 elseif abs(I-j)== 1 str = 2nd/3rd order I A(工,J)=-1; 1 case [ ''ode23s' A(,J)=0; str= 'stiff system'i end otherwise str ' other algori thm'i end >>if examp switch examp www.hirain.com
5 逻辑控制程序结构 条件语句的使用 MATLAB中的跳转—一旦条件为真,或条件匹配,则中断 当前的顺序执行方式 涉及字符串操作时使用switch-case语句比elseif更有效 if I == J A(I,J) = 2; elseif abs(I-J) == 1 A(I,J) = -1; else A(I,J) = 0; end switch algorithm case 'ode23' str = '2nd/3rd order'; case {'ode15s', 'ode23s'} str = 'stiff system'; otherwise str = 'other algorithm'; end >> if_examp >> switch_examp
恒润科技 HiRain Technologies HIRAIN TECHNOLOGIES 循环结构 ■类似其它编程语言 ■for-按指定循环次数重复循环体(基于索引) ■ While-重复循环体,直到逻辑条件返回值为 false 可以进行循环嵌套 N=10; 工=1;N=10; 1:N while I for丁=1:N 丁〓 A(工,J)=1/(工+J-1); while < n end A(工,J)=1/(工+J-1); end J+1; nd 工 工+1; end for examp while examp www.hirain.com
6 循环结构 类似其它编程语言 for-按指定循环次数重复循环体(基于索引) While-重复循环体,直到逻辑条件返回值为false 可以进行循环嵌套 I = 1; N = 10; while I > for_examp >> while_examp N = 10; for I = 1:N for J = 1:N A(I,J) = 1/(I+J-1); end end
恒润科技 HiRain Technologies HIRAIN TECHNOLOGIES 提高性能—向量化(省略了fo循环) ■使用循环(多数语言): M=rand(5,10000);=rand(5,10000) W=rand(5,10000);H=rand(5,10000) [rows, cols] size(m) foyT=1:。ws for j 1: col Density(工,J)=M(工,J)/(L(工,J)*W(工,J)*(工,J)); end end ■使用数组操作( MATLAB): Density M./(工.*W.★H); > array vs1o。ps www.hirain.com
7 提高性能—向量化(省略了for循环) 使用循环 (多数语言): M = rand(5,10000); L = rand(5,10000); W = rand(5,10000); H = rand(5,10000); [rows, cols] = size(M); for I = 1:rows for J = 1:cols Density(I,J) = M(I,J)/(L(I,J)*W(I,J)*H(I,J)); end end Density = M./(L.*W.*H); >> array_vs_loops 使用数组操作 (MATLAB):
恒润科技 HiRain Technologies HIRAIN TECHNOLOGIES 提高性能:内存预分配 ■两种做法产生相同的向量: £orI=1:10000 prea11o=zex。s(10000,1); not pre a11o(工) rand(1);|oxI=1:10000 end prea11o(工)=rand(1) end ■开始时预置变量,开辟连续的存储空间(10000单元) ■防止 MATLAB在内存中寻找10000个大小不同的内存块 pre allocate www.hirain.com 8
8 提高性能:内存预分配 两种做法产生相同的向量: for I = 1:10000 not_pre_allo(I) = rand(1); end pre_allo = zeros(10000,1); for I = 1:10000 pre_allo(I) = rand(1); end 开始时预置变量,开辟连续的存储空间(10000单元) 防止 MATLAB 在内存中寻找10000个大小不同的内存块 >> pre_allocate
恒润科技 HiRain Technologies HIRAIN TECHNOLOGIES 函数 ■ MATLAB核心(内建)函数 sin, abs, exp ■ MATLAB提供的m-文件函数 mean, std ■用户创建的m文件函数 无论何时您想到什么好主意您都可以 脚本和函数m-文件的差异 结构语法 函数工作区,输入和输出 www.hirain.com 9
9 函数 MATLAB核心(内建)函数 sin, abs, exp, … MATLAB提供的m-文件函数 mean, std, … 用户创建的m-文件函数 无论何时您想到什么好主意您都可以…… 脚本和函数m-文件的差异 结构语法 函数工作区,输入和输出
恒润科技 HiRain Technologies HIRAIN TECHNOLOGIES 函数M文件的结构 关键字: function 函数名(与文件名相同 name, n) 输出参数 输入参数 function Y mymean(x) 8MYMEAN Average or mean value 8 For vectors, MYMEAN (x) returns the mean value 在线帮助 8 For matrices, MYMEAN (x) is a row vector containing the mean value of each column [m, n= size(x)i if m MATLAB 代码 m ni nd y sum(x)/m; >> output value= Yunan( input va1ue)—命令行语法 www.hirain.com
10 函数M-文件的结构 function y = mymean(x) %MYMEAN Average or mean value. % For vectors, MYMEAN(x) returns the mean value. % For matrices, MYMEAN(x) is a row vector % containing the mean value of each column. [m,n] = size(x); if m == 1 m = n; end y = sum(x)/m; 关键字:function 函数名(与文件名相同 name .m) 输出参数 输入参数 在线帮助 MATLAB 代码 >> output_value = mymean(input_value) 命令行语法