MATLAB基础知识【4】

6 阅读4分钟

格式化字符串

A = pi*1000*ones(1,5);
sprintf(' %f \n %.2f \n %+.2f \n %12.2f \n %012.2f \n', A)
ans =  3141.592654 
   3141.59 
   +3141.59 
      3141.59 
   000003141.59

这段代码的使用 sprintf 函数格式化并打印数组 A 中的元素。 这里,pi 是圆周率,ones(1, 5) 创建了一个包含 5 个 1 的行向量。因此,A 是一个包含 5 个元素的行向量,每个元素都是 pi * 1000。 假设 pi 的近似值是 3.14159,那么 A 将是:

A =

    3141.592653589793
    3141.592653589793
    3141.592653589793
    3141.592653589793
    3141.592653589793

接下来,使用 sprintf 函数格式化并打印 A 中的元素:

sprintf(' %f \n %.2f \n %+.2f \n %12.2f \n %012.2f \n', A)

sprintf 函数的格式说明符 %f, %.2f, %+.2f, %12.2f, %012.2f 分别表示不同的格式:

  1. %f \n: 打印浮点数,默认宽度。
  2. %.2f \n: 打印浮点数,保留两位小数。
  3. %+.2f \n: 打印浮点数,保留两位小数,并始终显示正负号。
  4. %12.2f \n: 打印浮点数,保留两位小数,总宽度至少为 12 个字符(左对齐)。
  5. %012.2f \n: 打印浮点数,保留两位小数,总宽度至少为 12 个字符,用前导零填充(左对齐)。

连接字符串

%字符串单元格数组
str_array = {'red','blue','green', 'yellow', 'orange'};

%将单元格数组中的字符串合并为单个字符串
str1 = strjoin(str_array, "-")
str2 = strjoin(str_array, ",")
str1 = red-blue-green-yellow-orange
str2 = red,blue,green,yellow,orange

查找和替换字符串

students = {'Zara Ali', 'Neha Bhatnagar', ...
            'Monica Malik', 'Madhu Gautam', ...
            'Madhu Sharma', 'Bhawna Sharma',...
            'Nuha Ali', 'Reva Dutta', ...
            'Sunaina Ali', 'Sofia Kabir'};
 
%strrep函数搜索并替换子字符串。
new_student = strrep(students(8), 'Reva', 'Poulomi')
%显示名字
first_names = strtok(students)
new_student = 
{
   [1,1] = Poulomi Dutta
}
first_names = 
{
   [1,1] = Zara
   [1,2] = Neha
   [1,3] = Monica
   [1,4] = Madhu
   [1,5] = Madhu
   [1,6] = Bhawna
   [1,7] = Nuha
   [1,8] = Reva
   [1,9] = Sunaina
   [1,10] = Sofia
}

比较字符串

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

匿名函数

什么是匿名函数

匿名函数是指没有名称的函数。它们通常用于编写简短的、一次性的函数,或者在不希望给函数命名的情况下使用。

# 使用 lambda 关键字创建匿名函数
add = lambda x, y: x + y
print(add(3, 4))  # 输出:7
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
function [x1,x2] = quadratic(a,b,c)
%a: 二次项系数。
%b: 一次项系数。
%c: 常数项。
d = disc(a,b,c); 
%调用辅助函数 disc(a, b, c) 计算判别式 
%Δ = b^2 - 4*a*c;
x1 = (-b + d) / (2*a);
%x1: 二次方程的正根
x2 = (-b - d) / (2*a);
%x2: 二次方程的负根
end  
function dis = disc(a,b,c) 
%函数计算判别式
dis = sqrt(b^2 - 4*a*c);
%sqrt 用于计算一个数的平方根
end  

处理复数根

在 MATLAB 中,处理复数根非常直接,因为 MATLAB 内置了对复数的支持。当判别式 Δ<0 时,sqrt 函数会自动返回复数结果。复数在 MATLAB 中以 a + bi 的形式表示,其中 i 是虚数单位。 为了处理复数根,你可以直接使用 sqrt 函数计算判别式,然后根据求根公式计算根。MATLAB 会自动处理复数运算。

[a, b, c] = [1, 2, 5];
[x1, x2] = quadratic(a, b, c);
disp(['Root 1: ', num2str(x1)]);
disp(['Root 2: ', num2str(x2)]);
Root 1: -1.0000 + 2.0000i
Root 2: -1.0000 - 2.0000i

嵌套函数

function [x1,x2] = quadratic2(a,b,c)
function disc  %嵌套函数
d = sqrt(b^2 - 4*a*c);
end   % 结束函数disc

disc;
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end   %结束函数 quadratic2

私有函数

私有函数是仅对有限的一组其他函数可见的主函数。如果不想公开函数function(s)的实现,可以将它们创建为私有函数。 私有函数位于具有特殊名称 Private 的子文件夹中。 它们仅对父文件夹中的函数可见。 在工作目录文件夹中创建一个名为 private 的子文件夹,在其中存储以下函数文件 disc.m

function dis = disc(a,b,c) 
%函数计算判别式
dis = sqrt(b^2 - 4*a*c);
end      %子函数结束

工作目录中创建一个函数 quadratic3.m ,并在其中输入以下代码

function [x1,x2] = quadratic3(a,b,c)

% 这个函数返回
% 一元二次方程。
它需要3个输入参数
% 它们是 x2,x 和
% 常数项
% 它返回根
d = disc(a,b,c); 

x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end      %结束 quadratic3

从命令提示符处调用上述函数,如下所示: quadratic3(2,4,-4)

全局变量

创建一个名为average.m的函数文件,并在其中输入以下代码

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

创建一个脚本文件并在其中键入以下代码

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