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



目录
相关文章
|
4天前
|
数据安全/隐私保护
地震波功率谱密度函数、功率谱密度曲线,反应谱转功率谱,matlab代码
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
4天前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)
|
4天前
|
调度
知识分享|分段函数线性化及matlab测试
知识分享|分段函数线性化及matlab测试
|
1月前
雷达模糊函数及MATLAB仿真(三)
雷达模糊函数及MATLAB仿真
22 0
|
1月前
雷达模糊函数及MATLAB仿真(二)
雷达模糊函数及MATLAB仿真
35 0
|
4天前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
4天前
|
算法 调度
面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)
面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)

热门文章

最新文章