MATLAB学习第八天(数组,符号,函数)下

简介: MATLAB学习第八天(数组,符号,函数)

将字符串组合成单元格数组


从前面的学习中,很明显,组合不同长度的字符串可能会很痛苦,因为数组中的所有字符串都必须具有相同的长度。在字符串的末尾使用了空格,使其长度相等。

然而,组合字符串的更有效的方法是将生成的数组转换为单元格数组。

MATLAB单元格数组可以在数组中保存不同大小和类型的数据。单元格数组提供了一种更灵活的方法来存储不同长度的字符串。

cellstr函数将字符数组转换为字符串的单元格数组。


详细例子


在MATLAB中建立一个脚本文件,输入下述代码:

name =     'Zara Ali                             ';
position = 'Sr. Surgeon                          '; 
worksAt =  'R N Tagore Cardiology Research Center';
profile = char(name, position, worksAt);
profile = cellstr(profile);
disp(profile)


运行该文件,显示以下结果:

'Zara Ali'
'Sr. Surgeon'
'R N Tagore Cardiology Research Center'


MATLAB中的字符串函数


MATLAB 提供了许多创建、组合、分析、比较和处理字符串的字符串函数。


下表是对 MATLAB 中字符串函数的简要说明:

函数 目的/作用
用于存储文本字符数组的函数,结合字符数组,等等
blanks 创建空白字符的字符串
cellstr 从字符数组中创建字符串单元格数组
char 转换为字符数组 (字符串)
iscellstr 确定输入是否是字符串的单元格数组
ischar 确定项是否为字符数组
sprintf 将数据格式化为字符串
strcat 水平串联字符串
strjoin 将单元格数组中的字符串合并为单个字符串
识别字符串部分的函数,查找和替换子串
ischar 确定项是否为字符数组
isletter 按照字母次序的数组元素
sspace 数组元素是空格字符
isstrprop 确定字符串是否为指定类别
sscanf 从字符串读取格式化数据
strfind 在另一个字符串中找到一个字符串
strrep 查找和替换字符串
strsplit 在指定分隔符处拆分字符串
strtok 字符串的选定部分
validatestring 检查文本字符串的有效性
symvar 在表达式中确定符号变量
regexp 匹配正则表达式 (区分大小写)
regexpi 匹配正则表达式 (不区分大小写)
regexprep 使用正则表达式替换字符串
regexptranslate 将字符串转换为正则表达式
字符串比较函数
strcmp 比较字符串 (区分大小写)
strcmpi 比较字符串 (不区分大小写)
strncmp 比较字符串的前 n 个字符 (区分大小写)
strncmpi 比较字符串的前 n 个字符 (不区分大小写)
改变字符串大写或小写,创建或删除空格的函数
deblank 从字符串末尾分隔尾随空格
strtrim 从字符串中删除前导空格和尾随空格
lower 将字符串转换为小写
upper 将字符串转换为大写
strjust 对齐字符数组


详细例子


接下来对上述的字符串的函数进行举例说明:


格式化字符串


在MATLAB中建立一个脚本文件,输入下述代码:

A = pi*1000*ones(1,5);
sprintf(' %f 
 %.2f 
 %+.2f 
 %12.2f 
 %012.2f 
', A)


运行该文件,显示以下结果:

ans =
 3141.592654 
 3141.59 
 +3141.59 
      3141.59 
 000003141.59


加入字符串


在MATLAB中建立一个脚本文件,输入下述代码:

%cell array of strings
str_array = {'red','blue','green', 'yellow', 'orange'};
% Join strings in cell array into single string
str1 = strjoin(str_array, "-")
str2 = strjoin(str_array, ",")


运行该文件,显示以下结果:

1.


查找和替换字符串


在MATLAB中建立一个脚本文件,并输入下述代码:

students = {'Zara Ali', 'Neha Bhatnagar', ...
            'Monica Malik', 'Madhu Gautam', ...
            'Madhu Sharma', 'Bhawna Sharma',...
            'Nuha Ali', 'Reva Dutta', ...
            'Sunaina Ali', 'Sofia Kabir'};
% The strrep function searches and replaces sub-string.
new_student = strrep(students(8), 'Reva', 'Poulomi')
% Display first names
first_names = strtok(students)


运行该文件,显示以下结果:

new_student = 
    'Poulomi Dutta'
first_names = 
  Columns 1 through 6
    'Zara'    'Neha'    'Monica'    'Madhu'    'Madhu'    'Bhawna'
  Columns 7 through 10
    'Nuha'    'Reva'    'Sunaina'    'Sofia'


比较字符串


在MATLAB中建立一个脚本文件,输入下述代码:

str1 = 'This is test'
str2 = 'This is text'
if (strcmp(str1, str2))
 sprintf('%s and %s are equal', str1, str2)
else
 sprintf('%s and %s are not equal', str1, str2)
end


运行该文件,显示以下结果:

str1 =
This is test
str2 =
This is text
ans =
This is test and This is text are not equal


MATLAB函数


在MATLAB中,函数定义在单独的文件。函数和函数的文件名应该是相同的。


函数是一起执行任务的一组语句。

函数在自己的工作空间进行操作,被称为本地工作区,独立的工作区;在 MATLAB 命令提示符访问,这就是所谓的基础工作区的变量。

函数可以接受多个输入参数和可能返回多个输出参数。

函数语句的语法是:

function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)


