第九章:MATLAB:程序设计(一)M文件

一.M文件

在实际应用之中,直接在命令行输入简单的命令无法完全满足用户的需求,MATLAB提供了M文件编程,
M文件因其扩展名为m而得名,是一个标准的文本文件,几乎可以在任何编译器之中进行修改,存储和读取,
M文件有两种格式:

  1. 命令文件(脚本文件)Script
    2)函数文件 Function

注意: 1)M文件的文件名或M函数的函数名应该尽量避免与MATLAB内置函数或者是工具箱之中的函数重名,否则程序执行时可能会出现错误, 2)M函数的文件名必须要与函数名一致才行!!!

1.命令文件(.m文件)
在实际应用之中,如果要输入较多的命令,经常重复输入时,就可以利用M文件,只需要在命令行之中输入m文件的文件名,系统会自动的逐条执行M文件之中的命令,命令文件之中的语句可以直接访问MATLAB工作区中的所有变量,且在运行过程之中生成的变量都是全局变量
注意:
M文件可以在任何文本编辑器之中进行编辑,MATLAB也提供了相应的编辑器,可以在MATLAB命令行之中直接输入edit进入编辑器,也可以点击新建脚本,都是可以的

尝试操作:
步骤1)在命令行中输入edit,直接进入m文件编辑器,将其保存为jiafa.m
2)在m文件之中输入程序,
3)在命令行之中输入文件名,可以得到程序执行结果,同时工作区之中也会显示出来相应的变量,

注意:
M文件之中的%用于对程序进行注释,而在实际运行的时候并不执行,相当于C语言之中的*/,
注意,编辑完文件之后,一定要将其保存在当前工作路径下

2.函数文件(f.m文件):
函数文件的第一行一般都是以function开始,这是函数文件的标志,点击新建,找到函数,建立文件即可(确保在当前文件夹之下包含这个函数文件),

注意函数文件名必须要与函数名一致,这很重要!!!

示例:编写一个求分段函数的程序,用来求值

function y=f(x)   
%   此函数用于求分段函数f(x)的值
%   当x<1时,f(x)=3x+2;
%   当-1<=x<=1时,f(x)=x;
%   当x>1时,f(x)=2x+3;
if x<-1
    y=3*x+2;
elseif -1<=x<=1
        y=x;
    else
        y=2*x+3;
end

执行结果:
在这里插入图片描述

例2:编写一个求任意非负整数n的阶乘的函数,并用它来求10的阶乘

function s=jiecheng(n)
%此函数用来求非负整数n的阶乘
%参数n可以为任意的非负整数
if n<0
%若用户将输入参数误写成负值,则报错
    error('输入参数不能为负值!');
    return;
else
    if n==0   %若n为0,则其阶乘为1
        s=1;
    else
        s=1;
        for i=1:n
            s=s*i;
        end
    end
end

在这里插入图片描述
注意:编写函数文件的时候要养成注释的好习惯,

你在编写函数文件的时候所写的注释在调用help命令的时候可以调出来!!!!

这样可以使程序更加清晰,别人也容易看明白,更便于维护
注意:在使用help函数的时候,它只能显示M文件注释语句的第一个连续块,被语句隔离的第一个注释块之后的其他语句则无法显示,
所以在编写M文件的时候,应该养成在第一行注释之中尽可能多的包含函数足够的信息特征
在这里插入图片描述

嵌套调用与递归调用

在编辑函数文件的时候,MATLAB也允许对函数进行嵌套调用或者是递归调用,
函数的嵌套调用
就是在一个函数文件之中可以调用其他任意函数,被调用的函数也可以调用其他函数,这样大大降低了函数的复杂性。

示例1编写一个求1+1/2!+1/3!+…1/n!的程序

function s=sum_jiecheng(n)
%此函数用来求1+1/2!+...+1/n!的值
%参数n为任意非负整数
if n<0  
%若用户将输入参数误写成负值,则报错
    disp('输入参数不能为负值!');
    return;
else
    s=0;
    for i=1:n
        s=s+1/jiecheng(i);    %调用求n的阶乘的函数jiecheng 
    end
end

在这里插入图片描述
函数的递归调用
就是指调用一个函数的过程之中直接或者间接的调用函数本身。
最重要的就是要掌握好什么时候跳出递归,怎样跳出递归

示例:利用函数递归求阶乘

function s=factorial(n)
%此函数利用递归来求阶乘
%参数n为任意非负整数
if n<0  
%若用户将输入参数误写成负值,则报错
    disp('输入参数不能为负值!');
    return;
end
if n==0|n==1
    s=1;
else
    s=n*factorial(n-1);   %对函数本身进行递归调用
end

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值