Matlab系列之脚本与函数M文件与函数句柄
从Matlab篇章的开始到现在,已经讲了一些操作的基础知识,其实和很多语言都有一定的相似之处,接下来几篇打算分享一下关于Matlab编程的一些基础。
首先再回顾一下开篇时说到的M文件,分为脚本M文件和函数M文件这两种,其中函数一般包含输入和输出变量,函数运行时使用传递给它的变量然后返回最终的计算结果给输出变量,在这运行的过程中,函数内所产生的变量都只临时存在于函数自己的一个工作区中,当函数运行完成后就会消失;而脚本文件则不包含输入和输出变量,直接运行用于实现特定的功能,通常由M代码与其注释组成。
函数M文件正式的第一行以function开始,开始建立一个函数,最终以end结束其运行,
例如:
function [y1,...,yN] = my_function(x1,...,xM)
这部分就相当于定义了一个叫做my_function的函数,有M个输入变量,N个输出变量,函数名必须以字母开头,之后可以由字母、数字或者下划线组成,但是不能超过规定长度(63个字符),不然会被系统忽略掉多余的部分,可以用isvarname函数进行函数名有效性检查,不过我想一般也没什么人会需要搞那么长的一个名字吧。
函数当然也可以是没有输入或者输出变量,如果输出变量没有,可以不写中括号,也可以使用空的中括号。
如:function myfun(x1)
或者function [] = myfun(x1)
不知道看到这,有没有想过调用的时候也可以少给甚至不给输入或输出变量呢?这个就大家自己实际了,不过可以很肯定的告诉你,如果多于定义的变量数是肯定不能的,会返回error~
接下来对脚本M文件和函数M文件进行一个简单的演示:
先直接点击新建>>脚本
然后在弹出的Untitled文件下进行程序编写,并保存,然后命名为“petal.m”,再运行程序,关于程序的具体代码分析就不多说了,这边主要是演示一下脚本M文件的效果。
%petal.mtheta=-pi:0.01:pi;rho(1,:)=2*sin(5*theta).^2;rho(2,:)=cos(10*theta).^3;rho(3,:)=sin(theta).^2;rho(4,:)=5*cos(3.5*theta).^3;for k=1:4polar(theta,rho(k,:))pauseend
运行后,按下任意键,figure中的图片会进行切换,就是代码那个for里面pause的作用,然后切换四次后再按就会返回命令窗口行的界面。
看下四种图,分别代表的就是rho四行数据所得的极坐标图形。
接下来演示下函数的创建与使用,创建可以直接新建>>函数,也可以新建>>脚本,然后在出现的界面编写代码时按照函数的格式进行设计即可。
随便哪种形式所得的函数文件,都要注意文件名要和函数名一致,不然调用不起,看下演示的程序:
function y=average(x)y=sum(x)/length(x);end
直接看名字,估计你也猜出来了,就是求取一串数字的平均值,将函数M文件正确保存好之后,在命令行窗口来进行调用函数看看效果,调用方法就是先产生一个固定的数组,然后对该数组求平均
Num=1:199;average(Num)
本篇关于M文件的两种形式到此就结束了,在使用的时候,一定要注意路径的问题,还有就是函数名和文件名要保持一致,脚本文件名就比较随意,但是为了方便记忆或者分类,最好还是按照功能或者特定的规律进行命名,之后工程弄大了,也可以很快的定位到特定的文件。
你以为结束了吗?并没有~
在上一篇讲运算符和标点符号时,说到的“@”对应的函数句柄,不知道你们是否遇到过或者使用过,接下来将简单对它做个介绍,希望你可以Get!
句柄也就是经常看到报错时出现的(handle),虽然不知道你们遇到过没,但是我经常遇到……,它是MATLAB的标准数据类型之一,利用函数句柄可以实现对函数的间接调用,可以通过函数句柄传递给其他函数实现对函数的操作,也可以将函数句柄保存在变量中,创建的方式就是使用艾特符号,具体操作如下:
myhandle = @functionname
其中functionname就是要包含的函数名,myhandle就是为该函数创建的句柄,关于调用,理解也很简单,操作:
myhandle(arg1,arg2,...,argN)%myhandle为函数句柄,N个输入变量
除了这样的基本操作外,还有一种是以匿名函数的方式进行创建,具体操作:
myhandle = @(arglist)expr
其中expr是一个函数体,arglist是输入变量列表,可以用逗号分隔开,举个简单的例子: myhandle = @(x)x.^2,就相当于创建了一个计算输入变量x平方的匿名函数,演示结果如下:
若输入的变量为空,则arglist对应的位置就是空的,如myhandle = @()datestr(now),相当于将当前的时间转化为字符串然后进行显示,操作如下:
还有一种操作,就是将多个函数句柄弄在一起进行操作,不知道有没有想起单元数组,也就是那个强大的cell,看例子:
TrigFun={@sin,@cos,@tan},使用花括号直接组合在了一起,然后其句柄的调用举例:plot(TrigFun{3}(-pi:0.01:pi)),相当于使用了@tan,然后对结果进行绘图。
结果:
今天的分享到此结束,下一篇打算搞一个理解起来可能会有点晕的东西,但是理解了应该就觉得So Easy,敬请期待吧!
欢迎关注专栏的对应的公众号~
更多精彩等你发现~
Matlab系列之脚本与函数M文件与函数句柄相关推荐
- C语言文件指针的基本函数介绍包含了fpoen、fclose、fgetc、fputc、fscanf、fprintf、fgets、fputs、fread、fwrite函数以及文件定位函数.
一.打开关闭文件 只打开文件 再关闭文件 #include <stdio.h> #include<stdlib.h> main() {FILE *fp;fp = fopen ...
- 【C 语言】文件操作 ( remove 函数删除文件 | rename 函数重命名文件 | 代码示例 )
文章目录 一.remove 函数删除文件 二.rename 函数重命名文件 一.remove 函数删除文件 remove 函数原型 : 删除指定的文件 ; #include <stdio.h&g ...
- 用matlab读csv数据_Matlab读取csv文件csvread函数的使用
3.7 (3) 今天来说下如何使用Matlab读取excel的csv文件,这个有什么用呢?想必理科生大概率都会用到示波器,去抓取一些电信号或者光信号,我们从示波器导出来的就是csv文件或者图片文件,而 ...
- 常用 API 函数(3): 文件处理函数
为什么80%的码农都做不了架构师?>>> CloseHandle 关闭一个内核对象.其中包括文件.文件映射.进程.线程.安全和同步对象等 CompareFileTime 对比两 ...
- c++ swap函数头文件_C++函数模板(泛型编程)
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码. 模板是创建泛型类或函数的蓝图或公式.库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念. 每个容器都有一个单 ...
- Yocto系列讲解[实战篇]44 - bb文件中函数实操演示(2)
By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! ...
- MATLAB系列(3)——读取txt文件
不啰嗦,直接上代码上图: fid4=fopen('XXX\data.txt','r');%open the document data4=textscan(fid4,'%s '); fclose(fi ...
- linux文件拷贝函数,linux:文件操作函数(open,close,read,write)
1. open()函数 功能描述:用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数. 所需头文件:#include ,#include ,#include (我们用的时候 ...
- strstr函数头文件_strstr函数
函数名: strstr 功 能: 在串中查找指定字符串的第一次出现 用 法: char *strstr(char *str1, char *str2); 程序例: #include #include ...
最新文章
- 【刘文彬】区块链3.0:拥抱EOS
- TIOBE 6月排行:C# 以微弱的优势超过了 Visual Basic .NET 的排名,再次进入 TOP 5
- CCNA笔记-各种路由器的接口
- es用python增加字段_使用Python在ElasticSearch中添加@timestamp字段
- 【codevs1078】最小生成树
- .a 和.o 合并成一个.a_污水处理A/A/O工艺调试运行体会
- piap.excel 微软 时间戳转换mssql sql server文件时间戳转换unix 导入mysql
- 51单片机初学3-从零开始制作一款电子时钟
- 零代码获取国家统计局省市县乡村5级行政区代码
- 那个 php5 集成包,品络php5环境集成安装包_品络php5环境集成安装包官方版下载 - 服务器区 - 绿软家园...
- 影视剪辑,12天自学视频剪辑入门规划
- 学习笔记(16):程序员的数学:微积分-常用导数(一):最常用到的技巧
- 知识服务才是为用户创造价值的体现
- docker编配和服务发现
- 你的支付授权失败。请核对你的信息并重试,或尝试其他支付方式。 解决方案
- 少年包青天里的一个分尸案 来龙去脉
- 简单易懂!推荐给自学python的小项目实战!
- python3抠图并更换背景
- 从前端技术到体验科技
- OAI搭建编译eNB报错