第七节:函数

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

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. Z-function

    用更容易理解的方法处理出 s[l----r]=s[1----r-l+1] 常数比KMP略大,时间复杂度\(O(n)\),方法和manacher很像 #include<bits/stdc++.h& ...

  2. 数据库的交互模式 常用的dos命令 (第一天)

    浏览器和服务器和数据库的交互模式 windows nt(windows系统)的分类:服务操作系统有(server03 server08(R2) 12 16) 个人操作系统有(xp win7 win8 ...

  3. #define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif、defined解释

    #define.#undef.#ifdef.#ifndef.#if.#elif.#else.#endif.defined. #define            定义一个预处理宏#undef     ...

  4. ASP.NET Identity实现分布式Session,Docker+Nginx+Redis+ASP.NET CORE Identity

    零.背景介绍 在学习ASP.NET CORE开发的过程中,身份认证是必须考虑的一项必要的组件.ASP.NET CORE Identity是由微软官方开发的一整套身份认证组件,兼具完整性和自由度.Doc ...

  5. Charles中windows版本解决response乱码问题

    实际上三种,目前写了两种,加了之后有的不显示乱码,但是有的还是显示,第三种搜索结果是安装证书,但是本人安装后证书后未受到信任,所以暂时不知是否能够成功 1,在charles.ini中,手动增加一个vm ...

  6. Javascript里EQ、NE、GT、LT、GE、LE含义

    EQ 就是 EQUAL等于 NE就是 NOT EQUAL不等于 GT 就是 GREATER THAN大于  LT 就是 LESS THAN小于 GE 就是 GREATER THAN OR EQUAL ...

  7. 用matplotlib统计数据并画图

    用jupyter来统计数据,画出柱状图 import numpy as np import pandas as pd import matplotlib.pyplot as plt import ma ...

  8. Flink与Spark Streaming在与kafka结合的区别!

    本文主要是想聊聊flink与kafka结合.当然,单纯的介绍flink与kafka的结合呢,比较单调,也没有可对比性,所以的准备顺便帮大家简单回顾一下Spark Streaming与kafka的结合. ...

  9. HashMap源码阅读笔记

    HashMap源码阅读笔记 本文在此博客的内容上进行了部分修改,旨在加深笔者对HashMap的理解,暂不讨论红黑树相关逻辑 概述   HashMap作为经常使用到的类,大多时候都是只知道大概原理,比如 ...

  10. POJ 1325 && 1274:Machine Schedule 匈牙利算法模板题

    Machine Schedule Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12976   Accepted: 5529 ...