详细例子


下述有个 mymax 函数,它需要五个数字作为参数并返回最大的数字。

建立函数文件,命名为 mymax.m 并输入下面的代码:

function max = mymax(n1, n2, n3, n4, n5)
%This function calculates the maximum of the
% five numbers given as input
max =  n1;
if(n2 > max)
    max = n2;
end
if(n3 > max)
   max = n3;
end
if(n4 > max)
    max = n4;
end
if(n5 > max)
    max = n5;
end


每个函数的第一行要以 function 关键字开始。它给出了函数的名称和参数的顺序。

在我们的例子中,mymax 函数有5个输入参数和一个输出参数。

注释行语句的功能后提供的帮助文本。这些线条打印,当输入:

help mymax


MATLAB执行上述语句,返回以下结果:

1. This function calculates the maximum of the
2.  five numbers given as input

可以调用该函数:

mymax(34, 78, 89, 23, 11)


MATLAB执行上述语句,返回以下结果:

1. ans =
2.     89


MATLAB匿名函数


一个匿名的函数就像是在传统的编程语言,在一个单一的 MATLAB 语句定义一个内联函数。

它由一个单一的 MATLAB 表达式和任意数量的输入和输出参数。

在MATLAB命令行或在一个函数或脚本可以定义一个匿名函数。

这种方式,可以创建简单的函数,而不必为他们创建一个文件。

建立一个匿名函数表达式的语法如下:

f = @(arglist)expression


详细例子


在这个例子中,我们将编写一个匿名函数 power,这将需要两个数字作为输入并返回第二个数字到第一个数字次幂。

在MATLAB中建立一个脚本文件,并输入下述代码:

power = @(x, n) x.^n;
result1 = power(7, 3)
result2 = power(49, 0.5)
result3 = power(10, -10)
result4 = power (4.5, 1.5)


运行该文件时,显示结果:

result1 =
   343
result2 =
     7
result3 =
   1.0000e-10
result4 =
    9.5459


主要函数和子函数


在一个文件中,必须定义一个匿名函数以外的任何函数。每个函数的文件包含一个必需的主函数和首先出现的任何数量的可选子函数,在主要函数之后使用。

主要函数可以调用的文件,它定义之外,无论是从命令行或从其他函数,但子功能不能被称为命令行或其他函数,外面的函数文件。

子功能可见函数内的文件,它定义它们的主要函数和其他函数。


详细例子


我们写一个 quadratic 函数来计算一元二次方程的根。

该函数将需要三个输入端,二次系数,线性合作高效的和常数项,它会返回根。

函数文件 quadratic.m 将包含的主要 quadratic 函数和子函数 disc 来计算判别。

在MATLAB中建立一个函数文件 quadratic.m 并输入下述代码:

function [x1,x2] = quadratic(a,b,c)
%this function returns the roots of 
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficients of x2, x and the 
%constant term
% It returns the roots
d = disc(a,b,c); 
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of quadratic
function dis = disc(a,b,c) 
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end % end of sub-function


可以从命令提示符调用上述函数为:

quadratic(2,4,-4)

MATLAB执行上面的语句,返回以下结果:

ans =
    0.7321


MATLAB嵌套函数


在这个机体内另一个函数,可以定义函数。这些被称为嵌套函数。

嵌套函数包含任何其他函数的任何或所有的组件。

嵌套函数被另一个函数的范围内定义他们共享访问包含函数的工作区。

嵌套函数的语法如下:

function x = A(p1, p2)
...
B(p2)
   function y = B(p3)
   ...
   end
...
end


详细例子


我们重写前面例子的 quadratic 函数,但是,这一次的 disc 函数将是一个嵌套函数。

在MATLAB中建立一个函数文件 quadratic2.m,并输入下述代码:

function [x1,x2] = quadratic2(a,b,c)
function disc  % nested function
d = sqrt(b^2 - 4*a*c);
end % end of function disc
disc;
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of function quadratic2


可以从命令提示符调用上面的函数为:

quadratic2(2,4,-4)


MATLAB执行上面的语句,返回以下结果:

ans =
    0.7321


MATLAB私有函数


一个私有函数是一个主要的函数,是只看得见一组有限的其它函数。

如果不想公开的执行的一个函数,可以创建私有函数。

