第七节:函数

  编程的过程很像是画图纸,编程语言在平时使用的时候不会像是单个的命令去执行,大多数情况下我们把许多重复要执行或者一些常用的编辑好的功能“封装”到一起,方便来使用。函数-----就是这种过程。函数也就是最基本的“画图纸”的方式。

7.1  函数的关键字

  关键字就好像是这些筋骨的节点,起到起承转合的作用。共20个左右(可能后续会有增加),这些关键字在变量声明等地方不能重名使用,他们是唯一的。

在命令窗口输入iskeyword命令就会显示出这些关键字。关于并行技巧后面会说到。

7.2 MATLAB的控制流

  像if,for,while等这类语句叫做控制流。MATALAB包括6中算法,其中switch-case这种类型比较特殊点儿,跟if非常类似。

  六种:顺序结构、if-else-end分支结构、switch-case结构、try-catch结构、for循环结构和while循环结构。跟其他语言一样来这里列出只不过稍微比较一下和其他语言的书写结构哪里有些不同。

7.2.1 顺序结构

  这部分略,就是语句时按照从上而下、从左至右的运行方式。

7.2.2 if-else-end分支结构

  if后面打不打括号一样。写一个完整版本的例子

x = input('enter''x'':');
if(x>0)
y = 1;
elseif (x ==0)
y = 0;
else
y = -1;
end
disp(y)

  注意每一个语句结束要用分号,这是MATALB的规定。

7.2.3 switch-case 语句

  switch后面跟要进行判断的标量或者字符串,举一个完整例子如下。

num = 8;
switch num
case 1
data = 'Monday';
case 2
data = 'Tuesday';
case 3
data = 'Wednesday';
case 4
data = 'Thursday';
case 5
data = 'Friday';
case 6
data = 'Saturday';
case 7
data = 'Sunday';
otherwise
data = 'Please input right num!';
end
disp(data)

注意: 这里的switch语句后面要加上 otherwise这一条,如果不加判断体内判断都为0,会返回一个报错。

7.2.4 try-catch语句

  try-catch语句属于找错语句,如果命令在try内错误,会执行catch内的语句。一个简单的例子:

clear;
num = 100;
try
if ischar(num)
disp('num is a string');
end
catch
disp('num is num');
end
lasterror;
% lasterr;

  注意:后面一般跟一个错误提示信息

7.2.5 for循环结构

  简单的例子:

for i = 1:4
for j = 1:4
if i > (5-j)
else
Mat(i,j) = i + j -1;
end
end
end

7.2.6 while 循环

  简单的例子:

a(1) = 1;
a(2) = 1;
i = 2;
while a(i) < 10000
a(i+1) = a(i) + a(i-1);
i = i +1;
end

  注意:while循环别忘了计数器。避免造成死循环。

7.3 控制程序流的其他常用命令和语句的嵌套。

  嵌套就不用说了。

7.3.1 input和keyboard指令

输入指令,不多说了。

keyboard与input不同之处在于:keyboard指令运行输入多个MATLAB指令,而input指令只允许用户输入赋值给变量的“值”,即数组、字符串或者元胞、数组等。

yesinput指令。只能输入的指令它提供的输入值是一个默认量,并可以对输入范围进场检测,具体语法格式如下:

Value = yesinput('Prompt', Default, Possib);

(1) 这个指令设计用户和MATLAB之间的交互,因此无法再notebook程序中执行。

(2) Prompt为文字提示,Default为默认的设置值,Possib为可选值。

(3) 当yesinput指令运行后,如果用户不输入任何值,则变量Value将接受默认值。

备注:用的最多的就是input

7.3.2 pause 指令

  暂停指令,注意括号内的是秒

7.3.3 continue ,break不说了

7.3.4 error和warning指令

总结如下:

7.4  脚本和函数的区分

  与脚步文件不同的是,MATLAB中,函数文件Function文件类似于一个黑匣子,从外部无法看清其内部运算流程。其实我们每天写的叫脚本,而函数只不过是一种封装好的脚步运行过程看不见。

7.5 一般函数的结构

7.5.1 写完的函数要保存,这是句废话。另外,你保存的是函数的话会有一个fx的图表,如果保存的是脚本的话,有个MATALB的图像标志,文件名都.m文件,所以在很多教材中这部分叫M文件的编写

7.5.2 函数参数的指令集

  在很多语言中,比如python分为5类,注入可变长度参数,表达式参数,默认参数等等。

  这里有5类

  分别为:

  

一般在函数体内

varargin{1} 表示输入的第二个参数是

如果function a = abc (varargin)

  if nargin  == 1 表示输入的参数为一个的话,等等一次类推

7.5.3 匿名函数、子函数、私有函数和私有目录

所谓匿名函数就是不用写函数又function有啥的,直接比较简单的函数实现。

子函数、私有这个不讲了

7.5.4 eval feval 和inline(内联函数)

7.6 跨空间变量传递和赋值

evalin('工作区', 'expression');该指令的工能为跨空间计算字符串表达式的值

