二、结构化程式与自定义函数
-
脚本Script
1.1#点击“主页”左上角“新建脚本”进行脚本的创建,在弹出的窗口内部进行编辑。点击“运行”可运行脚本。保存脚本时应使用英文名称,中文名称无法兼容。
1.2查询function:点击编辑器上方的 fx 进行function的搜索(其中包含了matlab的其他操作指令)
1.3注释:添加 % 符号注释一行,或点击编辑器上方的注释(可注释多行)
1.4区块(节)划分: 在区块上方添加 %% ,划分节后,可“运行节”
%% for i=1:10 x =linspace(0,10,101); plot(x,sin(x+i)); print(gcf,'-deps',strcat('plot',num2str(i),'.ps')); end %% for i=1:10 x =linspace(0,10,101); plot(x,sin(x+i)); print(gcf,'-deps',strcat('plot',num2str(i),'.ps')); end
1.5断点:在每一行最前端的横线点击,可在该行添加断点,在debug过程中,脚本执行到断点处会停止,将鼠标移动至某一变量可查看该变量
-
逻辑函数
#不等于:~= 结尾要配合 end 构成一个完整的逻辑区块
2.1 if-elseif-else语句
#常规格式 % if condition1 % statement1 % elseif condition2 % statement2 % else % statement3 % end #example a=3; if rem(a,2)==0 #rem-除后的余数 (remainder) disp('a is even') #disp-显示变量的值或者内容 (display) else disp('a si odd') end
2.2 switch-case语句
#常规格式 % switch expression % case value1 % statement1 % case value2 % statement2 % ... % otherwise % statement % end #example input_num=1; switch input_num case -1 disp('negative 1'); case 0 disp('zero'); case 1 disp('positive 1'); otherwise disp('other value'); end
2.3 while语句
#常规格式 % while expression % statement % end #example n=1; while prod(1:n)<1e100 #prod-连乘(阶乘) n=n+1 end
2.4 for语句
#常规格式 % for variable=start:increment:end #初值:步长:终值 % commands % end #example for n=1:2:10 #步长increment省略时,默认为1 a(n)=2^n; end disp(a)
#通过**预分配(pre-allocating)**确定位置大小,节省matlab的运算时间
#通过 tic—toc 可输出程序块的运行时间 #NOT pre-allocating tic for ii=1:2000 for jj=1:2000 A(ii,jj)=ii+jj; end end toc #历时 2.495354 秒 #Pre-allocating B=zeros(2000,2000); %宣告矩阵大小 for ii=1:size(B,1) %size(B,1)返回B的行数2000 for jj=1:size(B:2) %size(B,2)返回B的列数2000 B(ii,jj)=ii+jj; end end toc #历时 0.036613 秒
2.5 break指令——跳出该层循环
-
Tips for wirting
1)在开始脚本之前,先通过🔺 clear all 清除先前变量,🔺close all 关闭所有图像
2)在指令末尾使用🔺分号;来避免不必要的输出
3)利用🔺 … 实现代码的换行,防止数据过长
>> A=[1 2 3;4 5 6;... 7 8 9];
4)Ctrl+C退出执行,防止程序宕机
-
Functions 自定义函数
#利用edit(which())调出方法
>> edit(which('mean.m')) #窗口会弹出mean方法的script界面 #内容如下,包含command和code function y = mean(x,dim,flag,flag2) #定义方法,output为y,input为4个参数 %MEAN Average or mean value. % S = MEAN(X) is the mean value of the elements in X if X is a vector. % For matrices, S is a row vector containing the mean value of each % column. % For N-D arrays, S is the mean value of the elements along the first % array dimension whose size does not equal 1. ... if nargin == 1 || (nargin == 2 && isDimSet) flag = 'default'; omitnan = false; else % nargin >= 3 || (nargin == 2 && ~isDimSet) if nargin == 2 flag = dim; ...
4.1 定义Functions
#定义一个计算自由落体速度的function function x=freebody(x0,v0,t) #x为返回值,freebody为方法的名字 % 计算自由落体速度 % x0:初始位置 m % v0:初速度 m/s % t:下落时间 s % x:下落深度 m x=x0+v0.*t+1/2*9.8*t.*t; #此处.*是考虑到输入可能是向量,十分重要❗
4.2 Function 的 Defalut 变量
名称 含义 inputname 输入方法的变量名 mfilename 当前正在运行的方法的文件名 nargin 输入参数的个数 nargout 输出参数的个数 varargin Variable length input arguments list.
变输入参数列表varargout 变输出参数列表 #inputname(argnum) :返回第argnum个输入参数的名称字符串。如果输入参数没有名称(例如它是一个表达式,而不是一个变量),这时会返回空字符串('') #example >> function c = myfun(a,b) fprintf('First calling variable is "%s"\n.', inputname(1)) >> x = 5; y = 3; myfun(x,y) >> 输出:First calling variable is "x". #nargin返回输入参数的个数, >> function [volume]=pillar(Do,Di,height) if nargin==2 #如果输入参数为2,则将height默认(default)设置为1 height=1; end volume=abs(Do.^2-Di.^2).height*pi/4; #varargin:Variable length input arguments list. 指变输入参数列表;varargin 就是一个输入变#量,它可以是任意个不定个数的输入参数。 #要求:第一,指明它用小写的字母表示;第二,在函数的参数列表中,varargin放在最后面。 #当函数执行时,varargin就是一个1*N的cell数组。其中 N 是函数在显式声明的输入后收到的输入项数。但如 果该函数在显式声明的输入后未收到任何输入,则 varargin 是空元胞数组。
4.3函数句柄(匿名函数)
f=@(x) exp(-2*x); #此时f指向的就是x那个函数式(pointer指针) x=0:0.1:2; plot(x,f(x));
#常用Function
>> a=input('请输入:') #可读取数值并赋值给a >> B=isempty(A) #判断A是否为空,如果为空,结果为1,否则为0 >> str=num2str(A) #将A中数值转换为字符串形式,可用fprint和disp进行输出 >> newstr=reverse(str) #将字符串str反转