logo

第 4 章 编程基础

作者
Modified on
Reading time
11 分钟阅读:..评论:..

在前面的章节中,我们已经初步了解了 MATLAB 的基本操作和数据可视化功能。现在,让我们进一步探索 MATLAB 作为一种编程语言的强大功能。本章将介绍 MATLAB 编程的基础知识,包括变量与数据类型、流程控制、函数以及脚本文件的使用。通过学习这些内容,你将能够编写出更加复杂和实用的 MATLAB 程序。

4.1 变量与数据类型

在编程的世界里,变量就像是一个个存储数据的容器。MATLAB 支持多种数据类型,了解它们的特点和用法是编写高效代码的基础。

4.1.1 变量的定义和使用

在 MATLAB 中,定义一个变量非常简单,只需要给它一个合法的名称并赋予某个值即可。变量名需要以字母开头,可以包含字母、数字和下划线,但不能使用 MATLAB 的关键字。下面是一个变量定义的例子:

x = 10; y = 'Hello, MATLAB!';

在这个例子中,我们定义了一个数值变量 x 和一个字符串变量 y。你可以在命令行窗口中输入变量名并按下回车键来查看变量的值:

>> x x = 10 >> y y = 'Hello, MATLAB!'

变量的值可以被重新赋值,例如:

x = 20;

这样,变量 x 的值就被更新为 20 了。

4.1.2 常见数据类型

MATLAB 支持多种数据类型,下面是一些常见的数据类型:

  • 数值型: 包括整数和浮点数。例如1,3.14,-2.5等。
  • 字符串型: 由单引号括起来的字符序列。例如'Hello, world!'
  • 逻辑型: 只有两个可能的值,truefalse
  • 单元数组: 用花括号{}括起来的、可以包含不同类型元素的数据容器。
  • 结构体: 一种把多个不同类型的数据组合成一个整体的数据类型。

下面是这些数据类型的一些示例:

% 数值型 x = 10; y = 3.14; % 字符串型 str = 'I love MATLAB!'; % 逻辑型 a = true; b = false; % 单元数组 cell_arr = {'Hello', 123, [1, 2, 3]}; % 结构体 student.name = 'John'; student.age = 18; student.scores = [85, 92, 88];

4.1.3 数据类型的转换

有时候,我们需要将一种数据类型转换为另一种数据类型。MATLAB 提供了一系列的转换函数,例如:

  • num2str: 将数值转换为字符串。
  • str2num: 将字符串转换为数值。
  • int2str: 将整数转换为字符串。
  • mat2cell: 将矩阵转换为单元数组。
  • cell2mat: 将单元数组转换为矩阵。

下面是一个类型转换的例子:

x = 10; str = num2str(x); disp(['x is ' str]); % 输出 "x is 10"

在这个例子中,我们首先定义了一个数值变量 x,然后使用 num2str 函数将其转换为字符串 str,最后使用 disp 函数将转换后的结果输出。 掌握数据类型的使用和转换,能够帮助我们更加灵活地处理各种类型的数据。

4.2 流程控制

在编程中,我们常常需要根据不同的条件执行不同的操作,或者重复执行某些操作。这就需要用到流程控制语句。MATLAB 提供了多种流程控制语句,包括条件语句和循环语句。

4.2.1 条件语句

条件语句允许我们根据某个条件的真假来决定执行哪些代码。MATLAB 主要有以下几种条件语句:

  • if
  • if-else
  • if-elseif-else
  • switch-case

下面是一个 if-else 语句的例子:

x = 10; if x > 5 disp('x is greater than 5'); else disp('x is less than or equal to 5'); end

在这个例子中,如果 x 的值大于 5,就会输出 "x is greater than 5",否则会输出 "x is less than or equal to 5"。 switch-case 语句可以处理多个条件,例如:

