Matlab学习入门篇(四)—— 编程基础


在matlab中,用户可以直接在命令行中输入命令,以一种交互式的方式来编写程序。此方法适合命令行比较简单,输入比较方便,同时处理问题较少的情况。但需要处理复杂且任意出错的问题时,可以采用 M文件的形式进行编程。

一、M文件

M文件就是将各种处理问题的各种命令融合到一个文件中,该文件以.m为扩展名。
m文件分类:

  • 脚本文件:不需要输入参数,也不需要输出参数,按照指定的顺序执行命令序列,将变量保存在基本Base工作区中。
  • 函数文件:需要接受其他数据为输入参数,并且返回结果,将变量保存在自己单独的工作区中。

1.1m文件的基本内容

m文件内容说明
函数定义行(只存在于函数文件中)定义函数名称,定义输入输出变量的数量、顺序
H1行对程序进行总结说明的一行
Help文本对程序的详细说明
注释具体语句的功能注释、说明
函数体进行实际计算的代码

1.1.1函数定义行

function [out1,out2,...] = funName(in1,in2...)
function funName(in1,in2...) %无返回值

以上是函数定义语法,且保存函数文件时,matlab会默认以函数的名字来保存。

1.1.2 H1行和Help文本

H1行紧跟着函数定义行,用%开始。因为是Help文本的第一行,所以称为H1行;
Help文本时为调用帮助命令而建立的文本,可以是连续多行的注释文本。
通过以下两个命令都可以显示帮助文本:

help filename
lookfor filename

1.1.3 注释

单行注释:%
注释块:%{…}%

1.1.4函数体

函数体是函数与脚本中计算和处理数据的主体,可以包含进行计算和赋值的语句、函数调用、循环和流控制语句,以及注释语句、空行等。使用disp函数显示函数输出结果。

1.2 函数式M文件

此类型的M文件一般需要输入变量,并且有返回结果;也可以不带变量,,第一行是从function关键词开始。默认情况下,函数式M文件中的变量都是局部变量,仅在函数运行期间有效,函数运行结束后,这些变量将从工作区中清除。

average.m
function y = average(x)
% average mean of vector elements.
% average(x),where x is a vector, is the mean vector.
% elements.Nonvector input results in an error.
[m,n] = size(x);
if (~((m == 1) || (n == 1)) || (m == 1 && n == 1))
    error('Input must be a vector')
end
y = sum(x)/length(x); %计算平均值

二、流程控制

Matlab的基本程序结构为顺序结构,即代码的执行顺序从上到下。同时matlab也包括判断语句、循环语句和分支语句等。

2.1if语句

在编写程序时,往往需要根据一定的条件进行判断,然后选择执行不同的语句。条件判断语句一般有以下三种使用形式。

2.1.1 if…end

if 表达式
   执行语句
end

例如判断a是否是偶数:

a = 6;
if rem(a,2) == 0
    disp('a是偶数')
end

2.1.2 if…else…end

if 表达式
	表达式1
else
	表达式2
end

2.1.3 if…elseif…else…end

if n < 0
	disp('输入需要是一个正数');
elseif rem(n,2) == 0
	a = n/2;
else
    b = (n+1)/2;
end

2.2 switch语句

switch语句中如果某一个case中的条件语句为true,则其他的case语句将不会再继续执行,程序将直接跳至switch语句结尾。

switch var
	case 1
		disp('1')
	case {2,3 4}
		disp('2 or 3 or 4')
	case 5
		disp('5')
	otherwise
		disp('something else')
end

2.3 循环语句

2.3.1 for循环

语法结构

for 变量=表达式
	执行语句
end

例如:

for a = [2,3,4,5]
	disp(a)
end

2.3.2 while循环

语法结构:

while 表达式
	执行语句
end

在使用while循环时,一定要在执行语句中设置表达式的值为false的情况,以免出现死循环。

i=1;
while i < 10
	x(i) = i^3;
	i = i + 1;