assignin跨空间函数的调用

Matlab高级教程_第一篇:Matlab基础知识提炼_03的更多相关文章

  1. Matlab高级教程_第一篇:Matlab基础知识提炼_01

    第一篇:Matlab基础知识提炼: 这一篇主要用系统和提炼性的语言对Matlab基础知识进行总结,主要适用于有语言基础的学习者.尽量不讲废话. 第一部分:Matlab是什么? 1 Matlab是Mat ...

  2. Matlab高级教程_第一篇:Matlab基础知识提炼_02

    第三节:变量 正如其他编程软件一样. 都是通过变量来传递和交换数据的,这是基础.按照<MATLAB基础知识提炼>这篇文章先介绍变量比较合适.编程语言不外乎包括两部分:数据和结构.应该先把数 ...

  3. Matlab高级教程_第一篇:Matlab基础知识提炼_04

    第八节:几大MATLAB的数据类型 8.1 数值型 8.2 字符和字符串 创建用' ' 8.3 函数句柄 8.4 结构体 创建用. 语法:struct('field', var1,'field2',' ...

  4. Matlab高级教程_第一篇:Matlab基础知识提炼_06

    第十一节:图形操作 第十二节:文件的IO操作个格式化输出

  5. Matlab高级教程_第一篇:Matlab基础知识提炼_05

    第九节:矩阵的操作 第十节:数组与矩阵 linspace函数

  6. Matlab高级教程_第二篇:MATLAB和C#一些常用的矩阵运算方法的转换

    1.相关方法已经生产引用,直接调用的结果如下: 2. 相关调用代码如下: using System; using System.Collections.Generic; using System.Li ...

  7. Matlab高级教程_第二篇:MATLAB和C#对应数据类型的讲解(多讲一点儿C#的矩阵运算)

    1. MATLAB对应C#的数据类型主要在引入的父类库MWArray当中.有如下对应规则 .NET TYPE MWArrayTYPE MATLAB Type System.Double MWNumer ...

  8. Matlab高级教程_第二篇:Matlab相见恨晚的模块_02_并行运算-2

    1 MATLAB并行计算-从个人桌面到远程集群和云(陈伟/魏奋)视频摘录笔记 https://cn.mathworks.com/videos/parallel-computing-with-matla ...

  9. Matlab高级教程_第二篇:Matlab相见恨晚的模块_02_并行运算-1

    1 更高级的算法牵扯到更多重的循环和复杂的计算,尤其是现在人工智能的算法尤其如此.有些历史知识的人能够了解到,人工智能的很多基本算法其实近百年之前就有了,但是当时的计算机技术达不到去实现这些算法的要求 ...

随机推荐

  1. Vulkan SDK 之 Device

     Enumerate Physical Devices Vulkan instance创建完成之后,vulkan loader是知道你有几个物理设备(显卡),但是程序不知道,需要通过 相关接口获取设备 ...

  2. java web实现在线编辑word,并将word导出(三)

    前面说到前台呈现的页面是img标签,因此需要在后台生成相应的图片,在img的src内容中改为相应的路径地址:而在生成文档的过程中需要替换相应的img标签.后一部分上篇文章已经讲过,本片主要讲前一部分. ...

  3. 数据库连接池C3P0的使用

    一.直接使用代码链接(一般企业开发不会用到.大多数用方法二) 1.导入jar 2.新建JDBCUtil import java.io.FileInputStream; import java.io.I ...

  4. JS高级学习笔记(10) 之 js 时怎么解析HTML标签的

    DOM 节点类型 浏览器渲染过程 浏览器是怎么把HTML标签语言和JavaScript联系在一起的,这就是我们常说的DOM. 浏览器中的DOM解析器把HTML翻译成对象(object),然后JavaS ...

  5. Linux 压缩解压操作

    Linux 压缩解压操作 Linux解压文件到指定目录 tar在Linux上是常用的打包.压缩.加压缩工具,他的参数很多,折里仅仅列举常用的压缩与解压缩参数 参数:-c :create 建立压缩档案的 ...

  6. SpringBoot学习(四)——配置文件占位符

    RandomValuePropertySource:配置文件中可以使用随机数 ${Random.value}  ${random.int}, ${random.long}, ${random.int( ...

  7. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring基于XML装配Bean

    Bean 的装配可以理解为依赖关系注入,Bean 的装配方式也就是 Bean 的依赖注入方式.Spring 容器支持多种形式的 Bean 的装配方式,如基于 XML 的 Bean 装配.基于 Anno ...

  8. 一个例子搞清楚Java程序执行顺序

    当我们new一个GirlFriend时,我们都做了什么? 一个例子搞懂Java程序运行顺序 public class Girl { Person person = new Person("G ...

  9. 1.6判断类型toString.call()

    之前我都是使用typeof,后来发现它的判断有局限,例如(){}obeject.p.toString.call()解决了 obj.toString()的结果和Object.prototype.toSt ...

  10. POJ 1006:Biorhythms 中国剩余定理

    Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 121194   Accepted: 38157 Des ...