私有函数驻留特殊的名字私人的子文件夹中。

他们是可见的,只有在父文件夹的函数。


详细例子


重写 quadratic 函数。然而,这时计算的判别式 disc 函数,是一个私有函数。

在MATLAB中建立一个子文件夹命名为私人工作目录。它存储在以下函数文件 disc.m:

function dis = disc(a,b,c) 
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end % end of sub-function


在工作目录,创建一个函数 quadratic3.m ,输入下述代码:

function [x1,x2] = quadratic3(a,b,c)
%this function returns the roots of 
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficients of x2, x and the 
%constant term
% It returns the roots
d = disc(a,b,c); 
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of quadratic3


可以从命令提示符调用上面的函数为:

quadratic3(2,4,-4)

MATLAB执行上面的语句,返回以下结果:

ans =
    0.7321


MATLAB全局变量


全局变量可以由一个以上的函数共享。对于这一点,需要将变量声明为global ,就可以在所有的函数可使用。

如果想访问该变量。从基工作区,然后在命令行声明的变量。

全局声明必须出现在变量中。实际上是使用功能。这是一个很好的做法是使用大写字母为全局变量的名称,以区别于其他变量。


详细例子


创建一个函数文件名为 average.m ,输入下述代码:

function avg = average(nums)
global TOTAL
avg = sum(nums)/TOTAL;
end


在MATLAB中建立一个脚本文件,输入下面的代码:

global TOTAL;
TOTAL = 10;
n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42];
av = average(n)


运行该文件,显示以下结果:

av =
   35.5000



目录
相关文章
|
14天前
|
Python Windows
SciPy 教程 之 SciPy Matlab 数组 1
本教程介绍了如何使用 SciPy 的 `scipy.io` 模块处理 Matlab 数组。通过 `savemat()` 方法可以将数据导出为 Matlab 格式的文件,而 `loadmat()` 方法则用于从 Matlab 文件中导入数据。示例展示了如何导出和导入一维数组,并解决了导入时数组维度增加的问题。
12 1
|
1月前
|
算法
MATLAB符号计算
【10月更文挑战第9天】MATLAB不仅擅长数值计算,还具备强大的符号计算功能,支持代数运算、方程求解、微积分等。本文介绍如何使用MATLAB的符号工具箱进行符号变量定义、方程求解、微分积分及矩阵运算,并通过多个实际应用案例展示了其在机械系统、电路分析、经济优化和物理运动学等领域的应用。此外,文章还提供了符号计算的最佳实践和未来展望。
48 2
|
1月前
|
算法 数据可视化 数据处理
MATLAB内置函数
【10月更文挑战第6天】本文详细介绍了MATLAB的内置函数和自定义函数,涵盖数学计算、矩阵操作、图形绘制等方面。通过具体代码示例,展示了如何使用内置函数和创建自定义函数,以及它们在性能、灵活性和可读性上的优劣。同时,文章还讨论了函数文件与脚本文件的区别,匿名函数和函数句柄的高级应用,帮助读者更好地利用MATLAB解决复杂问题。
49 1
|
1月前
|
存储 机器学习/深度学习 数据可视化
MATLAB脚本与函数
【10月更文挑战第4天】本文介绍了MATLAB脚本与函数的基本概念及编写方法,涵盖脚本和函数的创建、运行及优缺点,通过示例帮助初学者快速上手。同时,文章还涉及数据类型、控制结构、数据可视化、文件操作、错误处理等内容,提供了丰富的示例和学习资源,助力初学者逐步掌握MATLAB编程。
95 3
|
6月前
|
机器学习/深度学习 数据安全/隐私保护 计算机视觉
matlab学习(二)
matlab学习(二)
|
3月前
|
Python
【Python】实现MATLAB中计算两个矩形相交面积的rectint函数
Python中实现MATLAB中rectint函数的方法,该函数用于计算两个矩形相交区域的面积,并通过定义Rectangle类和calc_area函数展示了如何计算两个矩形的交集面积。
52 1
|
4月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于负相关误差函数的4集成BP神经网络matlab建模与仿真
**算法预览:** 图像显示无水印的2022a版MATLAB运行结果 **软件版本:** MATLAB 2022a **核心代码片段:** 省略展示 **理论概述:** NCL集成BP网络利用负相关提升泛化,结合多个弱模型减少错误关联。通过λ参数控制模型间负相关程度,λ>0增强集成效果,提高预测准确性和系统稳健性。
|
5月前
|
算法 数据可视化 数据挖掘
MATLAB中常用的数学函数及其应用示例
MATLAB中常用的数学函数及其应用示例
|
6月前
|
算法 数据安全/隐私保护
matlab学习(三)
matlab学习(三)
|
3月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
202 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码

热门文章

最新文章

下一篇
无影云桌面