end

2.4 continue、break、return语句

continue:一般与for循环、while循环一起使用,作用是结束此次循环,即跳过本次循环体中未执行的语句,然后进行下一轮循环。
break:通常在循环体或者在判断语句中,使用break语句,可以不必等待循环的自然结束,而可以根据循环的终止条件来跳出循环。
return:使得当前这个调用的函数正常退出。首先对特定条件进行判断,然后根据需要,调用return语句终止当前正在运行的函数。

2.5 常用的人机交互命令

2.5.1输入提示命令Input

input命令用来提示用户从键盘输入数据、字符串或者表达式,并等待输入值。

user_entry = input('prompt')

2.5.2 pause命令

pause命令用于暂时中止程序的运行。
pause:导致M文件停止,等待用户按任意键继续运行;
pause(n):在继续执行前中止执行程序n秒,n可以是任意实数;
pause on:允许后续的pause命令中止程序的运行;
pause off:将保证后续的任何pause或pause(n)语句都不中止程序的运行。

三、函数

3.1普通函数

编写如下一个函数:如果x>0,那么y=2x;如果x=0,则y=0;其他情况y=-x;

function y = f(x)
    if x > 0
        y = 2*x;
    elseif x == 0
        y = 0;
    else
        y = -x;
    end
end

执行测试结果:

>> f(2)
ans =
     4
>> f(-1)
ans =
     1

3.2 嵌套函数

嵌套函数简而言之,就是函数内部再包含了一个或者是多个函数。
例如,名称为 parent 的函数包含名称为 nestedfx 的嵌套函数:

function parent
disp('This is the parent function')
nestedfx

   function nestedfx
      disp('This is the nested function')
   end

end

嵌套函数的调用:

  • 该嵌套函数的直接上一层函数
  • 同一母函数下的同级嵌套函数
  • 任意低级别的函数

嵌套函数可以访问修改它们所在的函数工作区中的变量。这意味着嵌套函数及包含它的函数都可以修改同一变量,不必将该变量作为参数传递。

function parent
x = 5;
z = nestfun;

   function y = nestfun
     y = x + 1;
   end 
z
end

输出结果:

>> f

z =

     6

3.3 匿名函数

匿名函数可以接受多个输入并返回一个输出。它们可能只包含一个可执行语句。
基本格式:

f = @(变量列表)表达式

例如,该匿名函数接受单个输入 x,并显式返回单个输出,即大小与包含平方值的 x 相同的数组:

sqr = @(x) x.^2;

执行结果:

a = sqr(5)
a =
    25

四、函数的变量

4.1变量类型

根据变量作用的工作区划分:局部变量、全局变量和永久变量。

4.1.1局部变量

在函数中,变量默认为局部变量;这些变量存储在该函数独立的工作区中,与其他函数的变量以及主共工作区的变量分开存储。

4.1.2全局变量

全局变量可以在定义该变量的全部工作区中有效。若任何一个函数需要使用去全局变量,则必须首先声明全局变量
语法格式:

global var1 ... varN

4.1.3永久变量

特点:

  • 只能在函数文件内部定义
  • 只有该变量从属的函数能够访问该变量
  • 当函数运行结束时,该变量的值保留在内存中,因此再次调用该函数时,可以再次利用这些变量。
persistent var1 ... varN

4.2变量的传递

nargin:在函数体内,用于获取实际输入变量个数
nargin(fun):获取fun指定函数所定义的输入变量个数
nargout:在函数体内,用于获取实际输出变量个数
nargout(fun):获取fun指定函数所定义的输出变量个数

五、函数句柄

5.1函数句柄的创建

函数句柄是一种表示函数的 MATLAB 数据类型。函数句柄的典型用法是将函数传递给另一个函数。函数句柄可以表示命名函数或匿名函数。要创建函数句柄,请使用 @ 运算符。
例如,创建用于计算表达式 x2 – y2 的匿名函数的句柄:

f = @(x,y) (x.^2 - y.^2)

例如,创建一个指向用于计算平方数的匿名函数的句柄 sqr,并使用其句柄调用该匿名函数:

sqr = @(n) n.^2;
x = sqr(3)
x =

     9

5.2 操作函数句柄的常用函数

函数名功能描述
functions返回函数句柄的相关信息
func2str根据函数句柄创建一个函数名的字符串
str2func由一个函数名的字符串创建一个函数句柄
isequal判断两个函数句柄是否为某一相同函数的句柄

例如:调用func2str和str2func函数

>> fhandle = @sin;
func2str(fhandle)
ans =

    'sin'

>> fh = str2func('sin')
fh =

  包含以下值的 function_handle:

    @sin

未完待续。。。

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 机器学习是一门涉及数据处理和模式识别的学科,它通过构建和训练模型来进行预测和分类。而MATLAB作为一种功能强大的计算机编程语言,具备丰富的数据处理和分析工具,因此成为了机器学习中常用的工具之一。 MATLAB提供了多种机器学习的实践应用源码,供初学者进行入门学习和实践。学习者可以通过这些源码了解机器学习的基本原理和流程,以及如何将其应用于实际问题中。 MATLAB的机器学习实战源码通常涵盖以下内容: 1. 数据预处理:通过MATLAB的数据处理函数,对原始数据进行清洗、归一化等预处理操作,以减少噪声的影响,并保证数据的可靠性和一致性。 2. 特征选择:根据问题的需求和特征的相关性,选择最具代表性的特征集,以提高分类和预测的准确度。 3. 模型训练:使用MATLAB的机器学习工具箱,选择相应的模型算法进行训练。常见的算法包括线性回归、逻辑回归、支持向量机、决策树等。 4. 模型评估:使用交叉验证、混淆矩阵等评估指标,对训练出的模型进行评估,判断其预测和分类的准确度。 5. 结果可视化:利用MATLAB的绘图函数,对机器学习模型的结果进行可视化展示,以便更直观地理解和分析。 通过实践应用源码,学习者可以在实际操作中深入理解机器学习的原理和算法,并掌握如何使用MATLAB进行数据处理、模型训练和结果评估。这也为进一步深入研究和应用机器学习奠定了基础。 ### 回答2: 机器学习是人工智能领域的重要分支,通过训练模型和算法来使机器能够自动学习和提高性能。机器学习的应用非常广泛,包括图像识别、自然语言处理、推荐系统等等。 在机器学习的实践中,MATLAB 是一种常用的工具。MATLAB 具有丰富的机器学习函数和工具箱,可以帮助用户快速实现算法和模型。 要进行机器学习的实战,首先需要学习一些基本的概念和算法。机器学习中的一些常见算法包括线性回归、逻辑回归、决策树、支持向量机、神经网络等。MATLAB 中都有相应的函数和工具箱可以使用。可以通过学习 MATLAB 的帮助文档和示例代码来掌握这些算法的使用方法和原理。 在实际应用中,可以使用 MATLAB 来处理数据、建立模型、进行训练和评估。首先,将数据导入到 MATLAB 环境中,可以使用 MATLAB 提供的数据处理函数进行数据清洗和预处理。然后,选择合适的算法和模型,使用 MATLAB 提供的函数进行训练和优化。训练完成后,可以使用测试数据对模型进行评估。MATLAB 提供了丰富的可视化函数,可以对结果进行可视化展示和分析。 除了基本的算法和模型,MATLAB 中还有一些专门的工具箱,例如深度学习工具箱和图像处理工具箱,可以更方便地进行相关任务的实现。 总而言之,MATLAB 是一个强大的工具,提供了丰富的函数和工具箱,可以帮助用户进行机器学习的入门到实战。通过学习 MATLAB 的相关函数和示例代码,掌握机器学习的基本概念和算法,并在实际应用中进行模型的训练和评估,可以更好地理解和应用机器学习的知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值