m 文件 dll matlab 中调用_Matlab系列之脚本与函数M文件与函数句柄

f54e445ba9e7ea155dff481e583f9801.gif

从Matlab篇章的开始到现在,已经讲了一些操作的基础知识,其实和很多语言都有一定的相似之处,接下来几篇打算分享一下关于Matlab编程的一些基础。

~Show Time~

4908a12ddf758e6a7bfac028e59b9f12.gif

首先再回顾一下开篇时说到的M文件,分为脚本M文件和函数M文件这两种,其中函数一般包含输入和输出变量,函数运行时使用传递给它的变量然后返回最终的计算结果给输出变量,在这运行的过程中,函数内所产生的变量都只临时存在于函数自己的一个工作区中,当函数运行完成后就会消失;而脚本文件则不包含输入和输出变量,直接运行用于实现特定的功能,通常由M代码与其注释组成。

函数M文件正式的第一行以function开始,开始建立一个函数,最终以end结束其运行,

例如:function [y1,...,yN] = my_function(x1,...,xM)

这部分就相当于定义了一个叫做my_function的函数,有M个输入变量,N个输出变量,函数名必须以字母开头,之后可以由字母、数字或者下划线组成,但是不能超过规定长度(63个字符),不然会被系统忽略掉多余的部分,可以用isvarname函数进行函数名有效性检查,不过我想一般也没什么人会需要搞那么长的一个名字吧。

d92f0f594561c9b5643052faad998163.gif

函数当然也可以是没有输入或者输出变量,如果输出变量没有,可以不写中括号,也可以使用空的中括号。

如:function myfun(x1)

或者function [] = myfun(x1)

不知道看到这,有没有想过调用的时候也可以少给甚至不给输入或输出变量呢?这个就大家自己实际了,不过可以很肯定的告诉你,如果多于定义的变量数是肯定不能的,会返回errorb4c159cb3fd42be606b1fd0d85a374a9.pngb4c159cb3fd42be606b1fd0d85a374a9.pngb4c159cb3fd42be606b1fd0d85a374a9.pngb4c159cb3fd42be606b1fd0d85a374a9.pngb4c159cb3fd42be606b1fd0d85a374a9.png

d92f0f594561c9b5643052faad998163.gif

接下来对脚本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:4    polar(theta,rho(k,:))    pauseend

d92f0f594561c9b5643052faad998163.gif

点击运行后,在弹出的Figure界面按任意键,Figure中的图片会进行切换,就是代码那个for里面pause的作用,然后切换四次后再按就会返回命令窗口行的界面。

看下四种图,分别代表的就是rho四行数据所得的极坐标图形。

1a11f9997d5316df7e25f4a16628f6fb.png 0f4e5d974c1c5e83210e144b66477055.png cceee253025c8d2262bc13a198b63d7b.png 336acad6c65b737c70d528c27933e1fe.png

d92f0f594561c9b5643052faad998163.gif

接下来演示下函数的创建与使用,创建可以直接新建>>函数,也可以新建>>脚本,然后在出现的界面编写代码时按照函数的格式进行设计即可。

随便哪种形式所得的函数文件,都要注意文件名要和函数名一致,不然调用不起,看下演示的程序:

function y=average(x)

y=sum(x)/length(x);

end

直接看名字,估计你也猜出来了,就是求取一串数字的平均值,将函数M文件正确保存好之后,在命令行窗口来进行调用函数看看效果,调用方法就是先产生一个固定的数组,然后对该数组求平均

Num=1:199;average(Num)

a8e0acb75e68647ea82f608f7da7393f.png

d92f0f594561c9b5643052faad998163.gif

本篇关于M文件的两种形式到此就结束了,在使用的时候,一定要注意路径的问题,还有就是函数名和文件名要保持一致,脚本文件名就比较随意,但是为了方便记忆或者分类,最好还是按照功能或者特定的规律进行命名,之后工程弄大了,也可以很快的定位到特定的文件。

