第七节:函数

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

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. 6 ~ express ~ 搭建用户注册前端页面

    一,前端页面 /views/login.html <!DOCTYPE html> <html lang="en"> <head> <met ...

  2. cf 444C.

    听说这是线段树的裸题??(看来我也就能搞个求和什么的了2333) #include<bits/stdc++.h> #define INF 0x7fffffff #define LL lon ...

  3. BZOJ:1927: [Sdoi2010]星际竞速

    题解:最小费用流+二分图模型: 左边表示出这个点,右边表示入这个点: #include<iostream> #include<cstdio> #include<cstri ...

  4. java多线程并发(一)-- 相关基础知识

    java多线程的知识是java程序员都应该掌握的技能,目前我接触的项目上用的不多,花点时间熟悉熟悉. 一.基础知识 1.什么是进程? 进程是具有一定独立功能的正在运行过程中的程序,是操作系统进行资源分 ...

  5. JS页面校验

    结构: 1.导入正则表达式校验包:https://blog.csdn.net/weixin_44718300/article/details/88726653 2.页面校验.HTML <!DOC ...

  6. SQL left join、rignt join、inner join区别

    说真的一直对数据库没有研究以至于连这些基础都不会了,事实证明,业精于勤荒于嬉. 废话不多说,直接开始 有A.B两张表: 1.inner join inner join 和 join 是没有区别的(如有 ...

  7. c#textBox控件限制只允许输入数字及小数点,是否为空

    c#textBox控件限制只允许输入数字及小数点 转载 //判断按键是不是要输入的类型. if (((int)e.KeyChar < 48 || (int)e.KeyChar > 57) ...

  8. CF1217B Zmei Gorynich

    You are fighting with Zmei Gorynich — a ferocious monster from Slavic myths, a huge dragon-like rept ...

  9. VS.NET中的常用控件和类型的命名规范

    表1  命名规范 VS名称 简写 VS名称 简写 数据类型 Array arr Boolean bln Byte byt Char Chr Date Time dtm Decimal dtm Doub ...

  10. 萤火虫系统(firefly) RK3399 python3 安装 tensorflow

    前言: 继续之前在RK3399上安装深度学习的一些环境,主要碰到的坑给大家分享一下,为了让大家少走弯路.这次是安装tensorflow,话不多说,直接开撸. --------------------- ...