• MATLAB之函数文件


    目录

    一、函数文件的基本结构

    二、函数的调用

    1.函数调用的格式

    2.函数的递归调用


    将特定的算法写成函数的形式,可以提高程序的可重复性和程序设计的效率。并且函数文件定义了输出参数和输入参数的对应关系,方便外部调用。事实上,MATLAB提供的标准函数都是由函数文件定义的。

    一、函数文件的基本结构

     函数文件由function语句引导,其基本结构如下:

    function 输出参数表=函数名(输入参数表)

    函数体语句

    其中,以function开头的一行为引导行,表示定义一个函数;

    函数名的命名规则与变量名的命名规则一样;

    在函数定义时,输入输出参数没有分配储存空间,称为形式参数,简称形参。当有多个形参时,形参之间用逗号分隔,组成形参表。当输出形参多于一个时,应用方括号括起来,构成一个输出矩阵 ;

    将函数文件以函数名.m存盘,然后在MATLAB命令行窗口调用该函数。

    例,编写函数文件,求半径为 r 的圆的面积和周长。并求r=10时的情况。

    程序如下:

    1. function [s,c]=fcircle(r)
    2. s=pi*r*r;
    3. c=2*pi*r;
    4. end

     r=10时的情况如下:

    1. >> [s,c]=fcircle(10)
    2. s =
    3. 314.1593
    4. c =
    5. 62.8319

    二、函数的调用

    1.函数调用的格式

     函数文件建好之后,就可以调用该函数,调用格式如下:

    [输出实参表]=函数名(输入实参表)

    在调用函数时,函数输入输出参数称为实际参数,简称实参。

    要注意的是,函数调用时各实参出现的顺序、个数,应与函数定义时形参的顺序、个数一致,否则会出错。函数调用时,先将实参传给相应的形参,从而实现参数的传递,然后再执行函数的功能。 

    例,利用函数文件,实现直角坐标(x,y)与极坐标(\rho,\theta)之间的转换。转换公式为

    \rho=\sqrt{x^2+y^2}

    \theta=\arctan(\frac{y}{x})

     程序如下:

    1. function [rho,theta]=tran(x,y)
    2. rho=sqrt(x*x+y*y);
    3. theta=atan(y/x);
    4. end

    x=45,y=45时的情况如下:

    1. >> [rho,the]=tran(45,45)
    2. rho =
    3. 63.6396
    4. the =
    5. 0.7854

    实际上,MATLAB提供了直角坐标与极坐标之间的转换函数,发表如下。

    (1)[th,r]=cart2pol(x,y):将直角坐标转换为极坐标。

    (2)[x,y]=pol2cart(th,r):将极坐标转换为直角坐标。

    1. >> [the,rho]=cart2pol(45,45)
    2. the =
    3. 0.7854
    4. rho =
    5. 63.6396
    6. >> [x,y]=pol2cart(pi/4,45*sqrt(2))
    7. x =
    8. 45.0000
    9. y =
    10. 45

    2.函数的递归调用

    在MATLAB中,函数可以嵌套调用,即一个函数可以调用其他函数,甚至可以调用它自身。一个函数调用它自身称为函数的递归调用

    例1,利用函数的递归调用,求n!

    n!本身就是以递归的形式定义的:

    n!=\begin{cases} 1,& n\leq 1 \\ n(n-1)!,& n>1 \\ \end{cases}

    显然,要求n!需要求(n-1)!,这时可以采用递归调用。

    程序如下:

    1. function f=factor(n)
    2. if n<=1
    3. f=1;
    4. else
    5. f=n*factor(n-1); %递归调用求(n-1)!
    6. end

    n=5的情况如下:

    1. >> f=factor(5)
    2. f =
    3. 120

    例2,在一个脚本文件main2.m中调用函数文件factor.m,求

    s=1!+2!+\cdots+n!

    程序如下:

    1. s=0;
    2. n=input('Please input n=');
    3. for i=1:n
    4. s=s+factor(i);
    5. end
    6. disp(['1到',num2str(n),'的阶乘和为:',num2str(s)])

    n=5的情况如下:

    1. >> main2
    2. Please input n=5
    3. 15的阶乘和为:153

  • 相关阅读:
    208道最常见的Java面试题整理(面试必备)
    新手QML贪吃蛇 Qt Quick
    接口自动化测试用例如何设计
    oepncv c++ 连通组件扫描
    用正则表达式处理文本--1
    【问题解决】新版webots纹理等资源文件加载/下载时间过长
    DStream转换介绍_大数据培训
    Hystrix:断路器
    Django 创建项目及其他常用命令
    【SpringBoot实战】实现WEB的常用功能
  • 原文地址:https://blog.csdn.net/qq_53395687/article/details/126572452