你以为结束了吗?并没有a62a132e3eb1db3856cd31a93e71ac59.pnga62a132e3eb1db3856cd31a93e71ac59.pnga62a132e3eb1db3856cd31a93e71ac59.pnga62a132e3eb1db3856cd31a93e71ac59.pnga62a132e3eb1db3856cd31a93e71ac59.png

49c5994d9852ca8d734cde1b8ae7a12b.gif

在上一篇讲运算符和标点符号时,说到的“@”对应的函数句柄,不知道你们是否遇到过或者使用过,接下来将简单对它做个介绍,希望你可以Get!5fd55c69f1f2c9b2db3ddb3403b0aa3b.png5fd55c69f1f2c9b2db3ddb3403b0aa3b.png5fd55c69f1f2c9b2db3ddb3403b0aa3b.png

句柄也就是经常看到报错时出现的(handle),虽然不知道你们遇到过没,但是我经常遇到aeed90d7112a2c77246d9e55b4d97d43.pngaeed90d7112a2c77246d9e55b4d97d43.pngaeed90d7112a2c77246d9e55b4d97d43.pngaeed90d7112a2c77246d9e55b4d97d43.pngaeed90d7112a2c77246d9e55b4d97d43.png,它是MATLAB的标准数据类型之一,利用函数句柄可以实现对函数的间接调用,可以通过函数句柄传递给其他函数实现对函数的操作,也可以将函数句柄保存在变量中,创建的方式就是使用艾特符号,具体操作如下:

myhandle = @functionname

其中functionname就是要包含的函数名,myhandle就是为该函数创建的句柄,关于调用,理解也很简单,操作:

myhandle(arg1,arg2,...,argN)%myhandle为函数句柄,N个输入变量

d92f0f594561c9b5643052faad998163.gif

除了这样的基本操作外,还有一种是以匿名函数的方式进行创建,具体操作:

myhandle = @(arglist)expr

其中expr是一个函数体,arglist是输入变量列表,可以用逗号分隔开,举个简单的例子: 

myhandle = @(x)x.^2

就相当于创建了一个计算输入变量x平方的匿名函数,演示结果如下:

d5b193986b69963e1200c0f156825582.png

d92f0f594561c9b5643052faad998163.gif

若输入的变量为空,则arglist对应的位置就是空的,如:

myhandle = @()datestr(now)

相当于将当前的时间转化为字符串然后进行显示,操作如下:

800c017fcf54b965ddcc191a617e786e.png

d92f0f594561c9b5643052faad998163.gif

还有一种操作,就是将多个函数句柄弄在一起进行操作,不知道有没有想起单元数组,也就是那个强大的cell,看例子:

TrigFun={@sin,@cos,@tan}

使用花括号直接组合成单元数组的形式,然后其句柄的调用举例:

plot(TrigFun{3}(-pi:0.01:pi))

相当于使用了@tan,然后对结果进行绘图。

结果:

ae5de86ae19022c10c2cbe8248894d7f.png

84a828a4e4cd71e342bd891a9ffee418.png

今天的分享到此结束,下一篇打算搞一个理解起来可能会有点晕的东西,但是理解了应该就觉得So Easy,敬请期待吧!

c4cdc64c8263e931d3ae10c70c099c6d.gif

阅读本文共使用 28a786f272edd9703ccca0f8a608e21b.gif 409521f0ea111af739ae564717f0768c.gif 7a996783a4b2322918eb5179c8125175.gif bdce64fcd1e039801197d4fe7affe635.gif

d5d03b45bc3a7e749d6ea32b744ccba1.gif 🔥往期精彩等你发现🔥 d5d03b45bc3a7e749d6ea32b744ccba1.gif

b8f5116a7b26dd59976e4d5eb0071d8e.gif

电子知识

一些电路设计与DIY作品

电子设计技巧与经验

FPGA

System Generator系列教程

算法介绍

通信协议分析

资料分享

Matlab系列记录

建设中~

8c40bcce0cfc7df085778c203abd3071.gif

2c54592b88802e26e9ce34bdfdf6863e.png

⇈长按识别二维码关注电子狂人⇈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值