格式化字符串
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
分别表示不同的格式:
%f \n
: 打印浮点数,默认宽度。%.2f \n
: 打印浮点数,保留两位小数。%+.2f \n
: 打印浮点数,保留两位小数,并始终显示正负号。%12.2f \n
: 打印浮点数,保留两位小数,总宽度至少为 12 个字符(左对齐)。%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