Matlab(科伊恩)学习2——结构化程式与自定义函数

二、结构化程式与自定义函数

  1. 脚本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过程中,脚本执行到断点处会停止,将鼠标移动至某一变量可查看该变量

  2. 逻辑函数

    #不等于:~= 结尾要配合 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指令——跳出该层循环

  3. Tips for wirting

    1)在开始脚本之前,先通过🔺 clear all 清除先前变量,🔺close all 关闭所有图像

    2)在指令末尾使用🔺分号;来避免不必要的输出

    3)利用🔺 … 实现代码的换行,防止数据过长

    >> A=[1 2 3;4 5 6;...
    	7 8 9];
    

    4)Ctrl+C退出执行,防止程序宕机

  4. 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输出参数的个数
    vararginVariable 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反转
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值