grade = 'B'; switch grade case 'A' disp('Excellent!'); case 'B' disp('Good job!'); case 'C' disp('Well done!'); case 'D' disp('You passed!'); case 'F' disp('Better luck next time!'); otherwise disp('Invalid grade'); end

在这个例子中,根据 grade 的值的不同,会输出不同的结果。

4.2.2 循环语句

循环语句允许我们重复执行某些代码。MATLAB 主要有以下两种循环语句:

  • for循环: 重复执行指定次数。
  • while循环: 当某个条件为真时重复执行。

下面是一个 for 循环的例子,计算从 1 加到 10 的结果:

sum = 0; for i = 1:10 sum = sum + i; end disp(sum); % 输出 55

下面是一个 while 循环的例子,计算从 1 加到 10 的结果:

sum = 0; i = 1; while i <= 10 sum = sum + i; i = i + 1; end disp(sum); % 输出 55

4.2.3 跳出循环

有时候,我们需要在满足某个条件时提前跳出循环。MATLAB 提供了 breakcontinue 两个关键字来实现这个功能:

  • break: 跳出当前循环。
  • continue: 跳过当前循环的剩余部分,直接进入下一次循环。

下面是一个使用 break 的例子,找出第一个大于 5 的数:

for i = 1:10 if i > 5 break; end end disp(i); % 输出 6

下面是一个使用 continue 的例子,计算 1 到 10 之间所有奇数的和:

sum = 0; for i = 1:10 if mod(i, 2) == 0 % 如果 i 是偶数 continue; end sum = sum + i; end disp(sum); % 输出 25

4.3 函数

函数是一段可重复使用的代码,它接受某些输入,执行特定的操作,然后返回结果。使用函数可以让我们的代码更加模块化和易于维护。

4.3.1 函数的定义和调用

在 MATLAB 中,我们可以使用 function 关键字来定义一个函数。函数可以接受多个输入参数,并通过 return 语句返回结果。下面是一个简单的函数定义的例子:

function result = add(a, b) result = a + b; end

这个函数名为 add,接受两个输入参数 ab,返回它们的和。 要调用一个函数,只需要在命令行或其他代码中输入函数名和括号,并提供必要的输入参数即可。例如:

>> result = add(1, 2) result = 3

4.3.2 函数参数和返回值

函数可以接受多个输入参数,也可以返回多个值。多个输入参数之间用逗号分隔,多个返回值也用逗号分隔,或者使用方括号括起来。下面是一个接受两个参数并返回两个值的函数的例子:

function [sum, diff] = sumAndDiff(a, b) sum = a + b; diff = a - b; end

这个函数接受两个输入 ab,返回它们的和与差。调用这个函数的方式如下:

>> [sum, diff] = sumAndDiff(10, 5) sum = 15 diff = 5

4.3.3 局部变量和全局变量

在函数内部定义的变量称为局部变量,它们只在函数内部有效。在函数外部定义的变量称为全局变量,它们可以在所有函数中访问。 默认情况下,在函数内部定义的变量都是局部变量。如果要在函数内部访问全局变量,需要使用 global 关键字。下面是一个使用全局变量的例子:

global count; % 声明全局变量 count function increment() global count; % 在函数内部声明 count 为全局变量 count = count + 1; end count = 0; % 初始化全局变量 increment(); increment(); disp(count); % 输出 2

在这个例子中,我们首先声明了一个全局变量 count,然后在函数 increment 内部对其进行自增操作。

4.3.4 匿名函数和嵌套函数

除了使用 function 关键字定义的普通函数外,MATLAB 还支持匿名函数和嵌套函数。 匿名函数是一种没有函数名的函数,它们通常用于一次性的小任务。下面是一个匿名函数的例子:

square = @(x) x^2; disp(square(5)); % 输出 25

在这个例子中,我们定义了一个计算平方的匿名函数,并将其赋值给变量 square。然后,我们就可以像调用普通函数一样调用这个匿名函数了。 嵌套函数是定义在另一个函数内部的函数。它们可以访问父函数的变量。下面是一个嵌套函数的例子:

function outer x = 10; inner(); function inner disp(x); end end outer(); % 输出 10

在这个例子中,函数 inner 定义在函数 outer 内部。inner 可以直接访问 outer 中定义的变量 x

4.4 脚本与函数文件

除了在命令行窗口中直接执行代码外,我们还可以将代码保存到文件中,然后运行这些文件。MATLAB 支持两种类型的代码文件:脚本文件和函数文件。

4.4.1 脚本文件的创建和运行

脚本文件是一种包含一系列 MATLAB 命令的文本文件,它们通常用于执行一些简单的、线性的任务。脚本文件的扩展名为 .m。 要创建一个脚本文件,可以使用 MATLAB 的编辑器。在命令行窗口中输入 edit 命令,然后在打开的编辑器中输入代码,最后保存文件即可。例如,我们可以创建一个名为 hello.m 的脚本文件,其内容如下:

disp('Hello, MATLAB!');

要运行一个脚本文件,只需在命令行窗口中输入文件名(不带扩展名)即可。例如,要运行 hello.m,只需输入:

>> hello Hello, MATLAB!

4.4.2 函数文件的创建和调用

函数文件也是一种 .m 文件,但它们主要用于定义函数。每个函数文件应该只包含一个同名的主函数,以及任意数量的局部函数。 要创建一个函数文件,过程与创建脚本文件类似。唯一的区别是,函数文件的第一行应该是函数定义。例如,我们可以创建一个名为 add.m 的函数文件,其内容如下:

function result = add(a, b) result = a + b; end

要调用一个函数文件中定义的函数,只需在命令行或其他代码中输入函数名和括号,并提供必要的输入参数即可。例如:

>> result = add(1, 2根据您的要求,我将继续输出第4章节的剩余内容。以下是从上一次输出的内容开始的延续: ```matlab >> result = add(1, 2) result = 3

4.4.3 脚本与函数的区别和应用

虽然脚本文件和函数文件都可以用来组织和执行 MATLAB 代码,但它们有一些重要的区别:

  • 脚本文件中的代码在当前工作区间执行,可以直接访问和修改工作区间中的变量。而函数文件有自己独立的工作区间,不能直接访问外部的变量。
  • 脚本文件通常用于执行一些简单的、线性的任务,如数据处理、结果分析等。而函数文件通常用于定义可重复使用的功能模块。
  • 脚本文件可以直接运行,而函数文件需要被调用。

在实际应用中,我们通常将一些通用的、可重复使用的功能定义在函数文件中,然后在脚本文件中调用这些函数来完成特定的任务。这样可以使我们的代码更加模块化和易于维护。

小结

在本章中,我们深入探讨了 MATLAB 编程的基础知识,包括:

  • 变量与数据类型的定义和使用。
  • 流程控制语句,包括条件语句和循环语句。
  • 自定义函数的创建和调用。
  • 脚本文件和函数文件的区别和应用。

掌握这些内容,你就可以使用 MATLAB 编写出功能强大的程序了。在接下来的章节中,我们将继续探讨 MATLAB 的更多高级主题,如数据处理、信号分析、图像处理等。让我们继续前进,成为 MATLAB 编程的高手吧!

练习题

  1. 创建一个函数calculateBMI,接受两个参数:身高(单位:米)和体重(单位:千克),计算并返回 BMI 值(Body Mass Index,体重除以身高的平方)。

  2. 创建一个脚本文件calculateGrade,根据学生的分数(0-100)输出相应的等级:

    • 90-100: A
    • 80-89: B
    • 70-79: C
    • 60-69: D
    • 0-59: F
  3. 创建一个函数isPrime,接受一个正整数作为参数,如果该数是质数则返回true,否则返回false

  4. 创建一个脚本文件plotSinCos,绘制正弦函数和余弦函数在

    区间内的图像。

  5. 创建一个函数factorial,使用递归计算非负整数的阶乘。