matlab中如何定义局部变量,转 MATLAB自定义函数及局部变量
在开始学习MATLAB的时候并没有发现这个软件有着这么强大的功能,随着课题的不断深入,也在逼迫着自己不断的去应用新的公式并开发新的算法,这就牵涉
到了如何在MATLAB中自定义函数的问题,随之而来自然就是所有编程语言所面临的问题,函数调用、局部变量等等。下面就我自己整理的一些心得与大家交
流。希望对你也有所帮助。
1、编写自定义函数时尽量分以下四部分:
(1)
函数定义行:function[out1,out2,..]=filename(in1,in2,..),输入和输出参数个数分别由nargin和nargout两个MATLAB保留的变量来给出。
(2) 第一行帮助行,以%开头,作为lookfor指令搜索的行
(3)
函数体说明及有关注解:以(%)开头,用以说明函数的作用及有关内容。如果不希望显示某段信息,可在它的前面加空行
(4)
函数体:函数体内使用的除返回和输入变量这些在function语句中直接引用的变量以外的所有变量都是局部变量,即在该函数返回之后,这些变量会自动在
MATLAB的工作空间中清除掉。如果希望这些中间变量成为在整个程序中都起作用的变量,则可以将它们设置为全局变量。
例如下面就是一个标准的自字义函数。
function A=myhilb(n, m)
% MYHILB 是一个示范性的 M-function.
% A=MYHILB(N, M)
会生成一个N×M的Hilbert矩阵A.
% A=MYHILB(N)会生成一个N×N的Hilbert矩阵.
% MYHILB(N,M)
仅仅显示一个Hilbert矩阵,而不会返回任何矩阵。
%这些内容在用help时不会显示
if nargout>1, error('Too
many output arguments.'); end
if nargin==1, m=n;
elseif nargin==0 |
nargin>2
error('Wrong
number of iutput arguments.');
end
A1=zeros(n,m);
for i=1: n
for j=1:m
A1(i,j)=1/(i+j-1);
end
end
if nargout==1, A=A1;
elseif nargout==0, disp(A1);
end
把该函数保存在MATLAB的某个搜索路径中(比如work目录中),在命令窗口输入:
>> help
myhilb
MYHILB 是一个示范性的 M-function.
A=MYHILB(N, M)
会生成一个N×M的Hilbert矩阵A.
A=MYHILB(N)会生成一个N×N的Hilbert矩阵.
MYHILB(N,M)
仅仅显示一个Hilbert矩阵,而不会返回任何矩阵。
>>
lookfor myhilb
MYHILB 是一个示范性的 M-function.
2、MATLAB中全局变量与局部变量有什么区别?
答:如果一个函数内的变量没有特别声明,那么这个变量只在函数内部使用,即为局部变量。如果两个或多个函数共用一个变量(或者说在子程序中也要用到主程序中的变量,注意不是参数),那么可以用global来将它声明为全局变量。
全局变量的使用可以减少参数传递,合理利用全局变量可以提高程序执行的效率。
如果需要用到其他函数的变量。就要利用在主程序与子程序中分别都声明全局变量的方式实现变量的传递。否则函数体内使用的都为局部变量。比如下例:
文件名:exam1.m
global a
x=1:100;
a=2;
c=prods(x)
文件名:prods.m
function result=prods(x)
global a
result=a*sum(x);
>>
exam1
c =
10100
3、怎样编写递归函数?
答:在建立数学模型时,经常会遇到利用递归表达的式子,这种数学表达式简单明了,在
MATLAB中实现该模型,对应的需要建立递归函数。写一个好的递归函数,关键是找到递归的边界条件,和在中间某步骤中会发生的各种情况,然后再对应到程
序中即可。试看Hanoi塔例子:要将塔座A上的n个圆盘全部转移到塔座C上,如n=1,直接把这一片移到目标柱子即可;若n>1,可以先把塔座A上的个圆盘想法转移到塔座B上,然后把塔座A上的最后一个大圆盘转移到塔座C上,最后再把塔座B上的个圆盘转移到塔座C上。把上面思想对应到递归程序中,就得到如下代码:
function
result=hanoi(disknum,beginpillar,midpillar,endpillar,sch)
if disknum==1%添加一行移动方式,递归的边界
result=[sch;1,beginpillar,endpillar];
else%下面一句相当于把上面n-1片移到中间柱子
result=hanoi(disknum-1,beginpillar,endpillar,midpillar,sch);
%然后把最后一片移到目标柱子上
result=[result;disknum,beginpillar,endpillar];
%把中间当作第一根,
原来第一根当作中间柱子, 继续移动
result=hanoi(disknum-1,midpillar,beginpillar,endpillar,result);
end
matlab中如何定义局部变量,转 MATLAB自定义函数及局部变量相关推荐
- matlab中如何定义整形变量,MATLAB中定义变量的问题
题目: MATLAB中定义变量的问题 比如说可以用syms定义 >> syms x11 x12 x13 x14 >> syms x21 x22 x23 x24 >> ...
- matlab中设置拟合初值,如何确定自定义函数拟合时的参数初值?
本帖最后由 bearbb 于 2013-5-10 15:09 编辑 在做多元非线性模拟时出现了问题 a=[ 537.15 2.846653612 39.44841337 ...
- matlab中yx是什么意思啊,matlab中怎样定义未知数,如x,syms是什么意思?
www.mh456.com防采集. 一.syms用法: 其实matlab会自己根据图形的定义域绘制图形,当然你可以用axis[x1,x2,y1,y2]加以限定,x1-x2表示 x的定义域,y1-y2表 ...
- matlab 报错 保留变量,matlab中明明定义了函数变量总是报错
matlab定义符号函数 functiony=ff(t)t=input('t=');ift>=0y=sym('1');elsey=sym('0');end matlab中如何定义函数 matla ...
- matlab 不允许函数定义,MATLAB中此上下文中不允许出现函数定义,急求~
点击查看MATLAB中此上下文中不允许出现函数定义,急求~具体信息 答:从你讲的问题,虽然没讲太清楚,但我推测,你可能写了个脚本程序文件,其中定义了子函数,在运行时就弹出了这个提示.一般情况下,在函数 ...
- matlab中定义向量函数,matlab中如何定义向量
Matlab中生成向量的三种方法 在Matlab中,如何才能生成向量,生成向量的方法又有多少种?相信这是每一个初学者都想知道的问题.这里小编将向大家详细介绍Matlab中生成向量的三种方法. 方法一: ...
- matlab中的timer模块,[转载]Matlab中Timer的使用
Matlab中Timer的使用 鉴于Matlab中缺乏多线程机制,使用Timer无疑是一个很重要的工具,Matlab中Timer是一个Java对象. (1)Timer 的定义 t=timer(); 设 ...
- matlab中p1x怎么表示什么,MATLAB复习题(含答案).doc
MATLAB语言复习大纲 1. 掌握以下命令行编辑常用的控制键的用法:Del,Esc,Backspace,Ctrl+C. 答:Del是删除光标右边的字符 Esc是删除当前行的全部内容 Backspac ...
- MATLAB教学_03结构化程式与自定义函数
本文学习 MATLAB教学_03结构化程式与自定义函数.视频地址为:https://www.bilibili.com/video/av68228488?p=3 本文主要学习三个内容: 脚本编写 结构化 ...
- 在MATLAB中使用数学符号,在matlab中怎么输入特殊符号 function在MATLAB中怎么用
导航:网站首页 > 在matlab中怎么输入特殊符号 function在MATLAB中怎么用 在matlab中怎么输入特殊符号 function在MATLAB中怎么用 相关问题: 匿名网友: 一 ...
最新文章
- 微软私有云系列----证书配置
- 2017网易校招真题 合唱团
- SUM and REPLACE
- 构造函数、原型、继承原来这么简单?来吧,深入浅出
- 安卓第一次搭建C/S架构
- 你会先写PRD,还是先画原型?
- javascript正则表达式---正向预查
- Android Studio couldn‘t generate bytecode view, no .class file found
- gns3虚拟机服务器集群,GNS3中如何实现与Vmware Workstation连接
- cypress自动化--运行测试用例报告输出
- Cortex-M3 (NXP LPC1788)之EEPROM存储器
- 大华NVR WEB界面把玩
- winows+Eclipse下Mahout配置
- python模拟浏览器访问企查查_python爬虫另辟蹊径绕过企查查的登录验证,我太冇财了...
- 产品经理--无人岛的项目开发与推广
- 小福利,用selenium模块爬取qq音乐歌单!
- 不小心删了(或覆盖了)window系统变量的PATH的怎么办?
- 减轻运维人员工作压力?一招轻松实现无人值守
- 自己制作的粉碎机批处理程序
- 我在京东的第417天:陷入了情绪的泥沼
热门文章
- 【Maths】等比数列
- CPU-MIC异构并行架构下基于大规模频繁子图挖掘的药物发现算法
- ICEPAK与FLOTHERM数值特性对比
- gensim实现LDA(Latent Dirichlet Allocation)算法提取主题词(topic)
- 『转』Bitdefender Internet Security 2013 – 免费1年
- 使用CF Cli发布应用Spring Music
- Faces la Carte: 根据目击者描述自动生成目标人脸图像
- Google Earth Engine批量下载Sentinel、Landsat、MODIS遥感影像代码
- jQuery模拟在线选座
- 中国地理位置四至点及计算方法